diff --git a/cli/command/service/create.go b/cli/command/service/create.go index 6e49558609a1..142b22ea88c7 100644 --- a/cli/command/service/create.go +++ b/cli/command/service/create.go @@ -68,6 +68,7 @@ func newCreateCommand(dockerCli command.Cli) *cobra.Command { flags.SetAnnotation(flagSysCtl, "version", []string{"1.40"}) flags.Var(&opts.ulimits, flagUlimit, "Ulimit options") flags.SetAnnotation(flagUlimit, "version", []string{"1.41"}) + flags.Var(&opts.oomScoreAdj, flagOomScoreAdj, "oom score adjustment (-1000 to 1000)") flags.Var(cliopts.NewListOptsRef(&opts.resources.resGenericResources, ValidateSingleGenericResource), "generic-resource", "User defined resources") flags.SetAnnotation(flagHostAdd, "version", []string{"1.32"}) diff --git a/cli/command/service/opts.go b/cli/command/service/opts.go index dc62cfe74d67..34a44a8ddb61 100644 --- a/cli/command/service/opts.go +++ b/cli/command/service/opts.go @@ -529,6 +529,7 @@ type serviceOptions struct { capAdd opts.ListOpts capDrop opts.ListOpts ulimits opts.UlimitOpt + oomScoreAdj opts.OomScoreAdj resources resourceOptions stopGrace opts.DurationOpt @@ -575,6 +576,7 @@ func newServiceOptions() *serviceOptions { capAdd: opts.NewListOpts(nil), capDrop: opts.NewListOpts(nil), ulimits: *opts.NewUlimitOpt(nil), + oomScoreAdj: opts.OomScoreAdj(0), } } @@ -747,6 +749,7 @@ func (options *serviceOptions) ToService(ctx context.Context, apiClient client.N CapabilityAdd: capAdd, CapabilityDrop: capDrop, Ulimits: options.ulimits.GetList(), + OomScoreAdj: options.oomScoreAdj.Value(), }, Networks: networks, Resources: resources, @@ -1043,6 +1046,7 @@ const ( flagUlimit = "ulimit" flagUlimitAdd = "ulimit-add" flagUlimitRemove = "ulimit-rm" + flagOomScoreAdj = "oom-score-adj" ) func validateAPIVersion(c swarm.ServiceSpec, serverAPIVersion string) error { diff --git a/cli/command/service/update.go b/cli/command/service/update.go index 5fa496ddd900..b3a56c7c6836 100644 --- a/cli/command/service/update.go +++ b/cli/command/service/update.go @@ -109,6 +109,7 @@ func newUpdateCommand(dockerCli command.Cli) *cobra.Command { flags.SetAnnotation(flagUlimitAdd, "version", []string{"1.41"}) flags.Var(newListOptsVar(), flagUlimitRemove, "Remove a ulimit option") flags.SetAnnotation(flagUlimitRemove, "version", []string{"1.41"}) + flags.Var(&options.oomScoreAdj, flagOomScoreAdj, "oom score adjustment (-1000 to 1000)") // Add needs parsing, Remove only needs the key flags.Var(newListOptsVar(), flagGenericResourcesRemove, "Remove a Generic resource") @@ -368,6 +369,10 @@ func updateService(ctx context.Context, apiClient client.NetworkAPIClient, flags updateInt64Value(flagReserveMemory, &task.Resources.Reservations.MemoryBytes) } + if anyChanged(flags, flagOomScoreAdj) { + updateInt64(flagOomScoreAdj, &task.ContainerSpec.OomScoreAdj) + } + if err := addGenericResources(flags, task); err != nil { return err } diff --git a/cli/compose/convert/service.go b/cli/compose/convert/service.go index ccff547ce958..9ab4e97c5230 100644 --- a/cli/compose/convert/service.go +++ b/cli/compose/convert/service.go @@ -149,6 +149,7 @@ func Service( CapabilityAdd: capAdd, CapabilityDrop: capDrop, Ulimits: convertUlimits(service.Ulimits), + OomScoreAdj: service.OomScoreAdj, }, LogDriver: logDriver, Resources: resources, diff --git a/cli/compose/loader/interpolate.go b/cli/compose/loader/interpolate.go index 24682614877b..e2bfa6ec89a1 100644 --- a/cli/compose/loader/interpolate.go +++ b/cli/compose/loader/interpolate.go @@ -28,6 +28,7 @@ var interpolateTypeCastMapping = map[interp.Path]interp.Cast{ servicePath("ulimits", interp.PathMatchAll): toInt, servicePath("ulimits", interp.PathMatchAll, "hard"): toInt, servicePath("ulimits", interp.PathMatchAll, "soft"): toInt, + servicePath("oom_score_adj"): toInt, servicePath("privileged"): toBoolean, servicePath("read_only"): toBoolean, servicePath("stdin_open"): toBoolean, diff --git a/cli/compose/schema/data/config_schema_v3.13.json b/cli/compose/schema/data/config_schema_v3.13.json index 0a85b3e6c508..8daa8892d625 100644 --- a/cli/compose/schema/data/config_schema_v3.13.json +++ b/cli/compose/schema/data/config_schema_v3.13.json @@ -287,6 +287,7 @@ } } }, + "oom_score_adj": {"type": "integer"}, "user": {"type": "string"}, "userns_mode": {"type": "string"}, "volumes": { diff --git a/cli/compose/types/types.go b/cli/compose/types/types.go index f2f68641d3bf..201667bfcb0b 100644 --- a/cli/compose/types/types.go +++ b/cli/compose/types/types.go @@ -207,6 +207,7 @@ type ServiceConfig struct { Tty bool `mapstructure:"tty" yaml:"tty,omitempty" json:"tty,omitempty"` Ulimits map[string]*UlimitsConfig `yaml:",omitempty" json:"ulimits,omitempty"` User string `yaml:",omitempty" json:"user,omitempty"` + OomScoreAdj int64 `yaml:",omitempty" json:"oom_score_adj,omitempty"` UserNSMode string `mapstructure:"userns_mode" yaml:"userns_mode,omitempty" json:"userns_mode,omitempty"` Volumes []ServiceVolumeConfig `yaml:",omitempty" json:"volumes,omitempty"` WorkingDir string `mapstructure:"working_dir" yaml:"working_dir,omitempty" json:"working_dir,omitempty"` diff --git a/opts/opts.go b/opts/opts.go index 80de16052c62..350d868513e0 100644 --- a/opts/opts.go +++ b/opts/opts.go @@ -6,6 +6,7 @@ import ( "net" "path" "regexp" + "strconv" "strings" "github.com/docker/docker/api/types/filters" @@ -515,3 +516,21 @@ func (m *MemSwapBytes) UnmarshalJSON(s []byte) error { b := MemBytes(*m) return b.UnmarshalJSON(s) } + +type OomScoreAdj int64 + +func (o *OomScoreAdj) Type() string { return "int64" } + +func (o *OomScoreAdj) Value() int64 { return int64(*o) } + +func (o *OomScoreAdj) String() string { + return strconv.FormatInt(int64(*o), 10) +} + +func (o *OomScoreAdj) Set(value string) error { + + var conv int64 + conv, _ = strconv.ParseInt(value, 10, 64) + *o = OomScoreAdj(conv) + return nil +} diff --git a/vendor.mod b/vendor.mod index 08c123927243..7ec5568a6ab6 100644 --- a/vendor.mod +++ b/vendor.mod @@ -12,7 +12,7 @@ require ( github.com/creack/pty v1.1.21 github.com/distribution/reference v0.5.0 github.com/docker/distribution v2.8.3+incompatible - github.com/docker/docker v26.1.1-0.20240606182029-00f18ef7a455+incompatible // master (v27.0.0-dev) + github.com/docker/docker v27.0.1-rc.1.0.20240621110831-6da604aa6a74+incompatible github.com/docker/docker-credential-helpers v0.8.2 github.com/docker/go-connections v0.5.0 github.com/docker/go-units v0.5.0 @@ -23,7 +23,7 @@ require ( github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 github.com/mattn/go-runewidth v0.0.15 github.com/moby/patternmatcher v0.6.0 - github.com/moby/swarmkit/v2 v2.0.0-20240415162501-c1c857e2dca1 + github.com/moby/swarmkit/v2 v2.0.0-20240611172349-ea1a7cec35cb github.com/moby/sys/sequential v0.5.0 github.com/moby/sys/signal v0.7.0 github.com/moby/term v0.5.0 diff --git a/vendor.sum b/vendor.sum index a1c124703468..19b5c0d795fb 100644 --- a/vendor.sum +++ b/vendor.sum @@ -59,8 +59,8 @@ github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5 github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v26.1.1-0.20240606182029-00f18ef7a455+incompatible h1:6OR7f7LuvJU27W400ctN0mxeAGDnPc0Fg2IGQhltKb0= -github.com/docker/docker v26.1.1-0.20240606182029-00f18ef7a455+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v27.0.1-rc.1.0.20240621110831-6da604aa6a74+incompatible h1:AaVEcuJZ91YFAjfHHxy/LQsOYzoqWzc5JyYYG290EiY= +github.com/docker/docker v27.0.1-rc.1.0.20240621110831-6da604aa6a74+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c h1:lzqkGL9b3znc+ZUgi7FlLnqjQhcXxkNM/quxIjBVMD0= @@ -179,8 +179,8 @@ github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3N github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= -github.com/moby/swarmkit/v2 v2.0.0-20240415162501-c1c857e2dca1 h1:F3L5Rx1jDTbUn/2U9Kb6tsNAl4MhQ+cdTiidA/qAiEA= -github.com/moby/swarmkit/v2 v2.0.0-20240415162501-c1c857e2dca1/go.mod h1:kNy225f/gWAnF8wPftteMc5nbAHhrH+HUfvyjmhFjeQ= +github.com/moby/swarmkit/v2 v2.0.0-20240611172349-ea1a7cec35cb h1:1UTTg2EgO3nuyV03wREDzldqqePzQ4+0a5G1C1y1bIo= +github.com/moby/swarmkit/v2 v2.0.0-20240611172349-ea1a7cec35cb/go.mod h1:kNy225f/gWAnF8wPftteMc5nbAHhrH+HUfvyjmhFjeQ= github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= github.com/moby/sys/signal v0.7.0 h1:25RW3d5TnQEoKvRbEKUGay6DCQ46IxAVTT9CUMgmsSI= diff --git a/vendor/github.com/docker/docker/AUTHORS b/vendor/github.com/docker/docker/AUTHORS index 36315d429d1e..5f93eeb4e82a 100644 --- a/vendor/github.com/docker/docker/AUTHORS +++ b/vendor/github.com/docker/docker/AUTHORS @@ -10,6 +10,7 @@ Aaron Huslage Aaron L. Xu Aaron Lehmann Aaron Welch +Aaron Yoshitake Abel Muiño Abhijeet Kasurde Abhinandan Prativadi @@ -62,6 +63,7 @@ alambike Alan Hoyle Alan Scherger Alan Thompson +Alano Terblanche Albert Callarisa Albert Zhang Albin Kerouanton @@ -141,6 +143,7 @@ Andreas Tiefenthaler Andrei Gherzan Andrei Ushakov Andrei Vagin +Andrew Baxter <423qpsxzhh8k3h@s.rendaw.me> Andrew C. Bodine Andrew Clay Shafer Andrew Duckworth @@ -193,6 +196,7 @@ Anton Löfgren Anton Nikitin Anton Polonskiy Anton Tiurin +Antonio Aguilar Antonio Murdaca Antonis Kalipetis Antony Messerli @@ -221,7 +225,6 @@ Avi Das Avi Kivity Avi Miller Avi Vaid -ayoshitake Azat Khuyiyakhmetov Bao Yonglei Bardia Keyoumarsi @@ -316,6 +319,7 @@ Burke Libbey Byung Kang Caleb Spare Calen Pennington +Calvin Liu Cameron Boehmer Cameron Sparr Cameron Spear @@ -362,6 +366,7 @@ Chen Qiu Cheng-mean Liu Chengfei Shang Chengguang Xu +Chentianze Chenyang Yan chenyuzhu Chetan Birajdar @@ -409,6 +414,7 @@ Christopher Crone Christopher Currie Christopher Jones Christopher Latham +Christopher Petito Christopher Rigor Christy Norman Chun Chen @@ -777,6 +783,7 @@ Gabriel L. Somlo Gabriel Linder Gabriel Monroy Gabriel Nicolas Avellaneda +Gabriel Tomitsuka Gaetan de Villele Galen Sampson Gang Qiao @@ -792,6 +799,7 @@ Geoff Levand Geoffrey Bachelet Geon Kim George Kontridze +George Ma George MacRorie George Xie Georgi Hristozov @@ -913,6 +921,7 @@ Illo Abdulrahim Ilya Dmitrichenko Ilya Gusev Ilya Khlopotov +imalasong <2879499479@qq.com> imre Fitos inglesp Ingo Gottwald @@ -930,6 +939,7 @@ J Bruni J. Nunn Jack Danger Canty Jack Laxson +Jack Walker <90711509+j2walker@users.noreply.github.com> Jacob Atzen Jacob Edelman Jacob Tomlinson @@ -989,6 +999,7 @@ Jason Shepherd Jason Smith Jason Sommer Jason Stangroome +Jasper Siepkes Javier Bassi jaxgeller Jay @@ -1100,6 +1111,7 @@ Jon Johnson Jon Surrell Jon Wedaman Jonas Dohse +Jonas Geiler Jonas Heinrich Jonas Pfenniger Jonathan A. Schweder @@ -1267,6 +1279,7 @@ Lakshan Perera Lalatendu Mohanty Lance Chen Lance Kinley +Lars Andringa Lars Butler Lars Kellogg-Stedman Lars R. Damerow @@ -1673,6 +1686,7 @@ Patrick Böänziger Patrick Devine Patrick Haas Patrick Hemmer +Patrick St. laurent Patrick Stapleton Patrik Cyvoct pattichen @@ -1878,6 +1892,7 @@ Royce Remer Rozhnov Alexandr Rudolph Gottesheim Rui Cao +Rui JingAn Rui Lopes Ruilin Li Runshen Zhu @@ -2184,6 +2199,7 @@ Tomek Mańko Tommaso Visconti Tomoya Tabuchi Tomáš Hrčka +Tomáš Virtus tonic Tonny Xu Tony Abboud @@ -2228,6 +2244,7 @@ Victor I. Wood Victor Lyuboslavsky Victor Marmol Victor Palma +Victor Toni Victor Vieux Victoria Bialas Vijaya Kumar K @@ -2279,6 +2296,7 @@ Wassim Dhif Wataru Ishida Wayne Chang Wayne Song +weebney Weerasak Chongnguluam Wei Fu Wei Wu diff --git a/vendor/github.com/docker/docker/api/swagger.yaml b/vendor/github.com/docker/docker/api/swagger.yaml index e4b9859b8d6f..cc754bf1fd12 100644 --- a/vendor/github.com/docker/docker/api/swagger.yaml +++ b/vendor/github.com/docker/docker/api/swagger.yaml @@ -442,6 +442,21 @@ definitions: Mode: description: "The permission mode for the tmpfs mount in an integer." type: "integer" + Options: + description: | + The options to be passed to the tmpfs mount. An array of arrays. + Flag options should be provided as 1-length arrays. Other types + should be provided as as 2-length arrays, where the first item is + the key and the second the value. + type: "array" + items: + type: "array" + minItems: 1 + maxItems: 2 + items: + type: "string" + example: + [["noexec"]] RestartPolicy: description: | @@ -1198,13 +1213,6 @@ definitions: ContainerConfig: description: | Configuration for a container that is portable between hosts. - - When used as `ContainerConfig` field in an image, `ContainerConfig` is an - optional field containing the configuration of the container that was last - committed when creating the image. - - Previous versions of Docker builder used this field to store build cache, - and it is not in active use anymore. type: "object" properties: Hostname: @@ -1363,6 +1371,289 @@ definitions: type: "string" example: ["/bin/sh", "-c"] + ImageConfig: + description: | + Configuration of the image. These fields are used as defaults + when starting a container from the image. + type: "object" + properties: + Hostname: + description: | + The hostname to use for the container, as a valid RFC 1123 hostname. + +


+ + > **Deprecated**: this field is not part of the image specification and is + > always empty. It must not be used, and will be removed in API v1.47. + type: "string" + example: "" + Domainname: + description: | + The domain name to use for the container. + +


+ + > **Deprecated**: this field is not part of the image specification and is + > always empty. It must not be used, and will be removed in API v1.47. + type: "string" + example: "" + User: + description: "The user that commands are run as inside the container." + type: "string" + example: "web:web" + AttachStdin: + description: | + Whether to attach to `stdin`. + +


+ + > **Deprecated**: this field is not part of the image specification and is + > always false. It must not be used, and will be removed in API v1.47. + type: "boolean" + default: false + example: false + AttachStdout: + description: | + Whether to attach to `stdout`. + +


+ + > **Deprecated**: this field is not part of the image specification and is + > always false. It must not be used, and will be removed in API v1.47. + type: "boolean" + default: false + example: false + AttachStderr: + description: | + Whether to attach to `stderr`. + +


+ + > **Deprecated**: this field is not part of the image specification and is + > always false. It must not be used, and will be removed in API v1.47. + type: "boolean" + default: false + example: false + ExposedPorts: + description: | + An object mapping ports to an empty object in the form: + + `{"/": {}}` + type: "object" + x-nullable: true + additionalProperties: + type: "object" + enum: + - {} + default: {} + example: { + "80/tcp": {}, + "443/tcp": {} + } + Tty: + description: | + Attach standard streams to a TTY, including `stdin` if it is not closed. + +


+ + > **Deprecated**: this field is not part of the image specification and is + > always false. It must not be used, and will be removed in API v1.47. + type: "boolean" + default: false + example: false + OpenStdin: + description: | + Open `stdin` + +


+ + > **Deprecated**: this field is not part of the image specification and is + > always false. It must not be used, and will be removed in API v1.47. + type: "boolean" + default: false + example: false + StdinOnce: + description: | + Close `stdin` after one attached client disconnects. + +


+ + > **Deprecated**: this field is not part of the image specification and is + > always false. It must not be used, and will be removed in API v1.47. + type: "boolean" + default: false + example: false + Env: + description: | + A list of environment variables to set inside the container in the + form `["VAR=value", ...]`. A variable without `=` is removed from the + environment, rather than to have an empty value. + type: "array" + items: + type: "string" + example: + - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + Cmd: + description: | + Command to run specified as a string or an array of strings. + type: "array" + items: + type: "string" + example: ["/bin/sh"] + Healthcheck: + $ref: "#/definitions/HealthConfig" + ArgsEscaped: + description: "Command is already escaped (Windows only)" + type: "boolean" + default: false + example: false + x-nullable: true + Image: + description: | + The name (or reference) of the image to use when creating the container, + or which was used when the container was created. + +


+ + > **Deprecated**: this field is not part of the image specification and is + > always empty. It must not be used, and will be removed in API v1.47. + type: "string" + default: "" + example: "" + Volumes: + description: | + An object mapping mount point paths inside the container to empty + objects. + type: "object" + additionalProperties: + type: "object" + enum: + - {} + default: {} + example: + "/app/data": {} + "/app/config": {} + WorkingDir: + description: "The working directory for commands to run in." + type: "string" + example: "/public/" + Entrypoint: + description: | + The entry point for the container as a string or an array of strings. + + If the array consists of exactly one empty string (`[""]`) then the + entry point is reset to system default (i.e., the entry point used by + docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). + type: "array" + items: + type: "string" + example: [] + NetworkDisabled: + description: | + Disable networking for the container. + +


+ + > **Deprecated**: this field is not part of the image specification and is + > always omitted. It must not be used, and will be removed in API v1.47. + type: "boolean" + default: false + example: false + x-nullable: true + MacAddress: + description: | + MAC address of the container. + +


+ + > **Deprecated**: this field is not part of the image specification and is + > always omitted. It must not be used, and will be removed in API v1.47. + type: "string" + default: "" + example: "" + x-nullable: true + OnBuild: + description: | + `ONBUILD` metadata that were defined in the image's `Dockerfile`. + type: "array" + x-nullable: true + items: + type: "string" + example: [] + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + example: + com.example.some-label: "some-value" + com.example.some-other-label: "some-other-value" + StopSignal: + description: | + Signal to stop a container as a string or unsigned integer. + type: "string" + example: "SIGTERM" + x-nullable: true + StopTimeout: + description: | + Timeout to stop a container in seconds. + +


+ + > **Deprecated**: this field is not part of the image specification and is + > always omitted. It must not be used, and will be removed in API v1.47. + type: "integer" + default: 10 + x-nullable: true + Shell: + description: | + Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. + type: "array" + x-nullable: true + items: + type: "string" + example: ["/bin/sh", "-c"] + # FIXME(thaJeztah): temporarily using a full example to remove some "omitempty" fields. Remove once the fields are removed. + example: + "Hostname": "" + "Domainname": "" + "User": "web:web" + "AttachStdin": false + "AttachStdout": false + "AttachStderr": false + "ExposedPorts": { + "80/tcp": {}, + "443/tcp": {} + } + "Tty": false + "OpenStdin": false + "StdinOnce": false + "Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"] + "Cmd": ["/bin/sh"] + "Healthcheck": { + "Test": ["string"], + "Interval": 0, + "Timeout": 0, + "Retries": 0, + "StartPeriod": 0, + "StartInterval": 0 + } + "ArgsEscaped": true + "Image": "" + "Volumes": { + "/app/data": {}, + "/app/config": {} + } + "WorkingDir": "/public/" + "Entrypoint": [] + "OnBuild": [] + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + "StopSignal": "SIGTERM" + "Shell": ["/bin/sh", "-c"] + NetworkingConfig: description: | NetworkingConfig represents the container's networking configuration for @@ -1758,21 +2049,6 @@ definitions: format: "dateTime" x-nullable: true example: "2022-02-04T21:20:12.497794809Z" - Container: - description: | - The ID of the container that was used to create the image. - - Depending on how the image was created, this field may be empty. - - **Deprecated**: this field is kept for backward compatibility, but - will be removed in API v1.45. - type: "string" - example: "65974bc86f1770ae4bff79f651ebdbce166ae9aada632ee3fa9af3a264911735" - ContainerConfig: - description: | - **Deprecated**: this field is kept for backward compatibility, but - will be removed in API v1.45. - $ref: "#/definitions/ContainerConfig" DockerVersion: description: | The version of Docker that was used to build the image. @@ -1780,7 +2056,7 @@ definitions: Depending on how the image was created, this field may be empty. type: "string" x-nullable: false - example: "20.10.7" + example: "27.0.1" Author: description: | Name of the author that was specified when committing the image, or as @@ -1789,7 +2065,7 @@ definitions: x-nullable: false example: "" Config: - $ref: "#/definitions/ContainerConfig" + $ref: "#/definitions/ImageConfig" Architecture: description: | Hardware CPU architecture that the image runs on. @@ -1866,6 +2142,7 @@ definitions: format: "dateTime" example: "2022-02-28T14:40:02.623929178Z" x-nullable: true + ImageSummary: type: "object" x-go-name: "Summary" @@ -3822,6 +4099,13 @@ definitions: but this is just provided for lookup/display purposes. The secret in the reference will be identified by its ID. type: "string" + OomScoreAdj: + type: "integer" + format: "int64" + description: | + An integer value containing the score given to the container in + order to tune OOM killer preferences. + example: 0 Configs: description: | Configs contains references to zero or more configs that will be @@ -4018,7 +4302,7 @@ definitions: `node.platform.os` | Node operating system | `node.platform.os==windows` `node.platform.arch` | Node architecture | `node.platform.arch==x86_64` `node.labels` | User-defined node labels | `node.labels.security==high` - `engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-14.04` + `engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-24.04` `engine.labels` apply to Docker Engine labels like operating system, drivers, etc. Swarm administrators add `node.labels` for operational @@ -4741,6 +5025,12 @@ definitions: properties: NetworkMode: type: "string" + Annotations: + description: "Arbitrary key-value metadata attached to container" + type: "object" + x-nullable: true + additionalProperties: + type: "string" NetworkSettings: description: "A summary of the container's network settings" type: "object" @@ -5009,7 +5299,7 @@ definitions: Version of the component type: "string" x-nullable: false - example: "19.03.12" + example: "27.0.1" Details: description: | Key/value pairs of strings with additional information about the @@ -5023,17 +5313,17 @@ definitions: Version: description: "The version of the daemon" type: "string" - example: "19.03.12" + example: "27.0.1" ApiVersion: description: | The default (and highest) API version that is supported by the daemon type: "string" - example: "1.40" + example: "1.46" MinAPIVersion: description: | The minimum API version that is supported by the daemon type: "string" - example: "1.12" + example: "1.24" GitCommit: description: | The Git commit of the source code that was used to build the daemon @@ -5044,7 +5334,7 @@ definitions: The version Go used to compile the daemon, and the version of the Go runtime in use. type: "string" - example: "go1.13.14" + example: "go1.21.11" Os: description: | The operating system that the daemon is running on ("linux" or "windows") @@ -5061,7 +5351,7 @@ definitions: This field is omitted when empty. type: "string" - example: "4.19.76-linuxkit" + example: "6.8.0-31-generic" Experimental: description: | Indicates if the daemon is started with experimental features enabled. @@ -5267,13 +5557,13 @@ definitions: information is queried from the HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ registry value, for example _"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)"_. type: "string" - example: "4.9.38-moby" + example: "6.8.0-31-generic" OperatingSystem: description: | - Name of the host's operating system, for example: "Ubuntu 16.04.2 LTS" + Name of the host's operating system, for example: "Ubuntu 24.04 LTS" or "Windows Server 2016 Datacenter" type: "string" - example: "Alpine Linux v3.5" + example: "Ubuntu 24.04 LTS" OSVersion: description: | Version of the host's operating system @@ -5284,7 +5574,7 @@ definitions: > very existence, and the formatting of values, should not be considered > stable, and may change without notice. type: "string" - example: "16.04" + example: "24.04" OSType: description: | Generic type of the operating system of the host, as returned by the @@ -5386,7 +5676,7 @@ definitions: description: | Version string of the daemon. type: "string" - example: "24.0.2" + example: "27.0.1" Runtimes: description: | List of [OCI compliant](https://github.com/opencontainers/runtime-spec) @@ -5538,6 +5828,58 @@ definitions: example: - "/etc/cdi" - "/var/run/cdi" + Containerd: + $ref: "#/definitions/ContainerdInfo" + x-nullable: true + + ContainerdInfo: + description: | + Information for connecting to the containerd instance that is used by the daemon. + This is included for debugging purposes only. + type: "object" + properties: + Address: + description: "The address of the containerd socket." + type: "string" + example: "/run/containerd/containerd.sock" + Namespaces: + description: | + The namespaces that the daemon uses for running containers and + plugins in containerd. These namespaces can be configured in the + daemon configuration, and are considered to be used exclusively + by the daemon, Tampering with the containerd instance may cause + unexpected behavior. + + As these namespaces are considered to be exclusively accessed + by the daemon, it is not recommended to change these values, + or to change them to a value that is used by other systems, + such as cri-containerd. + type: "object" + properties: + Containers: + description: | + The default containerd namespace used for containers managed + by the daemon. + + The default namespace for containers is "moby", but will be + suffixed with the `.` of the remapped `root` if + user-namespaces are enabled and the containerd image-store + is used. + type: "string" + default: "moby" + example: "moby" + Plugins: + description: | + The default containerd namespace used for plugins managed by + the daemon. + + The default namespace for plugins is "plugins.moby", but will be + suffixed with the `.` of the remapped `root` if + user-namespaces are enabled and the containerd image-store + is used. + type: "string" + default: "plugins.moby" + example: "plugins.moby" # PluginsInfo is a temp struct holding Plugins name # registered with docker daemon. It is used by Info struct @@ -6390,6 +6732,8 @@ paths: SizeRootFs: 0 HostConfig: NetworkMode: "default" + Annotations: + io.kubernetes.docker.type: "container" NetworkSettings: Networks: bridge: @@ -6425,6 +6769,9 @@ paths: SizeRootFs: 0 HostConfig: NetworkMode: "default" + Annotations: + io.kubernetes.docker.type: "container" + io.kubernetes.sandbox.id: "3befe639bed0fd6afdd65fd1fa84506756f59360ec4adc270b0fdac9be22b4d3" NetworkSettings: Networks: bridge: @@ -6453,6 +6800,9 @@ paths: SizeRootFs: 0 HostConfig: NetworkMode: "default" + Annotations: + io.kubernetes.image.id: "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82" + io.kubernetes.image.name: "ubuntu:latest" NetworkSettings: Networks: bridge: @@ -6481,6 +6831,8 @@ paths: SizeRootFs: 0 HostConfig: NetworkMode: "default" + Annotations: + io.kubernetes.config.source: "api" NetworkSettings: Networks: bridge: @@ -8758,6 +9110,11 @@ paths: details. type: "string" required: true + - name: "platform" + in: "query" + description: "Select a platform-specific manifest to be pushed. OCI platform (JSON encoded)" + type: "string" + x-nullable: true tags: ["Image"] /images/{name}/tag: post: @@ -9206,7 +9563,7 @@ paths: Containers report these events: `attach`, `commit`, `copy`, `create`, `destroy`, `detach`, `die`, `exec_create`, `exec_detach`, `exec_start`, `exec_die`, `export`, `health_status`, `kill`, `oom`, `pause`, `rename`, `resize`, `restart`, `start`, `stop`, `top`, `unpause`, `update`, and `prune` - Images report these events: `delete`, `import`, `load`, `pull`, `push`, `save`, `tag`, `untag`, and `prune` + Images report these events: `create, `delete`, `import`, `load`, `pull`, `push`, `save`, `tag`, `untag`, and `prune` Volumes report these events: `create`, `mount`, `unmount`, `destroy`, and `prune` @@ -10197,11 +10554,6 @@ paths: description: "The network's name." type: "string" example: "my_network" - CheckDuplicate: - description: | - Deprecated: CheckDuplicate is now always enabled. - type: "boolean" - example: true Driver: description: "Name of the network driver plugin to use." type: "string" @@ -11374,6 +11726,7 @@ paths: Mode: 384 SecretID: "fpjqlhnwb19zds35k8wn80lq9" SecretName: "example_org_domain_key" + OomScoreAdj: 0 LogDriver: Name: "json-file" Options: @@ -11526,6 +11879,7 @@ paths: Image: "busybox" Args: - "top" + OomScoreAdj: 0 Resources: Limits: {} Reservations: {} diff --git a/vendor/github.com/docker/docker/api/types/client.go b/vendor/github.com/docker/docker/api/types/client.go index 7ad40f2b029a..df791f02a0c3 100644 --- a/vendor/github.com/docker/docker/api/types/client.go +++ b/vendor/github.com/docker/docker/api/types/client.go @@ -9,32 +9,8 @@ import ( "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/registry" - units "github.com/docker/go-units" ) -// ContainerExecInspect holds information returned by exec inspect. -type ContainerExecInspect struct { - ExecID string `json:"ID"` - ContainerID string - Running bool - ExitCode int - Pid int -} - -// CopyToContainerOptions holds information -// about files to copy into a container -type CopyToContainerOptions struct { - AllowOverwriteDirWithFile bool - CopyUIDGID bool -} - -// EventsOptions holds parameters to filter events with. -type EventsOptions struct { - Since string - Until string - Filters filters.Args -} - // NewHijackedResponse intializes a HijackedResponse type func NewHijackedResponse(conn net.Conn, mediaType string) HijackedResponse { return HijackedResponse{Conn: conn, Reader: bufio.NewReader(conn), mediaType: mediaType} @@ -97,7 +73,7 @@ type ImageBuildOptions struct { NetworkMode string ShmSize int64 Dockerfile string - Ulimits []*units.Ulimit + Ulimits []*container.Ulimit // BuildArgs needs to be a *string instead of just a string so that // we can tell the difference between "" (empty string) and no value // at all (nil). See the parsing of buildArgs in @@ -118,7 +94,7 @@ type ImageBuildOptions struct { Target string SessionID string Platform string - // Version specifies the version of the unerlying builder to use + // Version specifies the version of the underlying builder to use Version BuilderVersion // BuildID is an optional identifier that can be passed together with the // build request. The same identifier can be used to gracefully cancel the @@ -153,19 +129,6 @@ type ImageBuildResponse struct { OSType string } -// ImageImportSource holds source information for ImageImport -type ImageImportSource struct { - Source io.Reader // Source is the data to send to the server to create this image from. You must set SourceName to "-" to leverage this. - SourceName string // SourceName is the name of the image to pull. Set to "-" to leverage the Source attribute. -} - -// ImageLoadResponse returns information to the client about a load process. -type ImageLoadResponse struct { - // Body must be closed to avoid a resource leak - Body io.ReadCloser - JSON bool -} - // RequestPrivilegeFunc is a function interface that // clients can supply to retry operations after // getting an authorization error. @@ -174,14 +137,6 @@ type ImageLoadResponse struct { // if the privilege request fails. type RequestPrivilegeFunc func(context.Context) (string, error) -// ImageSearchOptions holds parameters to search images with. -type ImageSearchOptions struct { - RegistryAuth string - PrivilegeFunc RequestPrivilegeFunc - Filters filters.Args - Limit int -} - // NodeListOptions holds parameters to list nodes with. type NodeListOptions struct { Filters filters.Args diff --git a/vendor/github.com/docker/docker/api/types/configs.go b/vendor/github.com/docker/docker/api/types/configs.go deleted file mode 100644 index 945b6efadd60..000000000000 --- a/vendor/github.com/docker/docker/api/types/configs.go +++ /dev/null @@ -1,18 +0,0 @@ -package types // import "github.com/docker/docker/api/types" - -// ExecConfig is a small subset of the Config struct that holds the configuration -// for the exec feature of docker. -type ExecConfig struct { - User string // User that will run the command - Privileged bool // Is the container in privileged mode - Tty bool // Attach standard streams to a tty. - ConsoleSize *[2]uint `json:",omitempty"` // Initial console size [height, width] - AttachStdin bool // Attach the standard input, makes possible user interaction - AttachStderr bool // Attach the standard error - AttachStdout bool // Attach the standard output - Detach bool // Execute in detach mode - DetachKeys string // Escape keys for detach - Env []string // Environment variables - WorkingDir string // Working directory - Cmd []string // Execution commands and args -} diff --git a/vendor/github.com/docker/docker/api/types/container/config.go b/vendor/github.com/docker/docker/api/types/container/config.go index 86f46b74afc4..d6b03e8b2e9e 100644 --- a/vendor/github.com/docker/docker/api/types/container/config.go +++ b/vendor/github.com/docker/docker/api/types/container/config.go @@ -1,7 +1,6 @@ package container // import "github.com/docker/docker/api/types/container" import ( - "io" "time" "github.com/docker/docker/api/types/strslice" @@ -36,14 +35,6 @@ type StopOptions struct { // HealthConfig holds configuration settings for the HEALTHCHECK feature. type HealthConfig = dockerspec.HealthcheckConfig -// ExecStartOptions holds the options to start container's exec. -type ExecStartOptions struct { - Stdin io.Reader - Stdout io.Writer - Stderr io.Writer - ConsoleSize *[2]uint `json:",omitempty"` -} - // Config contains the configuration data about a container. // It should hold only portable information about the container. // Here, "portable" means "independent from the host we are running on". diff --git a/vendor/github.com/docker/docker/api/types/container/container.go b/vendor/github.com/docker/docker/api/types/container/container.go new file mode 100644 index 000000000000..711af12c9920 --- /dev/null +++ b/vendor/github.com/docker/docker/api/types/container/container.go @@ -0,0 +1,44 @@ +package container + +import ( + "io" + "os" + "time" +) + +// PruneReport contains the response for Engine API: +// POST "/containers/prune" +type PruneReport struct { + ContainersDeleted []string + SpaceReclaimed uint64 +} + +// PathStat is used to encode the header from +// GET "/containers/{name:.*}/archive" +// "Name" is the file or directory name. +type PathStat struct { + Name string `json:"name"` + Size int64 `json:"size"` + Mode os.FileMode `json:"mode"` + Mtime time.Time `json:"mtime"` + LinkTarget string `json:"linkTarget"` +} + +// CopyToContainerOptions holds information +// about files to copy into a container +type CopyToContainerOptions struct { + AllowOverwriteDirWithFile bool + CopyUIDGID bool +} + +// StatsResponseReader wraps an io.ReadCloser to read (a stream of) stats +// for a container, as produced by the GET "/stats" endpoint. +// +// The OSType field is set to the server's platform to allow +// platform-specific handling of the response. +// +// TODO(thaJeztah): remove this wrapper, and make OSType part of [StatsResponse]. +type StatsResponseReader struct { + Body io.ReadCloser `json:"body"` + OSType string `json:"ostype"` +} diff --git a/vendor/github.com/docker/docker/api/types/container/create_request.go b/vendor/github.com/docker/docker/api/types/container/create_request.go new file mode 100644 index 000000000000..e98dd6ad449b --- /dev/null +++ b/vendor/github.com/docker/docker/api/types/container/create_request.go @@ -0,0 +1,13 @@ +package container + +import "github.com/docker/docker/api/types/network" + +// CreateRequest is the request message sent to the server for container +// create calls. It is a config wrapper that holds the container [Config] +// (portable) and the corresponding [HostConfig] (non-portable) and +// [network.NetworkingConfig]. +type CreateRequest struct { + *Config + HostConfig *HostConfig `json:"HostConfig,omitempty"` + NetworkingConfig *network.NetworkingConfig `json:"NetworkingConfig,omitempty"` +} diff --git a/vendor/github.com/docker/docker/api/types/container/exec.go b/vendor/github.com/docker/docker/api/types/container/exec.go new file mode 100644 index 000000000000..96093eb5cdb0 --- /dev/null +++ b/vendor/github.com/docker/docker/api/types/container/exec.go @@ -0,0 +1,43 @@ +package container + +// ExecOptions is a small subset of the Config struct that holds the configuration +// for the exec feature of docker. +type ExecOptions struct { + User string // User that will run the command + Privileged bool // Is the container in privileged mode + Tty bool // Attach standard streams to a tty. + ConsoleSize *[2]uint `json:",omitempty"` // Initial console size [height, width] + AttachStdin bool // Attach the standard input, makes possible user interaction + AttachStderr bool // Attach the standard error + AttachStdout bool // Attach the standard output + Detach bool // Execute in detach mode + DetachKeys string // Escape keys for detach + Env []string // Environment variables + WorkingDir string // Working directory + Cmd []string // Execution commands and args +} + +// ExecStartOptions is a temp struct used by execStart +// Config fields is part of ExecConfig in runconfig package +type ExecStartOptions struct { + // ExecStart will first check if it's detached + Detach bool + // Check if there's a tty + Tty bool + // Terminal size [height, width], unused if Tty == false + ConsoleSize *[2]uint `json:",omitempty"` +} + +// ExecAttachOptions is a temp struct used by execAttach. +// +// TODO(thaJeztah): make this a separate type; ContainerExecAttach does not use the Detach option, and cannot run detached. +type ExecAttachOptions = ExecStartOptions + +// ExecInspect holds information returned by exec inspect. +type ExecInspect struct { + ExecID string `json:"ID"` + ContainerID string + Running bool + ExitCode int + Pid int +} diff --git a/vendor/github.com/docker/docker/api/types/container/hostconfig.go b/vendor/github.com/docker/docker/api/types/container/hostconfig.go index efb96266e8c8..727da8839cc2 100644 --- a/vendor/github.com/docker/docker/api/types/container/hostconfig.go +++ b/vendor/github.com/docker/docker/api/types/container/hostconfig.go @@ -360,6 +360,12 @@ type LogConfig struct { Config map[string]string } +// Ulimit is an alias for [units.Ulimit], which may be moving to a different +// location or become a local type. This alias is to help transitioning. +// +// Users are recommended to use this alias instead of using [units.Ulimit] directly. +type Ulimit = units.Ulimit + // Resources contains container's resources (cgroups config, ulimits...) type Resources struct { // Applicable to all platforms @@ -387,14 +393,14 @@ type Resources struct { // KernelMemory specifies the kernel memory limit (in bytes) for the container. // Deprecated: kernel 5.4 deprecated kmem.limit_in_bytes. - KernelMemory int64 `json:",omitempty"` - KernelMemoryTCP int64 `json:",omitempty"` // Hard limit for kernel TCP buffer memory (in bytes) - MemoryReservation int64 // Memory soft limit (in bytes) - MemorySwap int64 // Total memory usage (memory + swap); set `-1` to enable unlimited swap - MemorySwappiness *int64 // Tuning container memory swappiness behaviour - OomKillDisable *bool // Whether to disable OOM Killer or not - PidsLimit *int64 // Setting PIDs limit for a container; Set `0` or `-1` for unlimited, or `null` to not change. - Ulimits []*units.Ulimit // List of ulimits to be set in the container + KernelMemory int64 `json:",omitempty"` + KernelMemoryTCP int64 `json:",omitempty"` // Hard limit for kernel TCP buffer memory (in bytes) + MemoryReservation int64 // Memory soft limit (in bytes) + MemorySwap int64 // Total memory usage (memory + swap); set `-1` to enable unlimited swap + MemorySwappiness *int64 // Tuning container memory swappiness behaviour + OomKillDisable *bool // Whether to disable OOM Killer or not + PidsLimit *int64 // Setting PIDs limit for a container; Set `0` or `-1` for unlimited, or `null` to not change. + Ulimits []*Ulimit // List of ulimits to be set in the container // Applicable to Windows CPUCount int64 `json:"CpuCount"` // CPU count diff --git a/vendor/github.com/docker/docker/api/types/container/hostconfig_unix.go b/vendor/github.com/docker/docker/api/types/container/hostconfig_unix.go index 421329237838..cdee49ea3de1 100644 --- a/vendor/github.com/docker/docker/api/types/container/hostconfig_unix.go +++ b/vendor/github.com/docker/docker/api/types/container/hostconfig_unix.go @@ -9,24 +9,6 @@ func (i Isolation) IsValid() bool { return i.IsDefault() } -// NetworkName returns the name of the network stack. -func (n NetworkMode) NetworkName() string { - if n.IsBridge() { - return network.NetworkBridge - } else if n.IsHost() { - return network.NetworkHost - } else if n.IsContainer() { - return "container" - } else if n.IsNone() { - return network.NetworkNone - } else if n.IsDefault() { - return network.NetworkDefault - } else if n.IsUserDefined() { - return n.UserDefined() - } - return "" -} - // IsBridge indicates whether container uses the bridge network stack func (n NetworkMode) IsBridge() bool { return n == network.NetworkBridge @@ -41,3 +23,23 @@ func (n NetworkMode) IsHost() bool { func (n NetworkMode) IsUserDefined() bool { return !n.IsDefault() && !n.IsBridge() && !n.IsHost() && !n.IsNone() && !n.IsContainer() } + +// NetworkName returns the name of the network stack. +func (n NetworkMode) NetworkName() string { + switch { + case n.IsDefault(): + return network.NetworkDefault + case n.IsBridge(): + return network.NetworkBridge + case n.IsHost(): + return network.NetworkHost + case n.IsNone(): + return network.NetworkNone + case n.IsContainer(): + return "container" + case n.IsUserDefined(): + return n.UserDefined() + default: + return "" + } +} diff --git a/vendor/github.com/docker/docker/api/types/container/hostconfig_windows.go b/vendor/github.com/docker/docker/api/types/container/hostconfig_windows.go index 154667f4f0f7..f08545542cb6 100644 --- a/vendor/github.com/docker/docker/api/types/container/hostconfig_windows.go +++ b/vendor/github.com/docker/docker/api/types/container/hostconfig_windows.go @@ -2,6 +2,11 @@ package container // import "github.com/docker/docker/api/types/container" import "github.com/docker/docker/api/types/network" +// IsValid indicates if an isolation technology is valid +func (i Isolation) IsValid() bool { + return i.IsDefault() || i.IsHyperV() || i.IsProcess() +} + // IsBridge indicates whether container uses the bridge network stack // in windows it is given the name NAT func (n NetworkMode) IsBridge() bool { @@ -19,24 +24,24 @@ func (n NetworkMode) IsUserDefined() bool { return !n.IsDefault() && !n.IsNone() && !n.IsBridge() && !n.IsContainer() } -// IsValid indicates if an isolation technology is valid -func (i Isolation) IsValid() bool { - return i.IsDefault() || i.IsHyperV() || i.IsProcess() -} - // NetworkName returns the name of the network stack. func (n NetworkMode) NetworkName() string { - if n.IsDefault() { + switch { + case n.IsDefault(): return network.NetworkDefault - } else if n.IsBridge() { + case n.IsBridge(): return network.NetworkNat - } else if n.IsNone() { + case n.IsHost(): + // Windows currently doesn't support host network-mode, so + // this would currently never happen.. + return network.NetworkHost + case n.IsNone(): return network.NetworkNone - } else if n.IsContainer() { + case n.IsContainer(): return "container" - } else if n.IsUserDefined() { + case n.IsUserDefined(): return n.UserDefined() + default: + return "" } - - return "" } diff --git a/vendor/github.com/docker/docker/api/types/stats.go b/vendor/github.com/docker/docker/api/types/container/stats.go similarity index 96% rename from vendor/github.com/docker/docker/api/types/stats.go rename to vendor/github.com/docker/docker/api/types/container/stats.go index 20daebed14bd..3b3fb131a2bc 100644 --- a/vendor/github.com/docker/docker/api/types/stats.go +++ b/vendor/github.com/docker/docker/api/types/container/stats.go @@ -1,6 +1,4 @@ -// Package types is used for API stability in the types and response to the -// consumers of the API stats endpoint. -package types // import "github.com/docker/docker/api/types" +package container import "time" @@ -169,8 +167,10 @@ type Stats struct { MemoryStats MemoryStats `json:"memory_stats,omitempty"` } -// StatsJSON is newly used Networks -type StatsJSON struct { +// StatsResponse is newly used Networks. +// +// TODO(thaJeztah): unify with [Stats]. This wrapper was to account for pre-api v1.21 changes, see https://github.com/moby/moby/commit/d3379946ec96fb6163cb8c4517d7d5a067045801 +type StatsResponse struct { Stats Name string `json:"name,omitempty"` diff --git a/vendor/github.com/docker/docker/api/types/events/events.go b/vendor/github.com/docker/docker/api/types/events/events.go index 6dbcd92235c5..e225df4ec186 100644 --- a/vendor/github.com/docker/docker/api/types/events/events.go +++ b/vendor/github.com/docker/docker/api/types/events/events.go @@ -1,4 +1,5 @@ package events // import "github.com/docker/docker/api/types/events" +import "github.com/docker/docker/api/types/filters" // Type is used for event-types. type Type string @@ -125,3 +126,10 @@ type Message struct { Time int64 `json:"time,omitempty"` TimeNano int64 `json:"timeNano,omitempty"` } + +// ListOptions holds parameters to filter events with. +type ListOptions struct { + Since string + Until string + Filters filters.Args +} diff --git a/vendor/github.com/docker/docker/api/types/image/image.go b/vendor/github.com/docker/docker/api/types/image/image.go index 167df28c7b99..abb7ffd8052e 100644 --- a/vendor/github.com/docker/docker/api/types/image/image.go +++ b/vendor/github.com/docker/docker/api/types/image/image.go @@ -1,9 +1,47 @@ package image -import "time" +import ( + "io" + "time" +) // Metadata contains engine-local data about the image. type Metadata struct { // LastTagTime is the date and time at which the image was last tagged. LastTagTime time.Time `json:",omitempty"` } + +// PruneReport contains the response for Engine API: +// POST "/images/prune" +type PruneReport struct { + ImagesDeleted []DeleteResponse + SpaceReclaimed uint64 +} + +// LoadResponse returns information to the client about a load process. +// +// TODO(thaJeztah): remove this type, and just use an io.ReadCloser +// +// This type was added in https://github.com/moby/moby/pull/18878, related +// to https://github.com/moby/moby/issues/19177; +// +// Make docker load to output json when the response content type is json +// Swarm hijacks the response from docker load and returns JSON rather +// than plain text like the Engine does. This makes the API library to return +// information to figure that out. +// +// However the "load" endpoint unconditionally returns JSON; +// https://github.com/moby/moby/blob/7b9d2ef6e5518a3d3f3cc418459f8df786cfbbd1/api/server/router/image/image_routes.go#L248-L255 +// +// PR https://github.com/moby/moby/pull/21959 made the response-type depend +// on whether "quiet" was set, but this logic got changed in a follow-up +// https://github.com/moby/moby/pull/25557, which made the JSON response-type +// unconditionally, but the output produced depend on whether"quiet" was set. +// +// We should deprecated the "quiet" option, as it's really a client +// responsibility. +type LoadResponse struct { + // Body must be closed to avoid a resource leak + Body io.ReadCloser + JSON bool +} diff --git a/vendor/github.com/docker/docker/api/types/image/opts.go b/vendor/github.com/docker/docker/api/types/image/opts.go index 616452c468b6..8e32c9af8689 100644 --- a/vendor/github.com/docker/docker/api/types/image/opts.go +++ b/vendor/github.com/docker/docker/api/types/image/opts.go @@ -2,10 +2,18 @@ package image import ( "context" + "io" "github.com/docker/docker/api/types/filters" + ocispec "github.com/opencontainers/image-spec/specs-go/v1" ) +// ImportSource holds source information for ImageImport +type ImportSource struct { + Source io.Reader // Source is the data to send to the server to create this image from. You must set SourceName to "-" to leverage this. + SourceName string // SourceName is the name of the image to pull. Set to "-" to leverage the Source attribute. +} + // ImportOptions holds information to import images from the client host. type ImportOptions struct { Tag string // Tag is the name to tag this image with. This attribute is deprecated. @@ -36,7 +44,23 @@ type PullOptions struct { } // PushOptions holds information to push images. -type PushOptions PullOptions +type PushOptions struct { + All bool + RegistryAuth string // RegistryAuth is the base64 encoded credentials for the registry + + // PrivilegeFunc is a function that clients can supply to retry operations + // after getting an authorization error. This function returns the registry + // authentication header value in base64 encoded format, or an error if the + // privilege request fails. + // + // Also see [github.com/docker/docker/api/types.RequestPrivilegeFunc]. + PrivilegeFunc func(context.Context) (string, error) + + // Platform is an optional field that selects a specific platform to push + // when the image is a multi-platform image. + // Using this will only push a single platform-specific manifest. + Platform *ocispec.Platform `json:",omitempty"` +} // ListOptions holds parameters to list images with. type ListOptions struct { diff --git a/vendor/github.com/docker/docker/api/types/mount/mount.go b/vendor/github.com/docker/docker/api/types/mount/mount.go index 6fe04da25794..c68dcf65bd12 100644 --- a/vendor/github.com/docker/docker/api/types/mount/mount.go +++ b/vendor/github.com/docker/docker/api/types/mount/mount.go @@ -119,7 +119,11 @@ type TmpfsOptions struct { SizeBytes int64 `json:",omitempty"` // Mode of the tmpfs upon creation Mode os.FileMode `json:",omitempty"` - + // Options to be passed to the tmpfs mount. An array of arrays. Flag + // options should be provided as 1-length arrays. Other types should be + // provided as 2-length arrays, where the first item is the key and the + // second the value. + Options [][]string `json:",omitempty"` // TODO(stevvooe): There are several more tmpfs flags, specified in the // daemon, that are accepted. Only the most basic are added for now. // diff --git a/vendor/github.com/docker/docker/api/types/network/network.go b/vendor/github.com/docker/docker/api/types/network/network.go index c86fc903af51..c8db97a7e674 100644 --- a/vendor/github.com/docker/docker/api/types/network/network.go +++ b/vendor/github.com/docker/docker/api/types/network/network.go @@ -19,6 +19,31 @@ const ( NetworkNat = "nat" ) +// CreateRequest is the request message sent to the server for network create call. +type CreateRequest struct { + CreateOptions + Name string // Name is the requested name of the network. + + // Deprecated: CheckDuplicate is deprecated since API v1.44, but it defaults to true when sent by the client + // package to older daemons. + CheckDuplicate *bool `json:",omitempty"` +} + +// CreateOptions holds options to create a network. +type CreateOptions struct { + Driver string // Driver is the driver-name used to create the network (e.g. `bridge`, `overlay`) + Scope string // Scope describes the level at which the network exists (e.g. `swarm` for cluster-wide or `local` for machine level). + EnableIPv6 *bool `json:",omitempty"` // EnableIPv6 represents whether to enable IPv6. + IPAM *IPAM // IPAM is the network's IP Address Management. + Internal bool // Internal represents if the network is used internal only. + Attachable bool // Attachable represents if the global scope is manually attachable by regular containers from workers in swarm mode. + Ingress bool // Ingress indicates the network is providing the routing-mesh for the swarm cluster. + ConfigOnly bool // ConfigOnly creates a config-only network. Config-only networks are place-holder networks for network configurations to be used by other networks. ConfigOnly networks cannot be used directly to run containers or services. + ConfigFrom *ConfigReference // ConfigFrom specifies the source which will provide the configuration for this network. The specified network must be a config-only network; see [CreateOptions.ConfigOnly]. + Options map[string]string // Options specifies the network-specific options to use for when creating the network. + Labels map[string]string // Labels holds metadata specific to the network being created. +} + // ListOptions holds parameters to filter the list of networks with. type ListOptions struct { Filters filters.Args @@ -133,3 +158,9 @@ var acceptedFilters = map[string]bool{ func ValidateFilters(filter filters.Args) error { return filter.Validate(acceptedFilters) } + +// PruneReport contains the response for Engine API: +// POST "/networks/prune" +type PruneReport struct { + NetworksDeleted []string +} diff --git a/vendor/github.com/docker/docker/api/types/registry/registry.go b/vendor/github.com/docker/docker/api/types/registry/registry.go index 6bbae93ef20e..75ee07b15f97 100644 --- a/vendor/github.com/docker/docker/api/types/registry/registry.go +++ b/vendor/github.com/docker/docker/api/types/registry/registry.go @@ -84,32 +84,6 @@ type IndexInfo struct { Official bool } -// SearchResult describes a search result returned from a registry -type SearchResult struct { - // StarCount indicates the number of stars this repository has - StarCount int `json:"star_count"` - // IsOfficial is true if the result is from an official repository. - IsOfficial bool `json:"is_official"` - // Name is the name of the repository - Name string `json:"name"` - // IsAutomated indicates whether the result is automated. - // - // Deprecated: the "is_automated" field is deprecated and will always be "false". - IsAutomated bool `json:"is_automated"` - // Description is a textual description of the repository - Description string `json:"description"` -} - -// SearchResults lists a collection search results returned from a registry -type SearchResults struct { - // Query contains the query string that generated the search results - Query string `json:"query"` - // NumResults indicates the number of results the query returned - NumResults int `json:"num_results"` - // Results is a slice containing the actual results for the search - Results []SearchResult `json:"results"` -} - // DistributionInspect describes the result obtained from contacting the // registry to retrieve image metadata type DistributionInspect struct { diff --git a/vendor/github.com/docker/docker/api/types/registry/search.go b/vendor/github.com/docker/docker/api/types/registry/search.go new file mode 100644 index 000000000000..a0a1eec5441b --- /dev/null +++ b/vendor/github.com/docker/docker/api/types/registry/search.go @@ -0,0 +1,47 @@ +package registry + +import ( + "context" + + "github.com/docker/docker/api/types/filters" +) + +// SearchOptions holds parameters to search images with. +type SearchOptions struct { + RegistryAuth string + + // PrivilegeFunc is a [types.RequestPrivilegeFunc] the client can + // supply to retry operations after getting an authorization error. + // + // It must return the registry authentication header value in base64 + // format, or an error if the privilege request fails. + PrivilegeFunc func(context.Context) (string, error) + Filters filters.Args + Limit int +} + +// SearchResult describes a search result returned from a registry +type SearchResult struct { + // StarCount indicates the number of stars this repository has + StarCount int `json:"star_count"` + // IsOfficial is true if the result is from an official repository. + IsOfficial bool `json:"is_official"` + // Name is the name of the repository + Name string `json:"name"` + // IsAutomated indicates whether the result is automated. + // + // Deprecated: the "is_automated" field is deprecated and will always be "false". + IsAutomated bool `json:"is_automated"` + // Description is a textual description of the repository + Description string `json:"description"` +} + +// SearchResults lists a collection search results returned from a registry +type SearchResults struct { + // Query contains the query string that generated the search results + Query string `json:"query"` + // NumResults indicates the number of results the query returned + NumResults int `json:"num_results"` + // Results is a slice containing the actual results for the search + Results []SearchResult `json:"results"` +} diff --git a/vendor/github.com/docker/docker/api/types/swarm/container.go b/vendor/github.com/docker/docker/api/types/swarm/container.go index 65f61d2d209c..30e3de70c01c 100644 --- a/vendor/github.com/docker/docker/api/types/swarm/container.go +++ b/vendor/github.com/docker/docker/api/types/swarm/container.go @@ -5,7 +5,6 @@ import ( "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/mount" - "github.com/docker/go-units" ) // DNSConfig specifies DNS related configurations in resolver configuration file (resolv.conf) @@ -115,5 +114,6 @@ type ContainerSpec struct { Sysctls map[string]string `json:",omitempty"` CapabilityAdd []string `json:",omitempty"` CapabilityDrop []string `json:",omitempty"` - Ulimits []*units.Ulimit `json:",omitempty"` + Ulimits []*container.Ulimit `json:",omitempty"` + OomScoreAdj int64 `json:",omitempty"` } diff --git a/vendor/github.com/docker/docker/api/types/system/info.go b/vendor/github.com/docker/docker/api/types/system/info.go index 89d4a0098e36..6791cf3284c4 100644 --- a/vendor/github.com/docker/docker/api/types/system/info.go +++ b/vendor/github.com/docker/docker/api/types/system/info.go @@ -75,6 +75,8 @@ type Info struct { DefaultAddressPools []NetworkAddressPool `json:",omitempty"` CDISpecDirs []string + Containerd *ContainerdInfo `json:",omitempty"` + // Legacy API fields for older API versions. legacyFields @@ -85,6 +87,43 @@ type Info struct { Warnings []string } +// ContainerdInfo holds information about the containerd instance used by the daemon. +type ContainerdInfo struct { + // Address is the path to the containerd socket. + Address string `json:",omitempty"` + // Namespaces is the containerd namespaces used by the daemon. + Namespaces ContainerdNamespaces +} + +// ContainerdNamespaces reflects the containerd namespaces used by the daemon. +// +// These namespaces can be configured in the daemon configuration, and are +// considered to be used exclusively by the daemon, +// +// As these namespaces are considered to be exclusively accessed +// by the daemon, it is not recommended to change these values, +// or to change them to a value that is used by other systems, +// such as cri-containerd. +type ContainerdNamespaces struct { + // Containers holds the default containerd namespace used for + // containers managed by the daemon. + // + // The default namespace for containers is "moby", but will be + // suffixed with the `.` of the remapped `root` if + // user-namespaces are enabled and the containerd image-store + // is used. + Containers string + + // Plugins holds the default containerd namespace used for + // plugins managed by the daemon. + // + // The default namespace for plugins is "moby", but will be + // suffixed with the `.` of the remapped `root` if + // user-namespaces are enabled and the containerd image-store + // is used. + Plugins string +} + type legacyFields struct { ExecutionDriver string `json:",omitempty"` // Deprecated: deprecated since API v1.25, but returned for older versions. } diff --git a/vendor/github.com/docker/docker/api/types/types.go b/vendor/github.com/docker/docker/api/types/types.go index 5d6b40b669cc..f0c648e15887 100644 --- a/vendor/github.com/docker/docker/api/types/types.go +++ b/vendor/github.com/docker/docker/api/types/types.go @@ -1,8 +1,6 @@ package types // import "github.com/docker/docker/api/types" import ( - "io" - "os" "time" "github.com/docker/docker/api/types/container" @@ -155,36 +153,13 @@ type Container struct { State string Status string HostConfig struct { - NetworkMode string `json:",omitempty"` + NetworkMode string `json:",omitempty"` + Annotations map[string]string `json:",omitempty"` } NetworkSettings *SummaryNetworkSettings Mounts []MountPoint } -// CopyConfig contains request body of Engine API: -// POST "/containers/"+containerID+"/copy" -type CopyConfig struct { - Resource string -} - -// ContainerPathStat is used to encode the header from -// GET "/containers/{name:.*}/archive" -// "Name" is the file or directory name. -type ContainerPathStat struct { - Name string `json:"name"` - Size int64 `json:"size"` - Mode os.FileMode `json:"mode"` - Mtime time.Time `json:"mtime"` - LinkTarget string `json:"linkTarget"` -} - -// ContainerStats contains response of Engine API: -// GET "/stats" -type ContainerStats struct { - Body io.ReadCloser `json:"body"` - OSType string `json:"ostype"` -} - // Ping contains response of Engine API: // GET "/_ping" type Ping struct { @@ -230,17 +205,6 @@ type Version struct { BuildTime string `json:",omitempty"` } -// ExecStartCheck is a temp struct used by execStart -// Config fields is part of ExecConfig in runconfig package -type ExecStartCheck struct { - // ExecStart will first check if it's detached - Detach bool - // Check if there's a tty - Tty bool - // Terminal size [height, width], unused if Tty == false - ConsoleSize *[2]uint `json:",omitempty"` -} - // HealthcheckResult stores information about a single run of a healthcheck probe type HealthcheckResult struct { Start time.Time // Start is the time this check started @@ -423,30 +387,6 @@ type MountPoint struct { Propagation mount.Propagation } -// NetworkCreate is the expected body of the "create network" http request message -type NetworkCreate struct { - // Deprecated: CheckDuplicate is deprecated since API v1.44, but it defaults to true when sent by the client - // package to older daemons. - CheckDuplicate bool `json:",omitempty"` - Driver string // Driver is the driver-name used to create the network (e.g. `bridge`, `overlay`) - Scope string // Scope describes the level at which the network exists (e.g. `swarm` for cluster-wide or `local` for machine level). - EnableIPv6 *bool `json:",omitempty"` // EnableIPv6 represents whether to enable IPv6. - IPAM *network.IPAM // IPAM is the network's IP Address Management. - Internal bool // Internal represents if the network is used internal only. - Attachable bool // Attachable represents if the global scope is manually attachable by regular containers from workers in swarm mode. - Ingress bool // Ingress indicates the network is providing the routing-mesh for the swarm cluster. - ConfigOnly bool // ConfigOnly creates a config-only network. Config-only networks are place-holder networks for network configurations to be used by other networks. ConfigOnly networks cannot be used directly to run containers or services. - ConfigFrom *network.ConfigReference // ConfigFrom specifies the source which will provide the configuration for this network. The specified network must be a config-only network; see [NetworkCreate.ConfigOnly]. - Options map[string]string // Options specifies the network-specific options to use for when creating the network. - Labels map[string]string // Labels holds metadata specific to the network being created. -} - -// NetworkCreateRequest is the request message sent to the server for network create call. -type NetworkCreateRequest struct { - NetworkCreate - Name string // Name is the requested name of the network. -} - // DiskUsageObject represents an object type used for disk usage query filtering. type DiskUsageObject string @@ -479,27 +419,6 @@ type DiskUsage struct { BuilderSize int64 `json:",omitempty"` // Deprecated: deprecated in API 1.38, and no longer used since API 1.40. } -// ContainersPruneReport contains the response for Engine API: -// POST "/containers/prune" -type ContainersPruneReport struct { - ContainersDeleted []string - SpaceReclaimed uint64 -} - -// VolumesPruneReport contains the response for Engine API: -// POST "/volumes/prune" -type VolumesPruneReport struct { - VolumesDeleted []string - SpaceReclaimed uint64 -} - -// ImagesPruneReport contains the response for Engine API: -// POST "/images/prune" -type ImagesPruneReport struct { - ImagesDeleted []image.DeleteResponse - SpaceReclaimed uint64 -} - // BuildCachePruneReport contains the response for Engine API: // POST "/build/prune" type BuildCachePruneReport struct { @@ -507,12 +426,6 @@ type BuildCachePruneReport struct { SpaceReclaimed uint64 } -// NetworksPruneReport contains the response for Engine API: -// POST "/networks/prune" -type NetworksPruneReport struct { - NetworksDeleted []string -} - // SecretCreateResponse contains the information returned to a client // on the creation of a new secret. type SecretCreateResponse struct { diff --git a/vendor/github.com/docker/docker/api/types/types_deprecated.go b/vendor/github.com/docker/docker/api/types/types_deprecated.go index 3648ddcf60d8..8edf70b7c885 100644 --- a/vendor/github.com/docker/docker/api/types/types_deprecated.go +++ b/vendor/github.com/docker/docker/api/types/types_deprecated.go @@ -1,9 +1,36 @@ package types import ( + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/events" + "github.com/docker/docker/api/types/image" "github.com/docker/docker/api/types/network" + "github.com/docker/docker/api/types/registry" + "github.com/docker/docker/api/types/volume" ) +// ImagesPruneReport contains the response for Engine API: +// POST "/images/prune" +// +// Deprecated: use [image.PruneReport]. +type ImagesPruneReport = image.PruneReport + +// VolumesPruneReport contains the response for Engine API: +// POST "/volumes/prune". +// +// Deprecated: use [volume.PruneReport]. +type VolumesPruneReport = volume.PruneReport + +// NetworkCreateRequest is the request message sent to the server for network create call. +// +// Deprecated: use [network.CreateRequest]. +type NetworkCreateRequest = network.CreateRequest + +// NetworkCreate is the expected body of the "create network" http request message +// +// Deprecated: use [network.CreateOptions]. +type NetworkCreate = network.CreateOptions + // NetworkListOptions holds parameters to filter the list of networks with. // // Deprecated: use [network.ListOptions]. @@ -38,3 +65,132 @@ type EndpointResource = network.EndpointResource // // Deprecated: use [network.Inspect] or [network.Summary] (for list operations). type NetworkResource = network.Inspect + +// NetworksPruneReport contains the response for Engine API: +// POST "/networks/prune" +// +// Deprecated: use [network.PruneReport]. +type NetworksPruneReport = network.PruneReport + +// ExecConfig is a small subset of the Config struct that holds the configuration +// for the exec feature of docker. +// +// Deprecated: use [container.ExecOptions]. +type ExecConfig = container.ExecOptions + +// ExecStartCheck is a temp struct used by execStart +// Config fields is part of ExecConfig in runconfig package +// +// Deprecated: use [container.ExecStartOptions] or [container.ExecAttachOptions]. +type ExecStartCheck = container.ExecStartOptions + +// ContainerExecInspect holds information returned by exec inspect. +// +// Deprecated: use [container.ExecInspect]. +type ContainerExecInspect = container.ExecInspect + +// ContainersPruneReport contains the response for Engine API: +// POST "/containers/prune" +// +// Deprecated: use [container.PruneReport]. +type ContainersPruneReport = container.PruneReport + +// ContainerPathStat is used to encode the header from +// GET "/containers/{name:.*}/archive" +// "Name" is the file or directory name. +// +// Deprecated: use [container.PathStat]. +type ContainerPathStat = container.PathStat + +// CopyToContainerOptions holds information +// about files to copy into a container. +// +// Deprecated: use [container.CopyToContainerOptions], +type CopyToContainerOptions = container.CopyToContainerOptions + +// ContainerStats contains response of Engine API: +// GET "/stats" +// +// Deprecated: use [container.StatsResponseReader]. +type ContainerStats = container.StatsResponseReader + +// ThrottlingData stores CPU throttling stats of one running container. +// Not used on Windows. +// +// Deprecated: use [container.ThrottlingData]. +type ThrottlingData = container.ThrottlingData + +// CPUUsage stores All CPU stats aggregated since container inception. +// +// Deprecated: use [container.CPUUsage]. +type CPUUsage = container.CPUUsage + +// CPUStats aggregates and wraps all CPU related info of container +// +// Deprecated: use [container.CPUStats]. +type CPUStats = container.CPUStats + +// MemoryStats aggregates all memory stats since container inception on Linux. +// Windows returns stats for commit and private working set only. +// +// Deprecated: use [container.MemoryStats]. +type MemoryStats = container.MemoryStats + +// BlkioStatEntry is one small entity to store a piece of Blkio stats +// Not used on Windows. +// +// Deprecated: use [container.BlkioStatEntry]. +type BlkioStatEntry = container.BlkioStatEntry + +// BlkioStats stores All IO service stats for data read and write. +// This is a Linux specific structure as the differences between expressing +// block I/O on Windows and Linux are sufficiently significant to make +// little sense attempting to morph into a combined structure. +// +// Deprecated: use [container.BlkioStats]. +type BlkioStats = container.BlkioStats + +// StorageStats is the disk I/O stats for read/write on Windows. +// +// Deprecated: use [container.StorageStats]. +type StorageStats = container.StorageStats + +// NetworkStats aggregates the network stats of one container +// +// Deprecated: use [container.NetworkStats]. +type NetworkStats = container.NetworkStats + +// PidsStats contains the stats of a container's pids +// +// Deprecated: use [container.PidsStats]. +type PidsStats = container.PidsStats + +// Stats is Ultimate struct aggregating all types of stats of one container +// +// Deprecated: use [container.Stats]. +type Stats = container.Stats + +// StatsJSON is newly used Networks +// +// Deprecated: use [container.StatsResponse]. +type StatsJSON = container.StatsResponse + +// EventsOptions holds parameters to filter events with. +// +// Deprecated: use [events.ListOptions]. +type EventsOptions = events.ListOptions + +// ImageSearchOptions holds parameters to search images with. +// +// Deprecated: use [registry.SearchOptions]. +type ImageSearchOptions = registry.SearchOptions + +// ImageImportSource holds source information for ImageImport +// +// Deprecated: use [image.ImportSource]. +type ImageImportSource image.ImportSource + +// ImageLoadResponse returns information to the client about a load process. +// +// Deprecated: use [image.LoadResponse]. +type ImageLoadResponse = image.LoadResponse diff --git a/vendor/github.com/docker/docker/api/types/volume/options.go b/vendor/github.com/docker/docker/api/types/volume/options.go index 8b0dd1389986..0b9645e006d3 100644 --- a/vendor/github.com/docker/docker/api/types/volume/options.go +++ b/vendor/github.com/docker/docker/api/types/volume/options.go @@ -6,3 +6,10 @@ import "github.com/docker/docker/api/types/filters" type ListOptions struct { Filters filters.Args } + +// PruneReport contains the response for Engine API: +// POST "/volumes/prune" +type PruneReport struct { + VolumesDeleted []string + SpaceReclaimed uint64 +} diff --git a/vendor/github.com/docker/docker/client/client.go b/vendor/github.com/docker/docker/client/client.go index f2eeb6c5702e..60d91bc65b5a 100644 --- a/vendor/github.com/docker/docker/client/client.go +++ b/vendor/github.com/docker/docker/client/client.go @@ -49,6 +49,8 @@ import ( "net/url" "path" "strings" + "sync" + "sync/atomic" "time" "github.com/docker/docker/api" @@ -131,7 +133,10 @@ type Client struct { negotiateVersion bool // negotiated indicates that API version negotiation took place - negotiated bool + negotiated atomic.Bool + + // negotiateLock is used to single-flight the version negotiation process + negotiateLock sync.Mutex tp trace.TracerProvider @@ -266,7 +271,16 @@ func (cli *Client) Close() error { // be negotiated when making the actual requests, and for which cases // we cannot do the negotiation lazily. func (cli *Client) checkVersion(ctx context.Context) error { - if !cli.manualOverride && cli.negotiateVersion && !cli.negotiated { + if !cli.manualOverride && cli.negotiateVersion && !cli.negotiated.Load() { + // Ensure exclusive write access to version and negotiated fields + cli.negotiateLock.Lock() + defer cli.negotiateLock.Unlock() + + // May have been set during last execution of critical zone + if cli.negotiated.Load() { + return nil + } + ping, err := cli.Ping(ctx) if err != nil { return err @@ -312,6 +326,10 @@ func (cli *Client) ClientVersion() string { // added (1.24). func (cli *Client) NegotiateAPIVersion(ctx context.Context) { if !cli.manualOverride { + // Avoid concurrent modification of version-related fields + cli.negotiateLock.Lock() + defer cli.negotiateLock.Unlock() + ping, err := cli.Ping(ctx) if err != nil { // FIXME(thaJeztah): Ping returns an error when failing to connect to the API; we should not swallow the error here, and instead returning it. @@ -336,6 +354,10 @@ func (cli *Client) NegotiateAPIVersion(ctx context.Context) { // added (1.24). func (cli *Client) NegotiateAPIVersionPing(pingResponse types.Ping) { if !cli.manualOverride { + // Avoid concurrent modification of version-related fields + cli.negotiateLock.Lock() + defer cli.negotiateLock.Unlock() + cli.negotiateAPIVersionPing(pingResponse) } } @@ -361,7 +383,7 @@ func (cli *Client) negotiateAPIVersionPing(pingResponse types.Ping) { // Store the results, so that automatic API version negotiation (if enabled) // won't be performed on the next request. if cli.negotiateVersion { - cli.negotiated = true + cli.negotiated.Store(true) } } diff --git a/vendor/github.com/docker/docker/client/container_copy.go b/vendor/github.com/docker/docker/client/container_copy.go index 883be7fa3451..8490a3b1565b 100644 --- a/vendor/github.com/docker/docker/client/container_copy.go +++ b/vendor/github.com/docker/docker/client/container_copy.go @@ -11,11 +11,11 @@ import ( "path/filepath" "strings" - "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" ) // ContainerStatPath returns stat information about a path inside the container filesystem. -func (cli *Client) ContainerStatPath(ctx context.Context, containerID, path string) (types.ContainerPathStat, error) { +func (cli *Client) ContainerStatPath(ctx context.Context, containerID, path string) (container.PathStat, error) { query := url.Values{} query.Set("path", filepath.ToSlash(path)) // Normalize the paths used in the API. @@ -23,14 +23,14 @@ func (cli *Client) ContainerStatPath(ctx context.Context, containerID, path stri response, err := cli.head(ctx, urlStr, query, nil) defer ensureReaderClosed(response) if err != nil { - return types.ContainerPathStat{}, err + return container.PathStat{}, err } return getContainerPathStatFromHeader(response.header) } // CopyToContainer copies content into the container filesystem. // Note that `content` must be a Reader for a TAR archive -func (cli *Client) CopyToContainer(ctx context.Context, containerID, dstPath string, content io.Reader, options types.CopyToContainerOptions) error { +func (cli *Client) CopyToContainer(ctx context.Context, containerID, dstPath string, content io.Reader, options container.CopyToContainerOptions) error { query := url.Values{} query.Set("path", filepath.ToSlash(dstPath)) // Normalize the paths used in the API. // Do not allow for an existing directory to be overwritten by a non-directory and vice versa. @@ -55,14 +55,14 @@ func (cli *Client) CopyToContainer(ctx context.Context, containerID, dstPath str // CopyFromContainer gets the content from the container and returns it as a Reader // for a TAR archive to manipulate it in the host. It's up to the caller to close the reader. -func (cli *Client) CopyFromContainer(ctx context.Context, containerID, srcPath string) (io.ReadCloser, types.ContainerPathStat, error) { +func (cli *Client) CopyFromContainer(ctx context.Context, containerID, srcPath string) (io.ReadCloser, container.PathStat, error) { query := make(url.Values, 1) query.Set("path", filepath.ToSlash(srcPath)) // Normalize the paths used in the API. apiPath := "/containers/" + containerID + "/archive" response, err := cli.get(ctx, apiPath, query, nil) if err != nil { - return nil, types.ContainerPathStat{}, err + return nil, container.PathStat{}, err } // In order to get the copy behavior right, we need to know information @@ -78,8 +78,8 @@ func (cli *Client) CopyFromContainer(ctx context.Context, containerID, srcPath s return response.body, stat, err } -func getContainerPathStatFromHeader(header http.Header) (types.ContainerPathStat, error) { - var stat types.ContainerPathStat +func getContainerPathStatFromHeader(header http.Header) (container.PathStat, error) { + var stat container.PathStat encodedStat := header.Get("X-Docker-Container-Path-Stat") statDecoder := base64.NewDecoder(base64.StdEncoding, strings.NewReader(encodedStat)) diff --git a/vendor/github.com/docker/docker/client/container_exec.go b/vendor/github.com/docker/docker/client/container_exec.go index 526a3876a4a7..9379448d1aef 100644 --- a/vendor/github.com/docker/docker/client/container_exec.go +++ b/vendor/github.com/docker/docker/client/container_exec.go @@ -6,11 +6,12 @@ import ( "net/http" "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/versions" ) // ContainerExecCreate creates a new exec configuration to run an exec process. -func (cli *Client) ContainerExecCreate(ctx context.Context, container string, config types.ExecConfig) (types.IDResponse, error) { +func (cli *Client) ContainerExecCreate(ctx context.Context, container string, options container.ExecOptions) (types.IDResponse, error) { var response types.IDResponse // Make sure we negotiated (if the client is configured to do so), @@ -22,14 +23,14 @@ func (cli *Client) ContainerExecCreate(ctx context.Context, container string, co return response, err } - if err := cli.NewVersionError(ctx, "1.25", "env"); len(config.Env) != 0 && err != nil { + if err := cli.NewVersionError(ctx, "1.25", "env"); len(options.Env) != 0 && err != nil { return response, err } if versions.LessThan(cli.ClientVersion(), "1.42") { - config.ConsoleSize = nil + options.ConsoleSize = nil } - resp, err := cli.post(ctx, "/containers/"+container+"/exec", nil, config, nil) + resp, err := cli.post(ctx, "/containers/"+container+"/exec", nil, options, nil) defer ensureReaderClosed(resp) if err != nil { return response, err @@ -39,7 +40,7 @@ func (cli *Client) ContainerExecCreate(ctx context.Context, container string, co } // ContainerExecStart starts an exec process already created in the docker host. -func (cli *Client) ContainerExecStart(ctx context.Context, execID string, config types.ExecStartCheck) error { +func (cli *Client) ContainerExecStart(ctx context.Context, execID string, config container.ExecStartOptions) error { if versions.LessThan(cli.ClientVersion(), "1.42") { config.ConsoleSize = nil } @@ -52,7 +53,7 @@ func (cli *Client) ContainerExecStart(ctx context.Context, execID string, config // It returns a types.HijackedConnection with the hijacked connection // and the a reader to get output. It's up to the called to close // the hijacked connection by calling types.HijackedResponse.Close. -func (cli *Client) ContainerExecAttach(ctx context.Context, execID string, config types.ExecStartCheck) (types.HijackedResponse, error) { +func (cli *Client) ContainerExecAttach(ctx context.Context, execID string, config container.ExecAttachOptions) (types.HijackedResponse, error) { if versions.LessThan(cli.ClientVersion(), "1.42") { config.ConsoleSize = nil } @@ -62,8 +63,8 @@ func (cli *Client) ContainerExecAttach(ctx context.Context, execID string, confi } // ContainerExecInspect returns information about a specific exec process on the docker host. -func (cli *Client) ContainerExecInspect(ctx context.Context, execID string) (types.ContainerExecInspect, error) { - var response types.ContainerExecInspect +func (cli *Client) ContainerExecInspect(ctx context.Context, execID string) (container.ExecInspect, error) { + var response container.ExecInspect resp, err := cli.get(ctx, "/exec/"+execID+"/json", nil, nil) if err != nil { return response, err diff --git a/vendor/github.com/docker/docker/client/container_prune.go b/vendor/github.com/docker/docker/client/container_prune.go index ca509238447b..29c922da77e5 100644 --- a/vendor/github.com/docker/docker/client/container_prune.go +++ b/vendor/github.com/docker/docker/client/container_prune.go @@ -5,13 +5,13 @@ import ( "encoding/json" "fmt" - "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/filters" ) // ContainersPrune requests the daemon to delete unused data -func (cli *Client) ContainersPrune(ctx context.Context, pruneFilters filters.Args) (types.ContainersPruneReport, error) { - var report types.ContainersPruneReport +func (cli *Client) ContainersPrune(ctx context.Context, pruneFilters filters.Args) (container.PruneReport, error) { + var report container.PruneReport if err := cli.NewVersionError(ctx, "1.25", "container prune"); err != nil { return report, err diff --git a/vendor/github.com/docker/docker/client/container_stats.go b/vendor/github.com/docker/docker/client/container_stats.go index 3fabb75f3211..b5641daee99d 100644 --- a/vendor/github.com/docker/docker/client/container_stats.go +++ b/vendor/github.com/docker/docker/client/container_stats.go @@ -4,12 +4,12 @@ import ( "context" "net/url" - "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" ) // ContainerStats returns near realtime stats for a given container. // It's up to the caller to close the io.ReadCloser returned. -func (cli *Client) ContainerStats(ctx context.Context, containerID string, stream bool) (types.ContainerStats, error) { +func (cli *Client) ContainerStats(ctx context.Context, containerID string, stream bool) (container.StatsResponseReader, error) { query := url.Values{} query.Set("stream", "0") if stream { @@ -18,10 +18,10 @@ func (cli *Client) ContainerStats(ctx context.Context, containerID string, strea resp, err := cli.get(ctx, "/containers/"+containerID+"/stats", query, nil) if err != nil { - return types.ContainerStats{}, err + return container.StatsResponseReader{}, err } - return types.ContainerStats{ + return container.StatsResponseReader{ Body: resp.body, OSType: getDockerOS(resp.header.Get("Server")), }, nil @@ -29,17 +29,17 @@ func (cli *Client) ContainerStats(ctx context.Context, containerID string, strea // ContainerStatsOneShot gets a single stat entry from a container. // It differs from `ContainerStats` in that the API should not wait to prime the stats -func (cli *Client) ContainerStatsOneShot(ctx context.Context, containerID string) (types.ContainerStats, error) { +func (cli *Client) ContainerStatsOneShot(ctx context.Context, containerID string) (container.StatsResponseReader, error) { query := url.Values{} query.Set("stream", "0") query.Set("one-shot", "1") resp, err := cli.get(ctx, "/containers/"+containerID+"/stats", query, nil) if err != nil { - return types.ContainerStats{}, err + return container.StatsResponseReader{}, err } - return types.ContainerStats{ + return container.StatsResponseReader{ Body: resp.body, OSType: getDockerOS(resp.header.Get("Server")), }, nil diff --git a/vendor/github.com/docker/docker/client/events.go b/vendor/github.com/docker/docker/client/events.go index a9c48a9288d4..d3ab26bed856 100644 --- a/vendor/github.com/docker/docker/client/events.go +++ b/vendor/github.com/docker/docker/client/events.go @@ -6,7 +6,6 @@ import ( "net/url" "time" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/events" "github.com/docker/docker/api/types/filters" timetypes "github.com/docker/docker/api/types/time" @@ -16,7 +15,7 @@ import ( // by cancelling the context. Once the stream has been completely read an io.EOF error will // be sent over the error channel. If an error is sent all processing will be stopped. It's up // to the caller to reopen the stream in the event of an error by reinvoking this method. -func (cli *Client) Events(ctx context.Context, options types.EventsOptions) (<-chan events.Message, <-chan error) { +func (cli *Client) Events(ctx context.Context, options events.ListOptions) (<-chan events.Message, <-chan error) { messages := make(chan events.Message) errs := make(chan error, 1) @@ -68,7 +67,7 @@ func (cli *Client) Events(ctx context.Context, options types.EventsOptions) (<-c return messages, errs } -func buildEventsQueryParams(cliVersion string, options types.EventsOptions) (url.Values, error) { +func buildEventsQueryParams(cliVersion string, options events.ListOptions) (url.Values, error) { query := url.Values{} ref := time.Now() diff --git a/vendor/github.com/docker/docker/client/image_import.go b/vendor/github.com/docker/docker/client/image_import.go index 5a890b0c59ef..43d55eda8eca 100644 --- a/vendor/github.com/docker/docker/client/image_import.go +++ b/vendor/github.com/docker/docker/client/image_import.go @@ -7,13 +7,12 @@ import ( "strings" "github.com/distribution/reference" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/image" ) // ImageImport creates a new image based on the source options. // It returns the JSON content in the response body. -func (cli *Client) ImageImport(ctx context.Context, source types.ImageImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) { +func (cli *Client) ImageImport(ctx context.Context, source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) { if ref != "" { // Check if the given image name can be resolved if _, err := reference.ParseNormalizedNamed(ref); err != nil { diff --git a/vendor/github.com/docker/docker/client/image_load.go b/vendor/github.com/docker/docker/client/image_load.go index c825206ea5e0..c68f0013e632 100644 --- a/vendor/github.com/docker/docker/client/image_load.go +++ b/vendor/github.com/docker/docker/client/image_load.go @@ -6,13 +6,13 @@ import ( "net/http" "net/url" - "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/image" ) // ImageLoad loads an image in the docker host from the client host. // It's up to the caller to close the io.ReadCloser in the // ImageLoadResponse returned by this function. -func (cli *Client) ImageLoad(ctx context.Context, input io.Reader, quiet bool) (types.ImageLoadResponse, error) { +func (cli *Client) ImageLoad(ctx context.Context, input io.Reader, quiet bool) (image.LoadResponse, error) { v := url.Values{} v.Set("quiet", "0") if quiet { @@ -22,9 +22,9 @@ func (cli *Client) ImageLoad(ctx context.Context, input io.Reader, quiet bool) ( "Content-Type": {"application/x-tar"}, }) if err != nil { - return types.ImageLoadResponse{}, err + return image.LoadResponse{}, err } - return types.ImageLoadResponse{ + return image.LoadResponse{ Body: resp.body, JSON: resp.header.Get("Content-Type") == "application/json", }, nil diff --git a/vendor/github.com/docker/docker/client/image_prune.go b/vendor/github.com/docker/docker/client/image_prune.go index 6b82d6ab6ca5..5ee987e248ae 100644 --- a/vendor/github.com/docker/docker/client/image_prune.go +++ b/vendor/github.com/docker/docker/client/image_prune.go @@ -5,13 +5,13 @@ import ( "encoding/json" "fmt" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" + "github.com/docker/docker/api/types/image" ) // ImagesPrune requests the daemon to delete unused data -func (cli *Client) ImagesPrune(ctx context.Context, pruneFilters filters.Args) (types.ImagesPruneReport, error) { - var report types.ImagesPruneReport +func (cli *Client) ImagesPrune(ctx context.Context, pruneFilters filters.Args) (image.PruneReport, error) { + var report image.PruneReport if err := cli.NewVersionError(ctx, "1.25", "image prune"); err != nil { return report, err diff --git a/vendor/github.com/docker/docker/client/image_push.go b/vendor/github.com/docker/docker/client/image_push.go index 2b80f2e8666f..16f9c4651d34 100644 --- a/vendor/github.com/docker/docker/client/image_push.go +++ b/vendor/github.com/docker/docker/client/image_push.go @@ -2,7 +2,9 @@ package client // import "github.com/docker/docker/client" import ( "context" + "encoding/json" "errors" + "fmt" "io" "net/http" "net/url" @@ -36,6 +38,20 @@ func (cli *Client) ImagePush(ctx context.Context, image string, options image.Pu } } + if options.Platform != nil { + if err := cli.NewVersionError(ctx, "1.46", "platform"); err != nil { + return nil, err + } + + p := *options.Platform + pJson, err := json.Marshal(p) + if err != nil { + return nil, fmt.Errorf("invalid platform: %v", err) + } + + query.Set("platform", string(pJson)) + } + resp, err := cli.tryImagePush(ctx, name, query, options.RegistryAuth) if errdefs.IsUnauthorized(err) && options.PrivilegeFunc != nil { newAuthHeader, privilegeErr := options.PrivilegeFunc(ctx) diff --git a/vendor/github.com/docker/docker/client/image_search.go b/vendor/github.com/docker/docker/client/image_search.go index 3c6fea44a170..0a07457574fa 100644 --- a/vendor/github.com/docker/docker/client/image_search.go +++ b/vendor/github.com/docker/docker/client/image_search.go @@ -7,7 +7,6 @@ import ( "net/url" "strconv" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/registry" "github.com/docker/docker/errdefs" @@ -15,7 +14,7 @@ import ( // ImageSearch makes the docker host search by a term in a remote registry. // The list of results is not sorted in any fashion. -func (cli *Client) ImageSearch(ctx context.Context, term string, options types.ImageSearchOptions) ([]registry.SearchResult, error) { +func (cli *Client) ImageSearch(ctx context.Context, term string, options registry.SearchOptions) ([]registry.SearchResult, error) { var results []registry.SearchResult query := url.Values{} query.Set("term", term) diff --git a/vendor/github.com/docker/docker/client/interface.go b/vendor/github.com/docker/docker/client/interface.go index 01ea36b7d949..cc60a5d13b48 100644 --- a/vendor/github.com/docker/docker/client/interface.go +++ b/vendor/github.com/docker/docker/client/interface.go @@ -50,11 +50,11 @@ type ContainerAPIClient interface { ContainerCommit(ctx context.Context, container string, options container.CommitOptions) (types.IDResponse, error) ContainerCreate(ctx context.Context, config *container.Config, hostConfig *container.HostConfig, networkingConfig *network.NetworkingConfig, platform *ocispec.Platform, containerName string) (container.CreateResponse, error) ContainerDiff(ctx context.Context, container string) ([]container.FilesystemChange, error) - ContainerExecAttach(ctx context.Context, execID string, config types.ExecStartCheck) (types.HijackedResponse, error) - ContainerExecCreate(ctx context.Context, container string, config types.ExecConfig) (types.IDResponse, error) - ContainerExecInspect(ctx context.Context, execID string) (types.ContainerExecInspect, error) + ContainerExecAttach(ctx context.Context, execID string, options container.ExecAttachOptions) (types.HijackedResponse, error) + ContainerExecCreate(ctx context.Context, container string, options container.ExecOptions) (types.IDResponse, error) + ContainerExecInspect(ctx context.Context, execID string) (container.ExecInspect, error) ContainerExecResize(ctx context.Context, execID string, options container.ResizeOptions) error - ContainerExecStart(ctx context.Context, execID string, config types.ExecStartCheck) error + ContainerExecStart(ctx context.Context, execID string, options container.ExecStartOptions) error ContainerExport(ctx context.Context, container string) (io.ReadCloser, error) ContainerInspect(ctx context.Context, container string) (types.ContainerJSON, error) ContainerInspectWithRaw(ctx context.Context, container string, getSize bool) (types.ContainerJSON, []byte, error) @@ -66,18 +66,18 @@ type ContainerAPIClient interface { ContainerRename(ctx context.Context, container, newContainerName string) error ContainerResize(ctx context.Context, container string, options container.ResizeOptions) error ContainerRestart(ctx context.Context, container string, options container.StopOptions) error - ContainerStatPath(ctx context.Context, container, path string) (types.ContainerPathStat, error) - ContainerStats(ctx context.Context, container string, stream bool) (types.ContainerStats, error) - ContainerStatsOneShot(ctx context.Context, container string) (types.ContainerStats, error) + ContainerStatPath(ctx context.Context, container, path string) (container.PathStat, error) + ContainerStats(ctx context.Context, container string, stream bool) (container.StatsResponseReader, error) + ContainerStatsOneShot(ctx context.Context, container string) (container.StatsResponseReader, error) ContainerStart(ctx context.Context, container string, options container.StartOptions) error ContainerStop(ctx context.Context, container string, options container.StopOptions) error ContainerTop(ctx context.Context, container string, arguments []string) (container.ContainerTopOKBody, error) ContainerUnpause(ctx context.Context, container string) error ContainerUpdate(ctx context.Context, container string, updateConfig container.UpdateConfig) (container.ContainerUpdateOKBody, error) ContainerWait(ctx context.Context, container string, condition container.WaitCondition) (<-chan container.WaitResponse, <-chan error) - CopyFromContainer(ctx context.Context, container, srcPath string) (io.ReadCloser, types.ContainerPathStat, error) - CopyToContainer(ctx context.Context, container, path string, content io.Reader, options types.CopyToContainerOptions) error - ContainersPrune(ctx context.Context, pruneFilters filters.Args) (types.ContainersPruneReport, error) + CopyFromContainer(ctx context.Context, container, srcPath string) (io.ReadCloser, container.PathStat, error) + CopyToContainer(ctx context.Context, container, path string, content io.Reader, options container.CopyToContainerOptions) error + ContainersPrune(ctx context.Context, pruneFilters filters.Args) (container.PruneReport, error) } // DistributionAPIClient defines API client methods for the registry @@ -92,29 +92,29 @@ type ImageAPIClient interface { BuildCancel(ctx context.Context, id string) error ImageCreate(ctx context.Context, parentReference string, options image.CreateOptions) (io.ReadCloser, error) ImageHistory(ctx context.Context, image string) ([]image.HistoryResponseItem, error) - ImageImport(ctx context.Context, source types.ImageImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) + ImageImport(ctx context.Context, source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) ImageInspectWithRaw(ctx context.Context, image string) (types.ImageInspect, []byte, error) ImageList(ctx context.Context, options image.ListOptions) ([]image.Summary, error) - ImageLoad(ctx context.Context, input io.Reader, quiet bool) (types.ImageLoadResponse, error) + ImageLoad(ctx context.Context, input io.Reader, quiet bool) (image.LoadResponse, error) ImagePull(ctx context.Context, ref string, options image.PullOptions) (io.ReadCloser, error) ImagePush(ctx context.Context, ref string, options image.PushOptions) (io.ReadCloser, error) ImageRemove(ctx context.Context, image string, options image.RemoveOptions) ([]image.DeleteResponse, error) - ImageSearch(ctx context.Context, term string, options types.ImageSearchOptions) ([]registry.SearchResult, error) + ImageSearch(ctx context.Context, term string, options registry.SearchOptions) ([]registry.SearchResult, error) ImageSave(ctx context.Context, images []string) (io.ReadCloser, error) ImageTag(ctx context.Context, image, ref string) error - ImagesPrune(ctx context.Context, pruneFilter filters.Args) (types.ImagesPruneReport, error) + ImagesPrune(ctx context.Context, pruneFilter filters.Args) (image.PruneReport, error) } // NetworkAPIClient defines API client methods for the networks type NetworkAPIClient interface { NetworkConnect(ctx context.Context, network, container string, config *network.EndpointSettings) error - NetworkCreate(ctx context.Context, name string, options types.NetworkCreate) (network.CreateResponse, error) + NetworkCreate(ctx context.Context, name string, options network.CreateOptions) (network.CreateResponse, error) NetworkDisconnect(ctx context.Context, network, container string, force bool) error NetworkInspect(ctx context.Context, network string, options network.InspectOptions) (network.Inspect, error) NetworkInspectWithRaw(ctx context.Context, network string, options network.InspectOptions) (network.Inspect, []byte, error) NetworkList(ctx context.Context, options network.ListOptions) ([]network.Summary, error) NetworkRemove(ctx context.Context, network string) error - NetworksPrune(ctx context.Context, pruneFilter filters.Args) (types.NetworksPruneReport, error) + NetworksPrune(ctx context.Context, pruneFilter filters.Args) (network.PruneReport, error) } // NodeAPIClient defines API client methods for the nodes @@ -165,7 +165,7 @@ type SwarmAPIClient interface { // SystemAPIClient defines API client methods for the system type SystemAPIClient interface { - Events(ctx context.Context, options types.EventsOptions) (<-chan events.Message, <-chan error) + Events(ctx context.Context, options events.ListOptions) (<-chan events.Message, <-chan error) Info(ctx context.Context) (system.Info, error) RegistryLogin(ctx context.Context, auth registry.AuthConfig) (registry.AuthenticateOKBody, error) DiskUsage(ctx context.Context, options types.DiskUsageOptions) (types.DiskUsage, error) @@ -179,7 +179,7 @@ type VolumeAPIClient interface { VolumeInspectWithRaw(ctx context.Context, volumeID string) (volume.Volume, []byte, error) VolumeList(ctx context.Context, options volume.ListOptions) (volume.ListResponse, error) VolumeRemove(ctx context.Context, volumeID string, force bool) error - VolumesPrune(ctx context.Context, pruneFilter filters.Args) (types.VolumesPruneReport, error) + VolumesPrune(ctx context.Context, pruneFilter filters.Args) (volume.PruneReport, error) VolumeUpdate(ctx context.Context, volumeID string, version swarm.Version, options volume.UpdateOptions) error } diff --git a/vendor/github.com/docker/docker/client/network_create.go b/vendor/github.com/docker/docker/client/network_create.go index 66f7fe8289e2..850e31cc971a 100644 --- a/vendor/github.com/docker/docker/client/network_create.go +++ b/vendor/github.com/docker/docker/client/network_create.go @@ -4,13 +4,12 @@ import ( "context" "encoding/json" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/network" "github.com/docker/docker/api/types/versions" ) // NetworkCreate creates a new network in the docker host. -func (cli *Client) NetworkCreate(ctx context.Context, name string, options types.NetworkCreate) (network.CreateResponse, error) { +func (cli *Client) NetworkCreate(ctx context.Context, name string, options network.CreateOptions) (network.CreateResponse, error) { var response network.CreateResponse // Make sure we negotiated (if the client is configured to do so), @@ -22,12 +21,13 @@ func (cli *Client) NetworkCreate(ctx context.Context, name string, options types return response, err } - networkCreateRequest := types.NetworkCreateRequest{ - NetworkCreate: options, + networkCreateRequest := network.CreateRequest{ + CreateOptions: options, Name: name, } if versions.LessThan(cli.version, "1.44") { - networkCreateRequest.CheckDuplicate = true //nolint:staticcheck // ignore SA1019: CheckDuplicate is deprecated since API v1.44. + enabled := true + networkCreateRequest.CheckDuplicate = &enabled //nolint:staticcheck // ignore SA1019: CheckDuplicate is deprecated since API v1.44. } serverResp, err := cli.post(ctx, "/networks/create", nil, networkCreateRequest, nil) diff --git a/vendor/github.com/docker/docker/client/network_prune.go b/vendor/github.com/docker/docker/client/network_prune.go index 7b5f831ef750..708cc61a4b27 100644 --- a/vendor/github.com/docker/docker/client/network_prune.go +++ b/vendor/github.com/docker/docker/client/network_prune.go @@ -5,13 +5,13 @@ import ( "encoding/json" "fmt" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" + "github.com/docker/docker/api/types/network" ) // NetworksPrune requests the daemon to delete unused networks -func (cli *Client) NetworksPrune(ctx context.Context, pruneFilters filters.Args) (types.NetworksPruneReport, error) { - var report types.NetworksPruneReport +func (cli *Client) NetworksPrune(ctx context.Context, pruneFilters filters.Args) (network.PruneReport, error) { + var report network.PruneReport if err := cli.NewVersionError(ctx, "1.25", "network prune"); err != nil { return report, err diff --git a/vendor/github.com/docker/docker/client/volume_prune.go b/vendor/github.com/docker/docker/client/volume_prune.go index 9333f6ee78e3..9b09c30fa6f6 100644 --- a/vendor/github.com/docker/docker/client/volume_prune.go +++ b/vendor/github.com/docker/docker/client/volume_prune.go @@ -5,13 +5,13 @@ import ( "encoding/json" "fmt" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" + "github.com/docker/docker/api/types/volume" ) // VolumesPrune requests the daemon to delete unused data -func (cli *Client) VolumesPrune(ctx context.Context, pruneFilters filters.Args) (types.VolumesPruneReport, error) { - var report types.VolumesPruneReport +func (cli *Client) VolumesPrune(ctx context.Context, pruneFilters filters.Args) (volume.PruneReport, error) { + var report volume.PruneReport if err := cli.NewVersionError(ctx, "1.25", "volume prune"); err != nil { return report, err diff --git a/vendor/github.com/docker/docker/pkg/archive/archive.go b/vendor/github.com/docker/docker/pkg/archive/archive.go index 3418cfc50e05..61b7234a0485 100644 --- a/vendor/github.com/docker/docker/pkg/archive/archive.go +++ b/vendor/github.com/docker/docker/pkg/archive/archive.go @@ -98,24 +98,16 @@ func NewDefaultArchiver() *Archiver { type breakoutError error const ( - // Uncompressed represents the uncompressed. - Uncompressed Compression = iota - // Bzip2 is bzip2 compression algorithm. - Bzip2 - // Gzip is gzip compression algorithm. - Gzip - // Xz is xz compression algorithm. - Xz - // Zstd is zstd compression algorithm. - Zstd + Uncompressed Compression = 0 // Uncompressed represents the uncompressed. + Bzip2 Compression = 1 // Bzip2 is bzip2 compression algorithm. + Gzip Compression = 2 // Gzip is gzip compression algorithm. + Xz Compression = 3 // Xz is xz compression algorithm. + Zstd Compression = 4 // Zstd is zstd compression algorithm. ) const ( - // AUFSWhiteoutFormat is the default format for whiteouts - AUFSWhiteoutFormat WhiteoutFormat = iota - // OverlayWhiteoutFormat formats whiteout according to the overlay - // standard. - OverlayWhiteoutFormat + AUFSWhiteoutFormat WhiteoutFormat = 0 // AUFSWhiteoutFormat is the default format for whiteouts + OverlayWhiteoutFormat WhiteoutFormat = 1 // OverlayWhiteoutFormat formats whiteout according to the overlay standard. ) // IsArchivePath checks if the (possibly compressed) file at the given path @@ -541,8 +533,10 @@ func newTarAppender(idMapping idtools.IdentityMapping, writer io.Writer, chownOp } // CanonicalTarNameForPath canonicalizes relativePath to a POSIX-style path using -// forward slashes. It is an alias for filepath.ToSlash, which is a no-op on +// forward slashes. It is an alias for [filepath.ToSlash], which is a no-op on // Linux and Unix. +// +// Deprecated: use [filepath.ToSlash]. This function will be removed in the next release. func CanonicalTarNameForPath(relativePath string) string { return filepath.ToSlash(relativePath) } @@ -885,7 +879,7 @@ func NewTarballer(srcPath string, options *TarOptions) (*Tarballer, error) { return &Tarballer{ // Fix the source path to work with long path names. This is a no-op // on platforms other than Windows. - srcPath: fixVolumePathPrefix(srcPath), + srcPath: addLongPathPrefix(srcPath), options: options, pm: pm, pipeReader: pipeReader, @@ -1452,6 +1446,8 @@ func cmdStream(cmd *exec.Cmd, input io.Reader) (io.ReadCloser, error) { // NewTempArchive reads the content of src into a temporary file, and returns the contents // of that file as an archive. The archive can only be read once - as soon as reading completes, // the file will be deleted. +// +// Deprecated: NewTempArchive is only used in tests and will be removed in the next release. func NewTempArchive(src io.Reader, dir string) (*TempArchive, error) { f, err := os.CreateTemp(dir, "") if err != nil { @@ -1473,6 +1469,8 @@ func NewTempArchive(src io.Reader, dir string) (*TempArchive, error) { // TempArchive is a temporary archive. The archive can only be read once - as soon as reading completes, // the file will be deleted. +// +// Deprecated: TempArchive is only used in tests and will be removed in the next release. type TempArchive struct { *os.File Size int64 // Pre-computed from Stat().Size() as a convenience diff --git a/vendor/github.com/docker/docker/pkg/archive/archive_linux.go b/vendor/github.com/docker/docker/pkg/archive/archive_linux.go index 2c3786cd50c8..a40278bc25ee 100644 --- a/vendor/github.com/docker/docker/pkg/archive/archive_linux.go +++ b/vendor/github.com/docker/docker/pkg/archive/archive_linux.go @@ -6,6 +6,7 @@ import ( "path/filepath" "strings" + "github.com/containerd/containerd/pkg/userns" "github.com/docker/docker/pkg/system" "github.com/pkg/errors" "golang.org/x/sys/unix" @@ -35,13 +36,18 @@ func (overlayWhiteoutConverter) ConvertWrite(hdr *tar.Header, path string, fi os } if fi.Mode()&os.ModeDir != 0 { + opaqueXattrName := "trusted.overlay.opaque" + if userns.RunningInUserNS() { + opaqueXattrName = "user.overlay.opaque" + } + // convert opaque dirs to AUFS format by writing an empty file with the prefix - opaque, err := system.Lgetxattr(path, "trusted.overlay.opaque") + opaque, err := system.Lgetxattr(path, opaqueXattrName) if err != nil { return nil, err } if len(opaque) == 1 && opaque[0] == 'y' { - delete(hdr.PAXRecords, paxSchilyXattr+"trusted.overlay.opaque") + delete(hdr.PAXRecords, paxSchilyXattr+opaqueXattrName) // create a header for the whiteout file // it should inherit some properties from the parent, but be a regular file @@ -56,7 +62,7 @@ func (overlayWhiteoutConverter) ConvertWrite(hdr *tar.Header, path string, fi os Gname: hdr.Gname, AccessTime: hdr.AccessTime, ChangeTime: hdr.ChangeTime, - } //#nosec G305 -- An archive is being created, not extracted. + } // #nosec G305 -- An archive is being created, not extracted. } } @@ -69,9 +75,14 @@ func (c overlayWhiteoutConverter) ConvertRead(hdr *tar.Header, path string) (boo // if a directory is marked as opaque by the AUFS special file, we need to translate that to overlay if base == WhiteoutOpaqueDir { - err := unix.Setxattr(dir, "trusted.overlay.opaque", []byte{'y'}, 0) + opaqueXattrName := "trusted.overlay.opaque" + if userns.RunningInUserNS() { + opaqueXattrName = "user.overlay.opaque" + } + + err := unix.Setxattr(dir, opaqueXattrName, []byte{'y'}, 0) if err != nil { - return false, errors.Wrapf(err, "setxattr(%q, trusted.overlay.opaque=y)", dir) + return false, errors.Wrapf(err, "setxattr(%q, %s=y)", dir, opaqueXattrName) } // don't write the file itself return false, err diff --git a/vendor/github.com/docker/docker/pkg/archive/archive_unix.go b/vendor/github.com/docker/docker/pkg/archive/archive_unix.go index ff59d0197525..f8192db52715 100644 --- a/vendor/github.com/docker/docker/pkg/archive/archive_unix.go +++ b/vendor/github.com/docker/docker/pkg/archive/archive_unix.go @@ -21,9 +21,9 @@ func init() { sysStat = statUnix } -// fixVolumePathPrefix does platform specific processing to ensure that if -// the path being passed in is not in a volume path format, convert it to one. -func fixVolumePathPrefix(srcPath string) string { +// addLongPathPrefix adds the Windows long path prefix to the path provided if +// it does not already have it. It is a no-op on platforms other than Windows. +func addLongPathPrefix(srcPath string) string { return srcPath } diff --git a/vendor/github.com/docker/docker/pkg/archive/archive_windows.go b/vendor/github.com/docker/docker/pkg/archive/archive_windows.go index 09a25832e8f1..e25c64b415cf 100644 --- a/vendor/github.com/docker/docker/pkg/archive/archive_windows.go +++ b/vendor/github.com/docker/docker/pkg/archive/archive_windows.go @@ -4,15 +4,27 @@ import ( "archive/tar" "os" "path/filepath" + "strings" "github.com/docker/docker/pkg/idtools" - "github.com/docker/docker/pkg/longpath" ) -// fixVolumePathPrefix does platform specific processing to ensure that if -// the path being passed in is not in a volume path format, convert it to one. -func fixVolumePathPrefix(srcPath string) string { - return longpath.AddPrefix(srcPath) +// longPathPrefix is the longpath prefix for Windows file paths. +const longPathPrefix = `\\?\` + +// addLongPathPrefix adds the Windows long path prefix to the path provided if +// it does not already have it. It is a no-op on platforms other than Windows. +// +// addLongPathPrefix is a copy of [github.com/docker/docker/pkg/longpath.AddPrefix]. +func addLongPathPrefix(srcPath string) string { + if strings.HasPrefix(srcPath, longPathPrefix) { + return srcPath + } + if strings.HasPrefix(srcPath, `\\`) { + // This is a UNC path, so we need to add 'UNC' to the path as well. + return longPathPrefix + `UNC` + srcPath[1:] + } + return longPathPrefix + srcPath } // getWalkRoot calculates the root path when performing a TarWithOptions. diff --git a/vendor/github.com/docker/docker/pkg/archive/changes.go b/vendor/github.com/docker/docker/pkg/archive/changes.go index f9f16c925906..5f12ca4016a1 100644 --- a/vendor/github.com/docker/docker/pkg/archive/changes.go +++ b/vendor/github.com/docker/docker/pkg/archive/changes.go @@ -23,12 +23,9 @@ import ( type ChangeType int const ( - // ChangeModify represents the modify operation. - ChangeModify = iota - // ChangeAdd represents the add operation. - ChangeAdd - // ChangeDelete represents the delete operation. - ChangeDelete + ChangeModify = 0 // ChangeModify represents the modify operation. + ChangeAdd = 1 // ChangeAdd represents the add operation. + ChangeDelete = 2 // ChangeDelete represents the delete operation. ) func (c ChangeType) String() string { diff --git a/vendor/github.com/docker/docker/pkg/archive/changes_other.go b/vendor/github.com/docker/docker/pkg/archive/changes_other.go index 13a7d3c0c638..28f741a25ddb 100644 --- a/vendor/github.com/docker/docker/pkg/archive/changes_other.go +++ b/vendor/github.com/docker/docker/pkg/archive/changes_other.go @@ -72,19 +72,23 @@ func collectFileInfo(sourceDir string) (*FileInfo, error) { return fmt.Errorf("collectFileInfo: Unexpectedly no parent for %s", relPath) } + s, err := system.Lstat(path) + if err != nil { + return err + } + info := &FileInfo{ name: filepath.Base(relPath), children: make(map[string]*FileInfo), parent: parent, + stat: s, } - s, err := system.Lstat(path) - if err != nil { - return err - } - info.stat = s - - info.capability, _ = system.Lgetxattr(path, "security.capability") + // system.Lgetxattr is only implemented on Linux and produces an error + // on other platforms. This code is intentionally left commented-out + // as a reminder to include this code if this would ever be implemented + // on other platforms. + // info.capability, _ = system.Lgetxattr(path, "security.capability") parent.children[info.name] = info diff --git a/vendor/github.com/docker/docker/pkg/archive/diff.go b/vendor/github.com/docker/docker/pkg/archive/diff.go index 318f59421202..e080e310ac8b 100644 --- a/vendor/github.com/docker/docker/pkg/archive/diff.go +++ b/vendor/github.com/docker/docker/pkg/archive/diff.go @@ -102,7 +102,7 @@ func UnpackLayer(dest string, layer io.Reader, options *TarOptions) (size int64, continue } } - //#nosec G305 -- The joined path is guarded against path traversal. + // #nosec G305 -- The joined path is guarded against path traversal. path := filepath.Join(dest, hdr.Name) rel, err := filepath.Rel(dest, path) if err != nil { @@ -198,7 +198,7 @@ func UnpackLayer(dest string, layer io.Reader, options *TarOptions) (size int64, } for _, hdr := range dirs { - //#nosec G305 -- The header was checked for path traversal before it was appended to the dirs slice. + // #nosec G305 -- The header was checked for path traversal before it was appended to the dirs slice. path := filepath.Join(dest, hdr.Name) if err := system.Chtimes(path, hdr.AccessTime, hdr.ModTime); err != nil { return 0, err diff --git a/vendor/github.com/docker/docker/pkg/longpath/longpath.go b/vendor/github.com/docker/docker/pkg/longpath/longpath.go index 1c5dde5218f1..fedb9eb83e95 100644 --- a/vendor/github.com/docker/docker/pkg/longpath/longpath.go +++ b/vendor/github.com/docker/docker/pkg/longpath/longpath.go @@ -12,20 +12,24 @@ import ( ) // Prefix is the longpath prefix for Windows file paths. -const Prefix = `\\?\` +// +// Deprecated: this const is only used internally, and will be removed in the next release +const Prefix = longPathPrefix + +// longPathPrefix is the longpath prefix for Windows file paths. +const longPathPrefix = `\\?\` // AddPrefix adds the Windows long path prefix to the path provided if // it does not already have it. func AddPrefix(path string) string { - if !strings.HasPrefix(path, Prefix) { - if strings.HasPrefix(path, `\\`) { - // This is a UNC path, so we need to add 'UNC' to the path as well. - path = Prefix + `UNC` + path[1:] - } else { - path = Prefix + path - } + if strings.HasPrefix(path, longPathPrefix) { + return path + } + if strings.HasPrefix(path, `\\`) { + // This is a UNC path, so we need to add 'UNC' to the path as well. + return longPathPrefix + `UNC` + path[1:] } - return path + return longPathPrefix + path } // MkdirTemp is the equivalent of [os.MkdirTemp], except that on Windows diff --git a/vendor/github.com/docker/docker/pkg/stringid/stringid.go b/vendor/github.com/docker/docker/pkg/stringid/stringid.go index d3d1014acf41..bffac8035e62 100644 --- a/vendor/github.com/docker/docker/pkg/stringid/stringid.go +++ b/vendor/github.com/docker/docker/pkg/stringid/stringid.go @@ -22,6 +22,8 @@ var ( // IsShortID determines if id has the correct format and length for a short ID. // It checks the IDs length and if it consists of valid characters for IDs (a-f0-9). +// +// Deprecated: this function is no longer used, and will be removed in the next release. func IsShortID(id string) bool { if len(id) != shortLen { return false @@ -62,6 +64,8 @@ func GenerateRandomID() string { } // ValidateID checks whether an ID string is a valid, full-length image ID. +// +// Deprecated: use [github.com/docker/docker/image/v1.ValidateID] instead. Will be removed in the next release. func ValidateID(id string) error { if len(id) != fullLen { return errors.New("image ID '" + id + "' is invalid") diff --git a/vendor/github.com/docker/docker/registry/auth.go b/vendor/github.com/docker/docker/registry/auth.go index f685892c1fde..905ccf5f5120 100644 --- a/vendor/github.com/docker/docker/registry/auth.go +++ b/vendor/github.com/docker/docker/registry/auth.go @@ -108,16 +108,18 @@ func v2AuthHTTPClient(endpoint *url.URL, authTransport http.RoundTripper, modifi return nil, err } - tokenHandlerOptions := auth.TokenHandlerOptions{ - Transport: authTransport, - Credentials: creds, - OfflineAccess: true, - ClientID: AuthClientID, - Scopes: scopes, - } - tokenHandler := auth.NewTokenHandlerWithOptions(tokenHandlerOptions) - basicHandler := auth.NewBasicHandler(creds) - modifiers = append(modifiers, auth.NewAuthorizer(challengeManager, tokenHandler, basicHandler)) + authHandlers := []auth.AuthenticationHandler{ + auth.NewTokenHandlerWithOptions(auth.TokenHandlerOptions{ + Transport: authTransport, + Credentials: creds, + OfflineAccess: true, + ClientID: AuthClientID, + Scopes: scopes, + }), + auth.NewBasicHandler(creds), + } + + modifiers = append(modifiers, auth.NewAuthorizer(challengeManager, authHandlers...)) return &http.Client{ Transport: transport.NewTransport(authTransport, modifiers...), diff --git a/vendor/github.com/docker/docker/registry/search.go b/vendor/github.com/docker/docker/registry/search.go index 5c79e9968b30..4ce90f55d4d6 100644 --- a/vendor/github.com/docker/docker/registry/search.go +++ b/vendor/github.com/docker/docker/registry/search.go @@ -112,16 +112,12 @@ func (s *Service) searchUnfiltered(ctx context.Context, term string, limit int, var client *http.Client if authConfig != nil && authConfig.IdentityToken != "" && authConfig.Username != "" { creds := NewStaticCredentialStore(authConfig) - scopes := []auth.Scope{ - auth.RegistryScope{ - Name: "catalog", - Actions: []string{"search"}, - }, - } // TODO(thaJeztah); is there a reason not to include other headers here? (originally added in 19d48f0b8ba59eea9f2cac4ad1c7977712a6b7ac) modifiers := Headers(headers.Get("User-Agent"), nil) - v2Client, err := v2AuthHTTPClient(endpoint.URL, endpoint.client.Transport, modifiers, creds, scopes) + v2Client, err := v2AuthHTTPClient(endpoint.URL, endpoint.client.Transport, modifiers, creds, []auth.Scope{ + auth.RegistryScope{Name: "catalog", Actions: []string{"search"}}, + }) if err != nil { return nil, err } diff --git a/vendor/github.com/moby/swarmkit/v2/api/api.pb.txt b/vendor/github.com/moby/swarmkit/v2/api/api.pb.txt index aa53182aab81..a77d1a8965dd 100644 --- a/vendor/github.com/moby/swarmkit/v2/api/api.pb.txt +++ b/vendor/github.com/moby/swarmkit/v2/api/api.pb.txt @@ -5803,6 +5803,13 @@ file { type_name: ".docker.swarmkit.v1.ContainerSpec.Ulimit" json_name: "ulimits" } + field { + name: "oom_score_adj" + number: 30 + label: LABEL_OPTIONAL + type: TYPE_INT64 + json_name: "oomScoreAdj" + } nested_type { name: "LabelsEntry" field { diff --git a/vendor/github.com/moby/swarmkit/v2/api/specs.pb.go b/vendor/github.com/moby/swarmkit/v2/api/specs.pb.go index a789d5a95eab..959749c9f0b5 100644 --- a/vendor/github.com/moby/swarmkit/v2/api/specs.pb.go +++ b/vendor/github.com/moby/swarmkit/v2/api/specs.pb.go @@ -875,6 +875,9 @@ type ContainerSpec struct { // Ulimits defines the list of ulimits to set in the container. This option // is equivalent to passing --ulimit to docker run. Ulimits []*ContainerSpec_Ulimit `protobuf:"bytes,29,rep,name=ulimits,proto3" json:"ulimits,omitempty"` + // OOmScoreAdj defines the relative value used for destroying a container during an OOM + // Values are between -1000 and 1000 + OomScoreAdj int64 `protobuf:"varint,30,opt,name=oom_score_adj,json=oomScoreAdj,proto3" json:"oom_score_adj,omitempty"` } func (m *ContainerSpec) Reset() { *m = ContainerSpec{} } @@ -1429,166 +1432,168 @@ func init() { } var fileDescriptor_6589acc608f7d4fd = []byte{ - // 2537 bytes of a gzipped FileDescriptorProto + // 2563 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0x41, 0x73, 0x1b, 0xb7, - 0x15, 0x26, 0x25, 0x8a, 0x22, 0xdf, 0x92, 0x32, 0x8d, 0x38, 0xc9, 0x8a, 0xb6, 0x29, 0x86, 0x71, - 0x1c, 0x25, 0x99, 0x52, 0x13, 0x35, 0x93, 0x26, 0x4e, 0xd3, 0x96, 0x14, 0x19, 0x8b, 0xb1, 0x2d, - 0x73, 0x40, 0x59, 0xad, 0x67, 0x3a, 0xc3, 0x81, 0x76, 0x21, 0x72, 0xab, 0xe5, 0x62, 0x8b, 0x05, - 0x95, 0xf0, 0xd6, 0x63, 0xc6, 0xbd, 0xf4, 0xd0, 0xab, 0x4e, 0x9d, 0x9e, 0x7a, 0x69, 0xff, 0x41, - 0x7b, 0xcb, 0x31, 0xc7, 0xf4, 0xa2, 0x69, 0x94, 0x9f, 0xd0, 0x5b, 0x2f, 0xed, 0x00, 0x8b, 0x5d, - 0x2e, 0x25, 0xd2, 0x72, 0xa7, 0x3e, 0xf4, 0x06, 0x3c, 0x7e, 0xdf, 0x5b, 0xe0, 0xe1, 0xbd, 0x87, - 0xf7, 0x40, 0x78, 0x77, 0xe0, 0x88, 0xe1, 0xf8, 0xb0, 0x6e, 0xb1, 0xd1, 0x96, 0xcd, 0xac, 0x63, - 0xca, 0xb7, 0x82, 0x2f, 0x08, 0x1f, 0x1d, 0x3b, 0x62, 0x8b, 0xf8, 0xce, 0x56, 0xe0, 0x53, 0x2b, - 0xa8, 0xfb, 0x9c, 0x09, 0x86, 0x50, 0x08, 0xa8, 0x47, 0x80, 0xfa, 0xc9, 0xfb, 0xe5, 0xab, 0xf8, - 0x62, 0xe2, 0x53, 0xcd, 0x2f, 0xdf, 0x18, 0xb0, 0x01, 0x53, 0xc3, 0x2d, 0x39, 0xd2, 0xd2, 0xca, - 0x80, 0xb1, 0x81, 0x4b, 0xb7, 0xd4, 0xec, 0x70, 0x7c, 0xb4, 0x65, 0x8f, 0x39, 0x11, 0x0e, 0xf3, - 0xf4, 0xef, 0xeb, 0x17, 0x7f, 0x27, 0xde, 0x64, 0x11, 0xf5, 0x0b, 0x4e, 0x7c, 0x9f, 0x72, 0xfd, - 0xc1, 0xda, 0x69, 0x06, 0x72, 0x7b, 0xcc, 0xa6, 0x3d, 0x9f, 0x5a, 0xe8, 0x3e, 0x18, 0xc4, 0xf3, - 0x98, 0x50, 0xba, 0x03, 0x33, 0x5d, 0x4d, 0x6f, 0x1a, 0xdb, 0x1b, 0xf5, 0xcb, 0x7b, 0xaa, 0x37, - 0xa6, 0xb0, 0x66, 0xe6, 0xeb, 0xb3, 0x8d, 0x14, 0x4e, 0x32, 0xd1, 0x4f, 0xa1, 0x60, 0xd3, 0xc0, - 0xe1, 0xd4, 0xee, 0x73, 0xe6, 0x52, 0x73, 0xa9, 0x9a, 0xde, 0x5c, 0xdb, 0xbe, 0x35, 0x4f, 0x93, - 0xfc, 0x38, 0x66, 0x2e, 0xc5, 0x86, 0x66, 0xc8, 0x09, 0xba, 0x0f, 0x30, 0xa2, 0xa3, 0x43, 0xca, - 0x83, 0xa1, 0xe3, 0x9b, 0xcb, 0x8a, 0xfe, 0xf6, 0x22, 0xba, 0x5c, 0x7b, 0xfd, 0x51, 0x0c, 0xc7, - 0x09, 0x2a, 0x7a, 0x04, 0x05, 0x72, 0x42, 0x1c, 0x97, 0x1c, 0x3a, 0xae, 0x23, 0x26, 0x66, 0x46, - 0xa9, 0x7a, 0xe7, 0xb9, 0xaa, 0x1a, 0x09, 0x02, 0x9e, 0xa1, 0xd7, 0x6c, 0x80, 0xe9, 0x87, 0xd0, - 0x5d, 0x58, 0xed, 0xb6, 0xf7, 0x5a, 0x9d, 0xbd, 0xfb, 0xa5, 0x54, 0x79, 0xfd, 0xd9, 0x69, 0xf5, - 0x55, 0xa9, 0x63, 0x0a, 0xe8, 0x52, 0xcf, 0x76, 0xbc, 0x01, 0xda, 0x84, 0x5c, 0x63, 0x67, 0xa7, - 0xdd, 0xdd, 0x6f, 0xb7, 0x4a, 0xe9, 0x72, 0xf9, 0xd9, 0x69, 0xf5, 0xb5, 0x59, 0x60, 0xc3, 0xb2, - 0xa8, 0x2f, 0xa8, 0x5d, 0xce, 0x7c, 0xf5, 0x87, 0x4a, 0xaa, 0xf6, 0x55, 0x1a, 0x0a, 0xc9, 0x45, - 0xa0, 0xbb, 0x90, 0x6d, 0xec, 0xec, 0x77, 0x0e, 0xda, 0xa5, 0xd4, 0x94, 0x9e, 0x44, 0x34, 0x2c, - 0xe1, 0x9c, 0x50, 0x74, 0x07, 0x56, 0xba, 0x8d, 0x27, 0xbd, 0x76, 0x29, 0x3d, 0x5d, 0x4e, 0x12, - 0xd6, 0x25, 0xe3, 0x40, 0xa1, 0x5a, 0xb8, 0xd1, 0xd9, 0x2b, 0x2d, 0xcd, 0x47, 0xb5, 0x38, 0x71, - 0x3c, 0xbd, 0x94, 0x3f, 0xad, 0x80, 0xd1, 0xa3, 0xfc, 0xc4, 0xb1, 0x5e, 0xb2, 0x8b, 0x7c, 0x08, - 0x19, 0x41, 0x82, 0x63, 0xe5, 0x1a, 0xc6, 0x7c, 0xd7, 0xd8, 0x27, 0xc1, 0xb1, 0xfc, 0xa8, 0xa6, - 0x2b, 0xbc, 0xf4, 0x0c, 0x4e, 0x7d, 0xd7, 0xb1, 0x88, 0xa0, 0xb6, 0xf2, 0x0c, 0x63, 0xfb, 0xad, - 0x79, 0x6c, 0x1c, 0xa3, 0xf4, 0xfa, 0x77, 0x53, 0x38, 0x41, 0x45, 0x9f, 0x40, 0x76, 0xe0, 0xb2, - 0x43, 0xe2, 0x2a, 0x9f, 0x30, 0xb6, 0xdf, 0x98, 0xa7, 0xe4, 0xbe, 0x42, 0x4c, 0x15, 0x68, 0x0a, - 0xfa, 0x1c, 0xd6, 0xa6, 0xaa, 0xfa, 0xbf, 0x62, 0x87, 0x26, 0x2c, 0x56, 0x32, 0x5d, 0xc9, 0xe7, - 0xec, 0x70, 0x37, 0x85, 0x8b, 0x3c, 0x29, 0x40, 0x3f, 0x01, 0x08, 0xb5, 0x2a, 0x3d, 0x86, 0xd2, - 0x73, 0x7b, 0xf1, 0x62, 0x42, 0x1d, 0xf9, 0x41, 0x34, 0x41, 0x1f, 0x41, 0x76, 0xec, 0xdb, 0x44, - 0x50, 0x33, 0xab, 0xb8, 0xd5, 0x79, 0xdc, 0x27, 0x0a, 0xb1, 0xc3, 0xbc, 0x23, 0x67, 0x80, 0x35, - 0x1e, 0xfd, 0x18, 0x72, 0x9c, 0xb9, 0xee, 0x21, 0xb1, 0x8e, 0xcd, 0xfc, 0x0b, 0x72, 0x63, 0x06, - 0x7a, 0x00, 0x39, 0x8f, 0x8a, 0x2f, 0x18, 0x3f, 0x0e, 0xcc, 0xd5, 0xea, 0xf2, 0xa6, 0xb1, 0xfd, - 0xde, 0xdc, 0xb0, 0x0a, 0x31, 0x0d, 0x21, 0x88, 0x35, 0x1c, 0x51, 0x4f, 0x84, 0x8a, 0x9a, 0x4b, - 0x66, 0x1a, 0xc7, 0x0a, 0xe4, 0x52, 0xa8, 0x67, 0xfb, 0xcc, 0xf1, 0x84, 0x99, 0x5b, 0xbc, 0x94, - 0xb6, 0xc6, 0x48, 0xb7, 0xc0, 0x31, 0xa3, 0x99, 0x85, 0xcc, 0x88, 0xd9, 0xb4, 0xb6, 0x05, 0xd7, - 0x2f, 0x1d, 0x3b, 0x2a, 0x43, 0x4e, 0x1b, 0x3c, 0xf4, 0xd7, 0x0c, 0x8e, 0xe7, 0xb5, 0x6b, 0x50, - 0x9c, 0x39, 0xe2, 0x9a, 0x05, 0xc5, 0x99, 0xe3, 0x42, 0x6f, 0xc1, 0xda, 0x88, 0x7c, 0xd9, 0xb7, - 0x98, 0x67, 0x8d, 0x39, 0xa7, 0x9e, 0xd0, 0x3a, 0x8a, 0x23, 0xf2, 0xe5, 0x4e, 0x2c, 0x44, 0xef, - 0xc1, 0x75, 0xc1, 0x04, 0x71, 0xfb, 0x16, 0x1b, 0xf9, 0x2e, 0x0d, 0xa3, 0x63, 0x49, 0x21, 0x4b, - 0xea, 0x87, 0x9d, 0xa9, 0xbc, 0x66, 0x40, 0x3e, 0x3e, 0xcb, 0xda, 0x9f, 0x57, 0x20, 0x17, 0x79, - 0x3a, 0x7a, 0x00, 0x40, 0x62, 0x43, 0x69, 0x43, 0xbc, 0xf3, 0x42, 0x56, 0x95, 0x74, 0xe9, 0xe1, - 0x53, 0x3a, 0x6a, 0x40, 0xde, 0x62, 0x9e, 0x20, 0x8e, 0x47, 0xb9, 0x8e, 0xd4, 0xb9, 0xfe, 0xb9, - 0x13, 0x81, 0xb4, 0x8e, 0x29, 0x0b, 0x35, 0x61, 0x75, 0x40, 0x3d, 0xca, 0x1d, 0x4b, 0x3b, 0xf8, - 0xdd, 0xb9, 0x8e, 0x19, 0x42, 0xf0, 0xd8, 0x13, 0xce, 0x88, 0x6a, 0x2d, 0x11, 0x11, 0x7d, 0x06, - 0x79, 0x4e, 0x03, 0x36, 0xe6, 0x16, 0x0d, 0x74, 0xb8, 0x6f, 0xce, 0x0f, 0x93, 0x10, 0x84, 0xe9, - 0xaf, 0xc7, 0x0e, 0xa7, 0x72, 0x0b, 0x01, 0x9e, 0x52, 0xd1, 0x27, 0xb0, 0xca, 0x69, 0x20, 0x08, - 0x17, 0xcf, 0x8b, 0x58, 0x1c, 0x42, 0xba, 0xcc, 0x75, 0xac, 0x09, 0x8e, 0x18, 0xe8, 0x13, 0xc8, - 0xfb, 0x2e, 0xb1, 0x94, 0x56, 0x73, 0x65, 0x71, 0x8c, 0x75, 0x23, 0x10, 0x9e, 0xe2, 0xd1, 0xc7, - 0x00, 0x2e, 0x1b, 0xf4, 0x6d, 0xee, 0x9c, 0x50, 0xae, 0xa3, 0xac, 0x3c, 0x8f, 0xdd, 0x52, 0x08, - 0x9c, 0x77, 0xd9, 0x20, 0x1c, 0xa2, 0xfb, 0xff, 0x53, 0x90, 0x24, 0x02, 0xe4, 0x0d, 0x28, 0x1c, - 0x31, 0x6e, 0xd1, 0xbe, 0x8e, 0xf5, 0xbc, 0xf2, 0x2d, 0x43, 0xc9, 0xc2, 0x00, 0x45, 0xbf, 0x84, - 0x57, 0x22, 0x6b, 0xf5, 0x39, 0x3d, 0xa2, 0x9c, 0x7a, 0xd2, 0xe4, 0x86, 0xfa, 0xec, 0x5b, 0xcf, - 0x37, 0xb9, 0x46, 0xeb, 0x54, 0x8b, 0xf8, 0xc5, 0x1f, 0x82, 0x66, 0x1e, 0x56, 0x79, 0x78, 0xc0, - 0xb5, 0xdf, 0xa6, 0x65, 0x9c, 0x5d, 0x40, 0xa0, 0x2d, 0x30, 0xe2, 0xcf, 0x3b, 0xb6, 0x72, 0xb8, - 0x7c, 0x73, 0xed, 0xfc, 0x6c, 0x03, 0x22, 0x6c, 0xa7, 0x25, 0x33, 0xb0, 0x1e, 0xdb, 0xa8, 0x0d, - 0xc5, 0x98, 0x20, 0x8b, 0x20, 0x5d, 0x26, 0x54, 0x9f, 0xb7, 0xd2, 0xfd, 0x89, 0x4f, 0x71, 0x81, - 0x27, 0x66, 0xb5, 0x5f, 0x00, 0xba, 0xec, 0x80, 0x08, 0x41, 0xe6, 0xd8, 0xf1, 0xf4, 0x32, 0xb0, - 0x1a, 0xa3, 0x3a, 0xac, 0xfa, 0x64, 0xe2, 0x32, 0x62, 0x6b, 0x3f, 0xbc, 0x51, 0x0f, 0xcb, 0xa3, - 0x7a, 0x54, 0x1e, 0xd5, 0x1b, 0xde, 0x04, 0x47, 0xa0, 0xda, 0x03, 0x78, 0x75, 0x6e, 0x9c, 0xa1, - 0x6d, 0x28, 0xc4, 0x31, 0x32, 0xdd, 0xeb, 0xb5, 0xf3, 0xb3, 0x0d, 0x23, 0x0e, 0xa6, 0x4e, 0x0b, - 0x1b, 0x31, 0xa8, 0x63, 0xd7, 0xfe, 0xba, 0x06, 0xc5, 0x99, 0x48, 0x43, 0x37, 0x60, 0xc5, 0x19, - 0x91, 0x01, 0xd5, 0x6b, 0x0c, 0x27, 0xa8, 0x0d, 0x59, 0x97, 0x1c, 0x52, 0x57, 0xc6, 0x8a, 0x3c, - 0xb8, 0x1f, 0x5c, 0x19, 0xb2, 0xf5, 0x87, 0x0a, 0xdf, 0xf6, 0x04, 0x9f, 0x60, 0x4d, 0x46, 0x26, - 0xac, 0x5a, 0x6c, 0x34, 0x22, 0x9e, 0xbc, 0x24, 0x97, 0x37, 0xf3, 0x38, 0x9a, 0x4a, 0xcb, 0x10, - 0x3e, 0x08, 0xcc, 0x8c, 0x12, 0xab, 0xb1, 0xcc, 0x91, 0x43, 0x16, 0x08, 0x8f, 0x8c, 0xa8, 0xb9, - 0xa6, 0x56, 0x13, 0xcf, 0x51, 0x09, 0x96, 0xa9, 0x77, 0x62, 0xae, 0x28, 0xb8, 0x1c, 0x4a, 0x89, - 0xed, 0x84, 0x81, 0x90, 0xc7, 0x72, 0x28, 0x75, 0x8e, 0x03, 0xca, 0xcd, 0xd5, 0xd0, 0xda, 0x72, - 0x8c, 0x5e, 0x83, 0xec, 0x80, 0xb3, 0xb1, 0x1f, 0x7a, 0x60, 0x1e, 0xeb, 0x99, 0xbc, 0xef, 0x7c, - 0xee, 0x9c, 0x38, 0x2e, 0x1d, 0xd0, 0xc0, 0x7c, 0x4d, 0x1d, 0x44, 0x65, 0x6e, 0x2c, 0xc6, 0x28, - 0x9c, 0x60, 0xa0, 0x3a, 0x64, 0x1c, 0xcf, 0x11, 0xe6, 0xeb, 0x3a, 0x0e, 0x2f, 0x1e, 0x61, 0x93, - 0x31, 0xf7, 0x80, 0xb8, 0x63, 0x8a, 0x15, 0x0e, 0xad, 0xc3, 0xb2, 0x10, 0x13, 0xb3, 0x58, 0x4d, - 0x6f, 0xe6, 0x9a, 0xab, 0xe7, 0x67, 0x1b, 0xcb, 0xfb, 0xfb, 0x4f, 0xb1, 0x94, 0xa1, 0xdb, 0x00, - 0xcc, 0xa7, 0x5e, 0x3f, 0x10, 0xb6, 0xe3, 0x99, 0x48, 0x22, 0x70, 0x5e, 0x4a, 0x7a, 0x52, 0x80, - 0x6e, 0xca, 0xcc, 0x45, 0xec, 0x3e, 0xf3, 0xdc, 0x89, 0xf9, 0x8a, 0xfa, 0x35, 0x27, 0x05, 0x8f, - 0x3d, 0x77, 0x82, 0x36, 0xc0, 0x08, 0x04, 0xf3, 0xfb, 0x81, 0x33, 0xf0, 0x88, 0x6b, 0xde, 0x50, - 0x3b, 0x07, 0x29, 0xea, 0x29, 0x09, 0xfa, 0x11, 0x64, 0x47, 0x6c, 0xec, 0x89, 0xc0, 0xcc, 0xa9, - 0x83, 0x5c, 0x9f, 0xb7, 0xc7, 0x47, 0x12, 0xa1, 0xa3, 0x4e, 0xc3, 0x51, 0x1b, 0xae, 0x2b, 0xcd, - 0x03, 0x4e, 0x2c, 0xda, 0xf7, 0x29, 0x77, 0x98, 0xad, 0xef, 0xe7, 0xf5, 0x4b, 0xbb, 0x6d, 0xe9, - 0x56, 0x00, 0x5f, 0x93, 0x9c, 0xfb, 0x92, 0xd2, 0x55, 0x0c, 0xd4, 0x85, 0x82, 0x3f, 0x76, 0xdd, - 0x3e, 0xf3, 0xc3, 0xdb, 0x28, 0x4c, 0xe0, 0x2f, 0xe0, 0x4e, 0xdd, 0xb1, 0xeb, 0x3e, 0x0e, 0x49, - 0xd8, 0xf0, 0xa7, 0x13, 0xf4, 0x29, 0xac, 0x06, 0xd4, 0xe2, 0x54, 0x04, 0x66, 0x41, 0x6d, 0xe9, - 0xcd, 0x79, 0xca, 0x7a, 0x0a, 0x12, 0xe7, 0x05, 0x1c, 0x71, 0x24, 0xdd, 0x52, 0x69, 0x2d, 0x30, - 0x5f, 0x5d, 0x4c, 0xd7, 0x99, 0x6f, 0x4a, 0xd7, 0x1c, 0x19, 0x2e, 0xd2, 0x27, 0x03, 0xf3, 0xba, - 0x72, 0xa7, 0x70, 0x82, 0x9e, 0x02, 0xd8, 0x5e, 0xd0, 0x0f, 0x41, 0xe6, 0x35, 0xb5, 0xc7, 0xf7, - 0xae, 0xde, 0x63, 0x6b, 0xaf, 0xa7, 0xeb, 0x90, 0xe2, 0xf9, 0xd9, 0x46, 0x3e, 0x9e, 0xe2, 0xbc, - 0xed, 0x05, 0xe1, 0x10, 0x35, 0xc1, 0x18, 0x52, 0xe2, 0x8a, 0xa1, 0x35, 0xa4, 0xd6, 0xb1, 0x59, - 0x5a, 0x5c, 0x96, 0xec, 0x2a, 0x98, 0xd6, 0x90, 0x24, 0xa1, 0x0e, 0xe4, 0x9d, 0x80, 0xb9, 0xea, - 0x88, 0x4c, 0x53, 0xe5, 0xb7, 0x17, 0x58, 0x5d, 0x27, 0xa2, 0xe0, 0x29, 0x1b, 0xdd, 0x82, 0xbc, - 0xef, 0xd8, 0xc1, 0x43, 0x67, 0xe4, 0x08, 0x73, 0xbd, 0x9a, 0xde, 0x5c, 0xc6, 0x53, 0x01, 0xda, - 0x85, 0xd5, 0x60, 0x12, 0x58, 0xc2, 0x0d, 0xcc, 0xb2, 0x32, 0x6e, 0xfd, 0xea, 0xcf, 0xf4, 0x42, - 0x42, 0x98, 0x38, 0x22, 0xba, 0xac, 0x78, 0x2c, 0xe2, 0xeb, 0x5e, 0xa0, 0x4f, 0x6c, 0xdb, 0xbc, - 0xa9, 0x0c, 0x5e, 0x9c, 0x4a, 0x1b, 0xb6, 0x8d, 0xde, 0x86, 0x6b, 0x09, 0x98, 0xcd, 0x99, 0x6f, - 0xde, 0x52, 0xb8, 0x04, 0xbb, 0xc5, 0x99, 0x2f, 0x6b, 0x88, 0xb1, 0x2b, 0xd7, 0x18, 0x98, 0xb7, - 0xd5, 0xca, 0x36, 0xaf, 0x5e, 0xd9, 0x13, 0x45, 0xc0, 0x11, 0xb1, 0xfc, 0x31, 0x18, 0x89, 0x24, - 0x27, 0x13, 0xd0, 0x31, 0x9d, 0xe8, 0xbc, 0x29, 0x87, 0xd2, 0x39, 0x4e, 0x64, 0xcc, 0xab, 0xc4, - 0x9e, 0xc7, 0xe1, 0xe4, 0xde, 0xd2, 0x47, 0xe9, 0xf2, 0x36, 0x18, 0x09, 0x87, 0x46, 0x6f, 0xca, - 0x4b, 0x67, 0xe0, 0x04, 0x82, 0x4f, 0xfa, 0x64, 0x2c, 0x86, 0xe6, 0xcf, 0x14, 0xa1, 0x10, 0x09, - 0x1b, 0x63, 0x31, 0x2c, 0xf7, 0x61, 0xea, 0x11, 0xa8, 0x0a, 0x86, 0xcc, 0x83, 0x01, 0xe5, 0x27, - 0x94, 0xcb, 0x12, 0x52, 0x6e, 0x32, 0x29, 0x92, 0x99, 0x2e, 0xa0, 0x84, 0x5b, 0x43, 0x95, 0xb2, - 0xf3, 0x58, 0xcf, 0x64, 0x0e, 0x8e, 0x82, 0x4f, 0xe7, 0x60, 0x3d, 0x2d, 0xdf, 0x83, 0x42, 0xd2, - 0xf8, 0xff, 0xd5, 0x86, 0x5a, 0x90, 0x0d, 0xcd, 0x23, 0xb3, 0xae, 0xca, 0xd8, 0xfa, 0x8e, 0x53, - 0xd9, 0x1a, 0x41, 0x26, 0x60, 0x47, 0x42, 0xd1, 0x96, 0xb1, 0x1a, 0x4b, 0xd9, 0x90, 0xf0, 0xb0, - 0x5b, 0x5a, 0xc6, 0x6a, 0x5c, 0xfb, 0x4b, 0x1a, 0xf2, 0xb1, 0x9b, 0xa1, 0x0f, 0xe0, 0x7a, 0xa7, - 0xf7, 0xf8, 0x61, 0x63, 0xbf, 0xf3, 0x78, 0xaf, 0xdf, 0x6a, 0x7f, 0xd6, 0x78, 0xf2, 0x70, 0xbf, - 0x94, 0x2a, 0xdf, 0x7e, 0x76, 0x5a, 0x5d, 0x9f, 0xde, 0x68, 0x11, 0xbc, 0x45, 0x8f, 0xc8, 0xd8, - 0x15, 0xb3, 0xac, 0x2e, 0x7e, 0xbc, 0xd3, 0xee, 0xf5, 0x4a, 0xe9, 0x45, 0xac, 0x2e, 0x67, 0x16, - 0x0d, 0x02, 0xb4, 0x0d, 0xa5, 0x29, 0x6b, 0xf7, 0x69, 0xb7, 0x8d, 0x0f, 0x4a, 0x4b, 0xe5, 0x5b, - 0xcf, 0x4e, 0xab, 0xe6, 0x65, 0xd2, 0xee, 0xc4, 0xa7, 0xfc, 0x40, 0x37, 0xa3, 0xff, 0x4c, 0x43, - 0x21, 0xd9, 0x01, 0xa0, 0x9d, 0xb0, 0xee, 0x57, 0x06, 0x58, 0xdb, 0xde, 0xba, 0xaa, 0x63, 0x50, - 0x55, 0x84, 0x3b, 0x96, 0x7a, 0x1f, 0x31, 0x9b, 0x62, 0x45, 0x46, 0x1f, 0xc0, 0x8a, 0xcf, 0xb8, - 0x88, 0xee, 0xdb, 0xf9, 0x57, 0x11, 0xe3, 0x51, 0x49, 0x16, 0x82, 0x6b, 0x43, 0x58, 0x9b, 0xd5, - 0x86, 0xee, 0xc0, 0xf2, 0x41, 0xa7, 0x5b, 0x4a, 0x95, 0x6f, 0x3e, 0x3b, 0xad, 0xbe, 0x3e, 0xfb, - 0xe3, 0x81, 0xc3, 0xc5, 0x98, 0xb8, 0x9d, 0x2e, 0x7a, 0x17, 0x56, 0x5a, 0x7b, 0x3d, 0x8c, 0x4b, - 0xe9, 0xf2, 0xc6, 0xb3, 0xd3, 0xea, 0xcd, 0x59, 0x9c, 0xfc, 0x89, 0x8d, 0x3d, 0x1b, 0xb3, 0xc3, - 0xb8, 0x05, 0xff, 0xd7, 0x12, 0x18, 0xba, 0x0c, 0x79, 0xd9, 0xaf, 0x34, 0xc5, 0xb0, 0xa4, 0x8d, - 0xb2, 0xe7, 0xd2, 0x95, 0x95, 0x6d, 0x21, 0x24, 0xe8, 0xc8, 0x78, 0x03, 0x0a, 0x8e, 0x7f, 0xf2, - 0x61, 0x9f, 0x7a, 0xe4, 0xd0, 0xd5, 0xdd, 0x78, 0x0e, 0x1b, 0x52, 0xd6, 0x0e, 0x45, 0xb2, 0xb0, - 0x70, 0x3c, 0x41, 0xb9, 0xa7, 0xfb, 0xec, 0x1c, 0x8e, 0xe7, 0xe8, 0x53, 0xc8, 0x38, 0x3e, 0x19, - 0xe9, 0x72, 0x7c, 0xee, 0x0e, 0x3a, 0xdd, 0xc6, 0x23, 0x1d, 0xb9, 0xcd, 0xdc, 0xf9, 0xd9, 0x46, - 0x46, 0x0a, 0xb0, 0xa2, 0xa1, 0x4a, 0xd4, 0x2b, 0xc9, 0x2f, 0xa9, 0x62, 0x24, 0x87, 0x13, 0x12, - 0x19, 0x7d, 0x8e, 0x37, 0xe0, 0x34, 0x08, 0x54, 0x59, 0x92, 0xc3, 0xd1, 0x14, 0x95, 0x61, 0x55, - 0xd7, 0xd5, 0xaa, 0xc5, 0xca, 0xcb, 0x6e, 0x45, 0x0b, 0x9a, 0x45, 0x30, 0x42, 0x6b, 0xf4, 0x8f, - 0x38, 0x1b, 0xd5, 0xfe, 0x9d, 0x01, 0x63, 0xc7, 0x1d, 0x07, 0x42, 0xd7, 0x6c, 0x2f, 0xcd, 0xf8, - 0x4f, 0xe1, 0x3a, 0x51, 0xaf, 0x3e, 0xc4, 0x93, 0x97, 0xbc, 0x6a, 0x57, 0xf4, 0x01, 0xdc, 0x99, - 0xab, 0x2e, 0x06, 0x87, 0xad, 0x4d, 0x33, 0x2b, 0x75, 0x9a, 0x69, 0x5c, 0x22, 0x17, 0x7e, 0x41, - 0x3d, 0x28, 0x32, 0x6e, 0x0d, 0x69, 0x20, 0xc2, 0xd2, 0x40, 0xbf, 0x92, 0xcc, 0x7d, 0x3f, 0x7b, - 0x9c, 0x04, 0xea, 0x1b, 0x31, 0x5c, 0xed, 0xac, 0x0e, 0xf4, 0x11, 0x64, 0x38, 0x39, 0x8a, 0x5a, - 0xaf, 0xb9, 0x41, 0x82, 0xc9, 0x91, 0x98, 0x51, 0xa1, 0x18, 0xe8, 0x73, 0x00, 0xdb, 0x09, 0x7c, - 0x22, 0xac, 0x21, 0xe5, 0xfa, 0xb0, 0xe7, 0x6e, 0xb1, 0x15, 0xa3, 0x66, 0xb4, 0x24, 0xd8, 0xe8, - 0x01, 0xe4, 0x2d, 0x12, 0xb9, 0x6b, 0x76, 0xf1, 0xd3, 0xd1, 0x4e, 0x43, 0xab, 0x28, 0x49, 0x15, - 0xe7, 0x67, 0x1b, 0xb9, 0x48, 0x82, 0x73, 0x16, 0xd1, 0xee, 0xfb, 0x00, 0x8a, 0x82, 0x04, 0xc7, - 0x7d, 0x3b, 0x4c, 0x67, 0xa1, 0x9b, 0x2c, 0xb8, 0xe1, 0x65, 0x87, 0xae, 0xd3, 0x5e, 0x74, 0x9c, - 0x05, 0x91, 0x90, 0xa1, 0x9f, 0xc3, 0x75, 0xea, 0x59, 0x7c, 0xa2, 0x9c, 0x35, 0x5a, 0x61, 0x6e, - 0xf1, 0x66, 0xdb, 0x31, 0x78, 0x66, 0xb3, 0x25, 0x7a, 0x41, 0x5e, 0xfb, 0x7b, 0x1a, 0x20, 0x2c, - 0xa9, 0x5e, 0xae, 0x03, 0x22, 0xc8, 0xd8, 0x44, 0x10, 0xe5, 0x73, 0x05, 0xac, 0xc6, 0xe8, 0x1e, - 0x80, 0xa0, 0x23, 0x5f, 0xa6, 0x5e, 0x6f, 0xa0, 0xdd, 0xe6, 0x79, 0xe9, 0x20, 0x81, 0x46, 0xdb, - 0x90, 0xd5, 0x0d, 0x72, 0xe6, 0x4a, 0x9e, 0x46, 0xd6, 0xfe, 0x98, 0x06, 0x08, 0xb7, 0xf9, 0x7f, - 0xbd, 0xb7, 0xda, 0xdf, 0x56, 0x00, 0x0e, 0x98, 0x3b, 0x1e, 0xbd, 0xe4, 0x47, 0xd0, 0x1b, 0xb0, - 0xa2, 0x9a, 0xa2, 0xe8, 0x92, 0x57, 0x93, 0x84, 0x25, 0x97, 0x5f, 0xd4, 0x92, 0xa8, 0x0d, 0x86, - 0xcc, 0x03, 0x41, 0xd0, 0x57, 0x17, 0x62, 0x66, 0xb1, 0xe3, 0x85, 0xfb, 0x68, 0x28, 0xb0, 0xba, - 0x05, 0x81, 0xc4, 0x63, 0x74, 0x6f, 0x5a, 0xe1, 0xaf, 0xa8, 0xdb, 0xb0, 0xba, 0x58, 0x85, 0xae, - 0xf3, 0xe3, 0xf2, 0x9e, 0xc2, 0x7a, 0xa8, 0xd5, 0xd1, 0x4f, 0xe7, 0x89, 0x77, 0x1c, 0x1d, 0xab, - 0x73, 0x53, 0xd0, 0x3e, 0xf3, 0x99, 0xcb, 0x06, 0x49, 0x3c, 0x5e, 0xac, 0x09, 0xed, 0x86, 0xe5, - 0xa9, 0x25, 0xab, 0x4e, 0x4e, 0xbc, 0x01, 0xd5, 0x61, 0x3b, 0xff, 0x69, 0x4b, 0x23, 0xb1, 0x04, - 0x86, 0x15, 0x6c, 0x3c, 0x45, 0x4f, 0x2e, 0xfc, 0x37, 0x90, 0x53, 0x55, 0xc4, 0xfb, 0xcf, 0xd9, - 0xb1, 0xac, 0x21, 0xb4, 0xfd, 0x16, 0xff, 0x47, 0xf0, 0xfb, 0x34, 0xa0, 0xcb, 0x20, 0xb4, 0x99, - 0x78, 0xc3, 0x57, 0xc5, 0xce, 0x65, 0x8c, 0x7e, 0xc5, 0xbf, 0x3b, 0x7d, 0xc5, 0x57, 0xa5, 0xc4, - 0x65, 0x60, 0xf8, 0x8e, 0x7f, 0x77, 0xfa, 0x8e, 0xbf, 0x00, 0x97, 0x78, 0xc9, 0x6f, 0xde, 0xf9, - 0xfa, 0xbb, 0x4a, 0xea, 0xdb, 0xef, 0x2a, 0xa9, 0xdf, 0x9c, 0x57, 0xd2, 0x5f, 0x9f, 0x57, 0xd2, - 0xdf, 0x9c, 0x57, 0xd2, 0xff, 0x38, 0xaf, 0xa4, 0x7f, 0xf7, 0x7d, 0x25, 0xf5, 0xcd, 0xf7, 0x95, - 0xd4, 0xb7, 0xdf, 0x57, 0x52, 0x87, 0x59, 0xd5, 0x58, 0xfe, 0xf0, 0x3f, 0x01, 0x00, 0x00, 0xff, - 0xff, 0xd2, 0x36, 0x0b, 0x87, 0xf5, 0x1a, 0x00, 0x00, + 0xf5, 0x27, 0x25, 0x8a, 0x22, 0xdf, 0x92, 0x32, 0x8d, 0x38, 0xc9, 0x8a, 0xb6, 0x29, 0x86, 0x71, + 0x1c, 0x25, 0x99, 0x3f, 0x35, 0xd1, 0x3f, 0x93, 0x26, 0x4e, 0xd3, 0x96, 0x14, 0x19, 0x8b, 0xb1, + 0x2d, 0x73, 0x40, 0x59, 0xad, 0x67, 0x3a, 0xc3, 0x81, 0x76, 0x21, 0x72, 0xa3, 0xe5, 0x62, 0x8b, + 0x05, 0x95, 0xf0, 0xd6, 0x63, 0xc6, 0xbd, 0xf4, 0xd0, 0xab, 0x4e, 0x9d, 0x9e, 0x7a, 0x69, 0x3f, + 0x42, 0x6f, 0x39, 0xe6, 0x98, 0x5e, 0x34, 0x8d, 0xd2, 0x6f, 0xd0, 0x5b, 0x2f, 0xed, 0x00, 0x8b, + 0x5d, 0x2e, 0x25, 0xd2, 0x72, 0xa7, 0x3e, 0xf4, 0x06, 0x3c, 0xfe, 0x7e, 0x6f, 0x81, 0x87, 0xf7, + 0x1e, 0xde, 0x03, 0xe1, 0xdd, 0x81, 0x23, 0x86, 0xe3, 0xc3, 0xba, 0xc5, 0x46, 0x5b, 0x36, 0xb3, + 0x8e, 0x29, 0xdf, 0x0a, 0xbe, 0x24, 0x7c, 0x74, 0xec, 0x88, 0x2d, 0xe2, 0x3b, 0x5b, 0x81, 0x4f, + 0xad, 0xa0, 0xee, 0x73, 0x26, 0x18, 0x42, 0x21, 0xa0, 0x1e, 0x01, 0xea, 0x27, 0xef, 0x97, 0xaf, + 0xe2, 0x8b, 0x89, 0x4f, 0x35, 0xbf, 0x7c, 0x63, 0xc0, 0x06, 0x4c, 0x0d, 0xb7, 0xe4, 0x48, 0x4b, + 0x2b, 0x03, 0xc6, 0x06, 0x2e, 0xdd, 0x52, 0xb3, 0xc3, 0xf1, 0xd1, 0x96, 0x3d, 0xe6, 0x44, 0x38, + 0xcc, 0xd3, 0xbf, 0xaf, 0x5f, 0xfc, 0x9d, 0x78, 0x93, 0x45, 0xd4, 0x2f, 0x39, 0xf1, 0x7d, 0xca, + 0xf5, 0x07, 0x6b, 0xa7, 0x19, 0xc8, 0xed, 0x31, 0x9b, 0xf6, 0x7c, 0x6a, 0xa1, 0xfb, 0x60, 0x10, + 0xcf, 0x63, 0x42, 0xe9, 0x0e, 0xcc, 0x74, 0x35, 0xbd, 0x69, 0x6c, 0x6f, 0xd4, 0x2f, 0xef, 0xa9, + 0xde, 0x98, 0xc2, 0x9a, 0x99, 0x6f, 0xce, 0x36, 0x52, 0x38, 0xc9, 0x44, 0x3f, 0x85, 0x82, 0x4d, + 0x03, 0x87, 0x53, 0xbb, 0xcf, 0x99, 0x4b, 0xcd, 0xa5, 0x6a, 0x7a, 0x73, 0x6d, 0xfb, 0xd6, 0x3c, + 0x4d, 0xf2, 0xe3, 0x98, 0xb9, 0x14, 0x1b, 0x9a, 0x21, 0x27, 0xe8, 0x3e, 0xc0, 0x88, 0x8e, 0x0e, + 0x29, 0x0f, 0x86, 0x8e, 0x6f, 0x2e, 0x2b, 0xfa, 0xdb, 0x8b, 0xe8, 0x72, 0xed, 0xf5, 0x47, 0x31, + 0x1c, 0x27, 0xa8, 0xe8, 0x11, 0x14, 0xc8, 0x09, 0x71, 0x5c, 0x72, 0xe8, 0xb8, 0x8e, 0x98, 0x98, + 0x19, 0xa5, 0xea, 0x9d, 0xe7, 0xaa, 0x6a, 0x24, 0x08, 0x78, 0x86, 0x5e, 0xb3, 0x01, 0xa6, 0x1f, + 0x42, 0x77, 0x61, 0xb5, 0xdb, 0xde, 0x6b, 0x75, 0xf6, 0xee, 0x97, 0x52, 0xe5, 0xf5, 0x67, 0xa7, + 0xd5, 0x57, 0xa5, 0x8e, 0x29, 0xa0, 0x4b, 0x3d, 0xdb, 0xf1, 0x06, 0x68, 0x13, 0x72, 0x8d, 0x9d, + 0x9d, 0x76, 0x77, 0xbf, 0xdd, 0x2a, 0xa5, 0xcb, 0xe5, 0x67, 0xa7, 0xd5, 0xd7, 0x66, 0x81, 0x0d, + 0xcb, 0xa2, 0xbe, 0xa0, 0x76, 0x39, 0xf3, 0xf5, 0xef, 0x2b, 0xa9, 0xda, 0xd7, 0x69, 0x28, 0x24, + 0x17, 0x81, 0xee, 0x42, 0xb6, 0xb1, 0xb3, 0xdf, 0x39, 0x68, 0x97, 0x52, 0x53, 0x7a, 0x12, 0xd1, + 0xb0, 0x84, 0x73, 0x42, 0xd1, 0x1d, 0x58, 0xe9, 0x36, 0x9e, 0xf4, 0xda, 0xa5, 0xf4, 0x74, 0x39, + 0x49, 0x58, 0x97, 0x8c, 0x03, 0x85, 0x6a, 0xe1, 0x46, 0x67, 0xaf, 0xb4, 0x34, 0x1f, 0xd5, 0xe2, + 0xc4, 0xf1, 0xf4, 0x52, 0xfe, 0xb8, 0x02, 0x46, 0x8f, 0xf2, 0x13, 0xc7, 0x7a, 0xc9, 0x2e, 0xf2, + 0x21, 0x64, 0x04, 0x09, 0x8e, 0x95, 0x6b, 0x18, 0xf3, 0x5d, 0x63, 0x9f, 0x04, 0xc7, 0xf2, 0xa3, + 0x9a, 0xae, 0xf0, 0xd2, 0x33, 0x38, 0xf5, 0x5d, 0xc7, 0x22, 0x82, 0xda, 0xca, 0x33, 0x8c, 0xed, + 0xb7, 0xe6, 0xb1, 0x71, 0x8c, 0xd2, 0xeb, 0xdf, 0x4d, 0xe1, 0x04, 0x15, 0x7d, 0x02, 0xd9, 0x81, + 0xcb, 0x0e, 0x89, 0xab, 0x7c, 0xc2, 0xd8, 0x7e, 0x63, 0x9e, 0x92, 0xfb, 0x0a, 0x31, 0x55, 0xa0, + 0x29, 0xe8, 0x73, 0x58, 0x9b, 0xaa, 0xea, 0x7f, 0xc1, 0x0e, 0x4d, 0x58, 0xac, 0x64, 0xba, 0x92, + 0xcf, 0xd9, 0xe1, 0x6e, 0x0a, 0x17, 0x79, 0x52, 0x80, 0x7e, 0x02, 0x10, 0x6a, 0x55, 0x7a, 0x0c, + 0xa5, 0xe7, 0xf6, 0xe2, 0xc5, 0x84, 0x3a, 0xf2, 0x83, 0x68, 0x82, 0x3e, 0x82, 0xec, 0xd8, 0xb7, + 0x89, 0xa0, 0x66, 0x56, 0x71, 0xab, 0xf3, 0xb8, 0x4f, 0x14, 0x62, 0x87, 0x79, 0x47, 0xce, 0x00, + 0x6b, 0x3c, 0xfa, 0x31, 0xe4, 0x38, 0x73, 0xdd, 0x43, 0x62, 0x1d, 0x9b, 0xf9, 0x17, 0xe4, 0xc6, + 0x0c, 0xf4, 0x00, 0x72, 0x1e, 0x15, 0x5f, 0x32, 0x7e, 0x1c, 0x98, 0xab, 0xd5, 0xe5, 0x4d, 0x63, + 0xfb, 0xbd, 0xb9, 0x61, 0x15, 0x62, 0x1a, 0x42, 0x10, 0x6b, 0x38, 0xa2, 0x9e, 0x08, 0x15, 0x35, + 0x97, 0xcc, 0x34, 0x8e, 0x15, 0xc8, 0xa5, 0x50, 0xcf, 0xf6, 0x99, 0xe3, 0x09, 0x33, 0xb7, 0x78, + 0x29, 0x6d, 0x8d, 0x91, 0x6e, 0x81, 0x63, 0x46, 0x33, 0x0b, 0x99, 0x11, 0xb3, 0x69, 0x6d, 0x0b, + 0xae, 0x5f, 0x3a, 0x76, 0x54, 0x86, 0x9c, 0x36, 0x78, 0xe8, 0xaf, 0x19, 0x1c, 0xcf, 0x6b, 0xd7, + 0xa0, 0x38, 0x73, 0xc4, 0x35, 0x0b, 0x8a, 0x33, 0xc7, 0x85, 0xde, 0x82, 0xb5, 0x11, 0xf9, 0xaa, + 0x6f, 0x31, 0xcf, 0x1a, 0x73, 0x4e, 0x3d, 0xa1, 0x75, 0x14, 0x47, 0xe4, 0xab, 0x9d, 0x58, 0x88, + 0xde, 0x83, 0xeb, 0x82, 0x09, 0xe2, 0xf6, 0x2d, 0x36, 0xf2, 0x5d, 0x1a, 0x46, 0xc7, 0x92, 0x42, + 0x96, 0xd4, 0x0f, 0x3b, 0x53, 0x79, 0xcd, 0x80, 0x7c, 0x7c, 0x96, 0xb5, 0x3f, 0xad, 0x40, 0x2e, + 0xf2, 0x74, 0xf4, 0x00, 0x80, 0xc4, 0x86, 0xd2, 0x86, 0x78, 0xe7, 0x85, 0xac, 0x2a, 0xe9, 0xd2, + 0xc3, 0xa7, 0x74, 0xd4, 0x80, 0xbc, 0xc5, 0x3c, 0x41, 0x1c, 0x8f, 0x72, 0x1d, 0xa9, 0x73, 0xfd, + 0x73, 0x27, 0x02, 0x69, 0x1d, 0x53, 0x16, 0x6a, 0xc2, 0xea, 0x80, 0x7a, 0x94, 0x3b, 0x96, 0x76, + 0xf0, 0xbb, 0x73, 0x1d, 0x33, 0x84, 0xe0, 0xb1, 0x27, 0x9c, 0x11, 0xd5, 0x5a, 0x22, 0x22, 0xfa, + 0x0c, 0xf2, 0x9c, 0x06, 0x6c, 0xcc, 0x2d, 0x1a, 0xe8, 0x70, 0xdf, 0x9c, 0x1f, 0x26, 0x21, 0x08, + 0xd3, 0x5f, 0x8d, 0x1d, 0x4e, 0xe5, 0x16, 0x02, 0x3c, 0xa5, 0xa2, 0x4f, 0x60, 0x95, 0xd3, 0x40, + 0x10, 0x2e, 0x9e, 0x17, 0xb1, 0x38, 0x84, 0x74, 0x99, 0xeb, 0x58, 0x13, 0x1c, 0x31, 0xd0, 0x27, + 0x90, 0xf7, 0x5d, 0x62, 0x29, 0xad, 0xe6, 0xca, 0xe2, 0x18, 0xeb, 0x46, 0x20, 0x3c, 0xc5, 0xa3, + 0x8f, 0x01, 0x5c, 0x36, 0xe8, 0xdb, 0xdc, 0x39, 0xa1, 0x5c, 0x47, 0x59, 0x79, 0x1e, 0xbb, 0xa5, + 0x10, 0x38, 0xef, 0xb2, 0x41, 0x38, 0x44, 0xf7, 0xff, 0xab, 0x20, 0x49, 0x04, 0xc8, 0x1b, 0x50, + 0x38, 0x62, 0xdc, 0xa2, 0x7d, 0x1d, 0xeb, 0x79, 0xe5, 0x5b, 0x86, 0x92, 0x85, 0x01, 0x8a, 0x7e, + 0x09, 0xaf, 0x44, 0xd6, 0xea, 0x73, 0x7a, 0x44, 0x39, 0xf5, 0xa4, 0xc9, 0x0d, 0xf5, 0xd9, 0xb7, + 0x9e, 0x6f, 0x72, 0x8d, 0xd6, 0xa9, 0x16, 0xf1, 0x8b, 0x3f, 0x04, 0xcd, 0x3c, 0xac, 0xf2, 0xf0, + 0x80, 0x6b, 0xbf, 0x49, 0xcb, 0x38, 0xbb, 0x80, 0x40, 0x5b, 0x60, 0xc4, 0x9f, 0x77, 0x6c, 0xe5, + 0x70, 0xf9, 0xe6, 0xda, 0xf9, 0xd9, 0x06, 0x44, 0xd8, 0x4e, 0x4b, 0x66, 0x60, 0x3d, 0xb6, 0x51, + 0x1b, 0x8a, 0x31, 0x41, 0x16, 0x41, 0xba, 0x4c, 0xa8, 0x3e, 0x6f, 0xa5, 0xfb, 0x13, 0x9f, 0xe2, + 0x02, 0x4f, 0xcc, 0x6a, 0xbf, 0x00, 0x74, 0xd9, 0x01, 0x11, 0x82, 0xcc, 0xb1, 0xe3, 0xe9, 0x65, + 0x60, 0x35, 0x46, 0x75, 0x58, 0xf5, 0xc9, 0xc4, 0x65, 0xc4, 0xd6, 0x7e, 0x78, 0xa3, 0x1e, 0x96, + 0x47, 0xf5, 0xa8, 0x3c, 0xaa, 0x37, 0xbc, 0x09, 0x8e, 0x40, 0xb5, 0x07, 0xf0, 0xea, 0xdc, 0x38, + 0x43, 0xdb, 0x50, 0x88, 0x63, 0x64, 0xba, 0xd7, 0x6b, 0xe7, 0x67, 0x1b, 0x46, 0x1c, 0x4c, 0x9d, + 0x16, 0x36, 0x62, 0x50, 0xc7, 0xae, 0xfd, 0x7d, 0x0d, 0x8a, 0x33, 0x91, 0x86, 0x6e, 0xc0, 0x8a, + 0x33, 0x22, 0x03, 0xaa, 0xd7, 0x18, 0x4e, 0x50, 0x1b, 0xb2, 0x2e, 0x39, 0xa4, 0xae, 0x8c, 0x15, + 0x79, 0x70, 0xff, 0x77, 0x65, 0xc8, 0xd6, 0x1f, 0x2a, 0x7c, 0xdb, 0x13, 0x7c, 0x82, 0x35, 0x19, + 0x99, 0xb0, 0x6a, 0xb1, 0xd1, 0x88, 0x78, 0xf2, 0x92, 0x5c, 0xde, 0xcc, 0xe3, 0x68, 0x2a, 0x2d, + 0x43, 0xf8, 0x20, 0x30, 0x33, 0x4a, 0xac, 0xc6, 0x32, 0x47, 0x0e, 0x59, 0x20, 0x3c, 0x32, 0xa2, + 0xe6, 0x9a, 0x5a, 0x4d, 0x3c, 0x47, 0x25, 0x58, 0xa6, 0xde, 0x89, 0xb9, 0xa2, 0xe0, 0x72, 0x28, + 0x25, 0xb6, 0x13, 0x06, 0x42, 0x1e, 0xcb, 0xa1, 0xd4, 0x39, 0x0e, 0x28, 0x37, 0x57, 0x43, 0x6b, + 0xcb, 0x31, 0x7a, 0x0d, 0xb2, 0x03, 0xce, 0xc6, 0x7e, 0xe8, 0x81, 0x79, 0xac, 0x67, 0xf2, 0xbe, + 0xf3, 0xb9, 0x73, 0xe2, 0xb8, 0x74, 0x40, 0x03, 0xf3, 0x35, 0x75, 0x10, 0x95, 0xb9, 0xb1, 0x18, + 0xa3, 0x70, 0x82, 0x81, 0xea, 0x90, 0x71, 0x3c, 0x47, 0x98, 0xaf, 0xeb, 0x38, 0xbc, 0x78, 0x84, + 0x4d, 0xc6, 0xdc, 0x03, 0xe2, 0x8e, 0x29, 0x56, 0x38, 0xb4, 0x0e, 0xcb, 0x42, 0x4c, 0xcc, 0x62, + 0x35, 0xbd, 0x99, 0x6b, 0xae, 0x9e, 0x9f, 0x6d, 0x2c, 0xef, 0xef, 0x3f, 0xc5, 0x52, 0x86, 0x6e, + 0x03, 0x30, 0x9f, 0x7a, 0xfd, 0x40, 0xd8, 0x8e, 0x67, 0x22, 0x89, 0xc0, 0x79, 0x29, 0xe9, 0x49, + 0x01, 0xba, 0x29, 0x33, 0x17, 0xb1, 0xfb, 0xcc, 0x73, 0x27, 0xe6, 0x2b, 0xea, 0xd7, 0x9c, 0x14, + 0x3c, 0xf6, 0xdc, 0x09, 0xda, 0x00, 0x23, 0x10, 0xcc, 0xef, 0x07, 0xce, 0xc0, 0x23, 0xae, 0x79, + 0x43, 0xed, 0x1c, 0xa4, 0xa8, 0xa7, 0x24, 0xe8, 0x47, 0x90, 0x1d, 0xb1, 0xb1, 0x27, 0x02, 0x33, + 0xa7, 0x0e, 0x72, 0x7d, 0xde, 0x1e, 0x1f, 0x49, 0x84, 0x8e, 0x3a, 0x0d, 0x47, 0x6d, 0xb8, 0xae, + 0x34, 0x0f, 0x38, 0xb1, 0x68, 0xdf, 0xa7, 0xdc, 0x61, 0xb6, 0xbe, 0x9f, 0xd7, 0x2f, 0xed, 0xb6, + 0xa5, 0x5b, 0x01, 0x7c, 0x4d, 0x72, 0xee, 0x4b, 0x4a, 0x57, 0x31, 0x50, 0x17, 0x0a, 0xfe, 0xd8, + 0x75, 0xfb, 0xcc, 0x0f, 0x6f, 0xa3, 0x30, 0x81, 0xbf, 0x80, 0x3b, 0x75, 0xc7, 0xae, 0xfb, 0x38, + 0x24, 0x61, 0xc3, 0x9f, 0x4e, 0xd0, 0xa7, 0xb0, 0x1a, 0x50, 0x8b, 0x53, 0x11, 0x98, 0x05, 0xb5, + 0xa5, 0x37, 0xe7, 0x29, 0xeb, 0x29, 0x48, 0x9c, 0x17, 0x70, 0xc4, 0x91, 0x74, 0x4b, 0xa5, 0xb5, + 0xc0, 0x7c, 0x75, 0x31, 0x5d, 0x67, 0xbe, 0x29, 0x5d, 0x73, 0x64, 0xb8, 0x48, 0x9f, 0x0c, 0xcc, + 0xeb, 0xca, 0x9d, 0xc2, 0x09, 0x7a, 0x0a, 0x60, 0x7b, 0x41, 0x3f, 0x04, 0x99, 0xd7, 0xd4, 0x1e, + 0xdf, 0xbb, 0x7a, 0x8f, 0xad, 0xbd, 0x9e, 0xae, 0x43, 0x8a, 0xe7, 0x67, 0x1b, 0xf9, 0x78, 0x8a, + 0xf3, 0xb6, 0x17, 0x84, 0x43, 0xd4, 0x04, 0x63, 0x48, 0x89, 0x2b, 0x86, 0xd6, 0x90, 0x5a, 0xc7, + 0x66, 0x69, 0x71, 0x59, 0xb2, 0xab, 0x60, 0x5a, 0x43, 0x92, 0x84, 0x3a, 0x90, 0x77, 0x02, 0xe6, + 0xaa, 0x23, 0x32, 0x4d, 0x95, 0xdf, 0x5e, 0x60, 0x75, 0x9d, 0x88, 0x82, 0xa7, 0x6c, 0x74, 0x0b, + 0xf2, 0xbe, 0x63, 0x07, 0x0f, 0x9d, 0x91, 0x23, 0xcc, 0xf5, 0x6a, 0x7a, 0x73, 0x19, 0x4f, 0x05, + 0x68, 0x17, 0x56, 0x83, 0x49, 0x60, 0x09, 0x37, 0x30, 0xcb, 0xca, 0xb8, 0xf5, 0xab, 0x3f, 0xd3, + 0x0b, 0x09, 0x61, 0xe2, 0x88, 0xe8, 0xb2, 0xe2, 0xb1, 0x88, 0xaf, 0x7b, 0x81, 0x3e, 0xb1, 0x6d, + 0xf3, 0xa6, 0x32, 0x78, 0x71, 0x2a, 0x6d, 0xd8, 0x36, 0x7a, 0x1b, 0xae, 0x25, 0x60, 0x36, 0x67, + 0xbe, 0x79, 0x4b, 0xe1, 0x12, 0xec, 0x16, 0x67, 0xbe, 0xac, 0x21, 0xc6, 0xae, 0x5c, 0x63, 0x60, + 0xde, 0x56, 0x2b, 0xdb, 0xbc, 0x7a, 0x65, 0x4f, 0x14, 0x01, 0x47, 0x44, 0x54, 0x83, 0x22, 0x63, + 0xa3, 0x7e, 0x60, 0x31, 0x4e, 0xfb, 0xc4, 0xfe, 0xc2, 0xac, 0xa8, 0xfd, 0x1b, 0x8c, 0x8d, 0x7a, + 0x52, 0xd6, 0xb0, 0xbf, 0x28, 0x7f, 0x0c, 0x46, 0x22, 0x11, 0xca, 0x24, 0x75, 0x4c, 0x27, 0x3a, + 0xb7, 0xca, 0xa1, 0x74, 0xa0, 0x13, 0x99, 0x17, 0x54, 0xf2, 0xcf, 0xe3, 0x70, 0x72, 0x6f, 0xe9, + 0xa3, 0x74, 0x79, 0x1b, 0x8c, 0x84, 0xd3, 0xa3, 0x37, 0xe5, 0xc5, 0x34, 0x70, 0x02, 0xc1, 0x27, + 0x7d, 0x32, 0x16, 0x43, 0xf3, 0x67, 0x8a, 0x50, 0x88, 0x84, 0x8d, 0xb1, 0x18, 0x96, 0xfb, 0x30, + 0xf5, 0x1a, 0x54, 0x05, 0x43, 0xe6, 0xca, 0x80, 0xf2, 0x13, 0xca, 0x65, 0x99, 0x29, 0x0d, 0x91, + 0x14, 0xc9, 0x6c, 0x18, 0x50, 0xc2, 0xad, 0xa1, 0x4a, 0xeb, 0x79, 0xac, 0x67, 0x32, 0x4f, 0x47, + 0x01, 0xaa, 0xf3, 0xb4, 0x9e, 0x96, 0xef, 0x41, 0x21, 0x79, 0x40, 0xff, 0xd1, 0x86, 0x5a, 0x90, + 0x0d, 0x4d, 0x28, 0x33, 0xb3, 0xca, 0xea, 0xfa, 0x1e, 0x54, 0x19, 0x1d, 0x41, 0x26, 0x60, 0x47, + 0x42, 0xd1, 0x96, 0xb1, 0x1a, 0x4b, 0xd9, 0x90, 0xf0, 0xb0, 0xa3, 0x5a, 0xc6, 0x6a, 0x5c, 0xfb, + 0x73, 0x1a, 0xf2, 0xb1, 0x2b, 0xa2, 0x0f, 0xe0, 0x7a, 0xa7, 0xf7, 0xf8, 0x61, 0x63, 0xbf, 0xf3, + 0x78, 0xaf, 0xdf, 0x6a, 0x7f, 0xd6, 0x78, 0xf2, 0x70, 0xbf, 0x94, 0x2a, 0xdf, 0x7e, 0x76, 0x5a, + 0x5d, 0x9f, 0xde, 0x7a, 0x11, 0xbc, 0x45, 0x8f, 0xc8, 0xd8, 0x15, 0xb3, 0xac, 0x2e, 0x7e, 0xbc, + 0xd3, 0xee, 0xf5, 0x4a, 0xe9, 0x45, 0xac, 0x2e, 0x67, 0x16, 0x0d, 0x02, 0xb4, 0x0d, 0xa5, 0x29, + 0x6b, 0xf7, 0x69, 0xb7, 0x8d, 0x0f, 0x4a, 0x4b, 0xe5, 0x5b, 0xcf, 0x4e, 0xab, 0xe6, 0x65, 0xd2, + 0xee, 0xc4, 0xa7, 0xfc, 0x40, 0x37, 0xac, 0xff, 0x48, 0x43, 0x21, 0xd9, 0x25, 0xa0, 0x9d, 0xb0, + 0x37, 0x50, 0x06, 0x58, 0xdb, 0xde, 0xba, 0xaa, 0xab, 0x50, 0x95, 0x86, 0x3b, 0x96, 0x7a, 0x1f, + 0x31, 0x9b, 0x62, 0x45, 0x46, 0x1f, 0xc0, 0x8a, 0xcf, 0xb8, 0x88, 0xee, 0xe4, 0xf9, 0xd7, 0x15, + 0xe3, 0x51, 0xd9, 0x16, 0x82, 0x6b, 0x43, 0x58, 0x9b, 0xd5, 0x86, 0xee, 0xc0, 0xf2, 0x41, 0xa7, + 0x5b, 0x4a, 0x95, 0x6f, 0x3e, 0x3b, 0xad, 0xbe, 0x3e, 0xfb, 0xe3, 0x81, 0xc3, 0xc5, 0x98, 0xb8, + 0x9d, 0x2e, 0x7a, 0x17, 0x56, 0x5a, 0x7b, 0x3d, 0x8c, 0x4b, 0xe9, 0xf2, 0xc6, 0xb3, 0xd3, 0xea, + 0xcd, 0x59, 0x9c, 0xfc, 0x89, 0x8d, 0x3d, 0x1b, 0xb3, 0xc3, 0xb8, 0x4d, 0xff, 0xe7, 0x12, 0x18, + 0xba, 0x54, 0x79, 0xd9, 0x2f, 0x39, 0xc5, 0xb0, 0xec, 0x8d, 0x32, 0xec, 0xd2, 0x95, 0xd5, 0x6f, + 0x21, 0x24, 0xe8, 0xc8, 0x78, 0x03, 0x0a, 0x8e, 0x7f, 0xf2, 0x61, 0x9f, 0x7a, 0xe4, 0xd0, 0xd5, + 0x1d, 0x7b, 0x0e, 0x1b, 0x52, 0xd6, 0x0e, 0x45, 0xb2, 0xf8, 0x70, 0x3c, 0x41, 0xb9, 0xa7, 0x7b, + 0xf1, 0x1c, 0x8e, 0xe7, 0xe8, 0x53, 0xc8, 0x38, 0x3e, 0x19, 0xe9, 0x92, 0x7d, 0xee, 0x0e, 0x3a, + 0xdd, 0xc6, 0x23, 0x1d, 0xb9, 0xcd, 0xdc, 0xf9, 0xd9, 0x46, 0x46, 0x0a, 0xb0, 0xa2, 0xa1, 0x4a, + 0xd4, 0x4f, 0xc9, 0x2f, 0xa9, 0x82, 0x25, 0x87, 0x13, 0x12, 0x19, 0x7d, 0x8e, 0x37, 0xe0, 0x34, + 0x08, 0x54, 0xe9, 0x92, 0xc3, 0xd1, 0x14, 0x95, 0x61, 0x55, 0xd7, 0xde, 0xaa, 0x0d, 0xcb, 0xcb, + 0x8e, 0x46, 0x0b, 0x9a, 0x45, 0x30, 0x42, 0x6b, 0xf4, 0x8f, 0x38, 0x1b, 0xd5, 0xfe, 0x95, 0x01, + 0x63, 0xc7, 0x1d, 0x07, 0x42, 0xd7, 0x75, 0x2f, 0xcd, 0xf8, 0x4f, 0xe1, 0x3a, 0x51, 0x2f, 0x43, + 0xc4, 0x93, 0x85, 0x80, 0x6a, 0x69, 0xf4, 0x01, 0xdc, 0x99, 0xab, 0x2e, 0x06, 0x87, 0xed, 0x4f, + 0x33, 0x2b, 0x75, 0x9a, 0x69, 0x5c, 0x22, 0x17, 0x7e, 0x41, 0x3d, 0x28, 0x32, 0x6e, 0x0d, 0x69, + 0x20, 0xc2, 0xf2, 0x41, 0xbf, 0xa4, 0xcc, 0x7d, 0x63, 0x7b, 0x9c, 0x04, 0xea, 0x5b, 0x33, 0x5c, + 0xed, 0xac, 0x0e, 0xf4, 0x11, 0x64, 0x38, 0x39, 0x8a, 0xda, 0xb3, 0xb9, 0x41, 0x82, 0xc9, 0x91, + 0x98, 0x51, 0xa1, 0x18, 0xe8, 0x73, 0x00, 0xdb, 0x09, 0x7c, 0x22, 0xac, 0x21, 0xe5, 0xfa, 0xb0, + 0xe7, 0x6e, 0xb1, 0x15, 0xa3, 0x66, 0xb4, 0x24, 0xd8, 0xe8, 0x01, 0xe4, 0x2d, 0x12, 0xb9, 0x6b, + 0x76, 0xf1, 0xf3, 0xd2, 0x4e, 0x43, 0xab, 0x28, 0x49, 0x15, 0xe7, 0x67, 0x1b, 0xb9, 0x48, 0x82, + 0x73, 0x16, 0xd1, 0xee, 0xfb, 0x00, 0x8a, 0x82, 0x04, 0xc7, 0x7d, 0x3b, 0x4c, 0x67, 0xa1, 0x9b, + 0x2c, 0xa8, 0x02, 0x64, 0x17, 0xaf, 0xd3, 0x5e, 0x74, 0x9c, 0x05, 0x91, 0x90, 0xa1, 0x9f, 0xc3, + 0x75, 0xea, 0x59, 0x7c, 0xa2, 0x9c, 0x35, 0x5a, 0x61, 0x6e, 0xf1, 0x66, 0xdb, 0x31, 0x78, 0x66, + 0xb3, 0x25, 0x7a, 0x41, 0x5e, 0xfb, 0x6b, 0x1a, 0x20, 0x2c, 0xbb, 0x5e, 0xae, 0x03, 0x22, 0xc8, + 0xd8, 0x44, 0x10, 0xe5, 0x73, 0x05, 0xac, 0xc6, 0xe8, 0x1e, 0x80, 0xa0, 0x23, 0x5f, 0xa6, 0x5e, + 0x6f, 0xa0, 0xdd, 0xe6, 0x79, 0xe9, 0x20, 0x81, 0x46, 0xdb, 0x90, 0xd5, 0x4d, 0x74, 0xe6, 0x4a, + 0x9e, 0x46, 0xd6, 0xfe, 0x90, 0x06, 0x08, 0xb7, 0xf9, 0x3f, 0xbd, 0xb7, 0xda, 0x5f, 0x56, 0x00, + 0x0e, 0x98, 0x3b, 0x1e, 0xbd, 0xe4, 0x87, 0xd2, 0x1b, 0xb0, 0xa2, 0x1a, 0xa7, 0xe8, 0x92, 0x57, + 0x93, 0x84, 0x25, 0x97, 0x5f, 0xd4, 0x92, 0xa8, 0x0d, 0x86, 0xcc, 0x03, 0x41, 0xd0, 0x57, 0x17, + 0x62, 0x66, 0xb1, 0xe3, 0x85, 0xfb, 0x68, 0x28, 0xb0, 0xba, 0x05, 0x81, 0xc4, 0x63, 0x74, 0x6f, + 0xda, 0x05, 0xac, 0xa8, 0xdb, 0xb0, 0xba, 0x58, 0x85, 0xee, 0x05, 0xe2, 0x16, 0x80, 0xc2, 0x7a, + 0xa8, 0xd5, 0xd1, 0xcf, 0xeb, 0x89, 0xb7, 0x1e, 0x1d, 0xab, 0x73, 0x53, 0xd0, 0x3e, 0xf3, 0x99, + 0xcb, 0x06, 0x49, 0x3c, 0x5e, 0xac, 0x09, 0xed, 0x86, 0x25, 0xac, 0x25, 0x2b, 0x53, 0x4e, 0xbc, + 0x01, 0xd5, 0x61, 0x3b, 0xff, 0xf9, 0x4b, 0x23, 0xb1, 0x04, 0x86, 0x55, 0x6e, 0x3c, 0x45, 0x4f, + 0x2e, 0xfc, 0x7f, 0x90, 0x53, 0x55, 0xc4, 0xfb, 0xcf, 0xd9, 0xb1, 0xac, 0x21, 0xb4, 0xfd, 0x16, + 0xff, 0x8f, 0xf0, 0xbb, 0x34, 0xa0, 0xcb, 0x20, 0xb4, 0x99, 0x78, 0xe7, 0x57, 0xc5, 0xce, 0x65, + 0x8c, 0x7e, 0xe9, 0xbf, 0x3b, 0x7d, 0xe9, 0x57, 0xa5, 0xc4, 0x65, 0x60, 0xf8, 0xd6, 0x7f, 0x77, + 0xfa, 0xd6, 0xbf, 0x00, 0x97, 0x78, 0xed, 0x6f, 0xde, 0xf9, 0xe6, 0xfb, 0x4a, 0xea, 0xbb, 0xef, + 0x2b, 0xa9, 0x5f, 0x9f, 0x57, 0xd2, 0xdf, 0x9c, 0x57, 0xd2, 0xdf, 0x9e, 0x57, 0xd2, 0x7f, 0x3b, + 0xaf, 0xa4, 0x7f, 0xfb, 0x43, 0x25, 0xf5, 0xed, 0x0f, 0x95, 0xd4, 0x77, 0x3f, 0x54, 0x52, 0x87, + 0x59, 0xd5, 0x7c, 0xfe, 0xff, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x51, 0x6a, 0xd3, 0x1b, 0x19, + 0x1b, 0x00, 0x00, } func (m *NodeSpec) Copy() *NodeSpec { @@ -2836,6 +2841,13 @@ func (m *ContainerSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.OomScoreAdj != 0 { + i = encodeVarintSpecs(dAtA, i, uint64(m.OomScoreAdj)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xf0 + } if len(m.Ulimits) > 0 { for iNdEx := len(m.Ulimits) - 1; iNdEx >= 0; iNdEx-- { { @@ -4211,6 +4223,9 @@ func (m *ContainerSpec) Size() (n int) { n += 2 + l + sovSpecs(uint64(l)) } } + if m.OomScoreAdj != 0 { + n += 2 + sovSpecs(uint64(m.OomScoreAdj)) + } return n } @@ -4724,6 +4739,7 @@ func (this *ContainerSpec) String() string { `CapabilityAdd:` + fmt.Sprintf("%v", this.CapabilityAdd) + `,`, `CapabilityDrop:` + fmt.Sprintf("%v", this.CapabilityDrop) + `,`, `Ulimits:` + repeatedStringForUlimits + `,`, + `OomScoreAdj:` + fmt.Sprintf("%v", this.OomScoreAdj) + `,`, `}`, }, "") return s @@ -7476,6 +7492,25 @@ func (m *ContainerSpec) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 30: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field OomScoreAdj", wireType) + } + m.OomScoreAdj = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSpecs + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.OomScoreAdj |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipSpecs(dAtA[iNdEx:]) diff --git a/vendor/github.com/moby/swarmkit/v2/api/specs.proto b/vendor/github.com/moby/swarmkit/v2/api/specs.proto index a097b2be3c06..c1aeaccf770c 100644 --- a/vendor/github.com/moby/swarmkit/v2/api/specs.proto +++ b/vendor/github.com/moby/swarmkit/v2/api/specs.proto @@ -137,6 +137,8 @@ message TaskSpec { // Placement specifies node selection constraints Placement placement = 5; + + // LogDriver specifies the log driver to use for the task. Any runtime will // direct logs into the specified driver for the duration of the task. Driver log_driver = 6; @@ -370,6 +372,9 @@ message ContainerSpec { // Ulimits defines the list of ulimits to set in the container. This option // is equivalent to passing --ulimit to docker run. repeated Ulimit ulimits = 29; + // OOmScoreAdj defines the relative value used for destroying a container during an OOM + // Values are between -1000 and 1000 + int64 oom_score_adj = 30; } // EndpointSpec defines the properties that can be configured to diff --git a/vendor/github.com/moby/swarmkit/v2/api/types.proto b/vendor/github.com/moby/swarmkit/v2/api/types.proto index 5ad4a5f43177..74f5c7135f46 100644 --- a/vendor/github.com/moby/swarmkit/v2/api/types.proto +++ b/vendor/github.com/moby/swarmkit/v2/api/types.proto @@ -90,6 +90,8 @@ message ResourceRequirements { // to the container OS's default - generally 60, or the value predefined in // the image; set to -1 to unset a previously set value google.protobuf.Int64Value memory_swappiness = 4; + + } message Platform { diff --git a/vendor/modules.txt b/vendor/modules.txt index 86c86a46b2c2..0658118186ea 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -56,7 +56,7 @@ github.com/docker/distribution/registry/client/transport github.com/docker/distribution/registry/storage/cache github.com/docker/distribution/registry/storage/cache/memory github.com/docker/distribution/uuid -# github.com/docker/docker v26.1.1-0.20240606182029-00f18ef7a455+incompatible +# github.com/docker/docker v27.0.1-rc.1.0.20240621110831-6da604aa6a74+incompatible ## explicit github.com/docker/docker/api github.com/docker/docker/api/types @@ -195,7 +195,7 @@ github.com/moby/docker-image-spec/specs-go/v1 ## explicit; go 1.19 github.com/moby/patternmatcher github.com/moby/patternmatcher/ignorefile -# github.com/moby/swarmkit/v2 v2.0.0-20240415162501-c1c857e2dca1 +# github.com/moby/swarmkit/v2 v2.0.0-20240611172349-ea1a7cec35cb ## explicit; go 1.18 github.com/moby/swarmkit/v2/api github.com/moby/swarmkit/v2/api/deepcopy