<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="dialogflow_v2.html">Dialogflow API</a> . <a href="dialogflow_v2.projects.html">projects</a> . <a href="dialogflow_v2.projects.locations.html">locations</a> . <a href="dialogflow_v2.projects.locations.agent.html">agent</a> . <a href="dialogflow_v2.projects.locations.agent.environments.html">environments</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="dialogflow_v2.projects.locations.agent.environments.users.html">users()</a></code>
</p>
<p class="firstline">Returns the users Resource.</p>

<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, environmentId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates an agent environment.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the specified agent environment.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves the specified agent environment.</p>
<p class="toc_element">
  <code><a href="#getHistory">getHistory(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the history of the specified environment.</p>
<p class="toc_element">
  <code><a href="#getHistory_next">getHistory_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the list of all non-draft environments of the specified agent.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, allowLoadToDraftAndDiscardChanges=None, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the specified agent environment. This method allows you to deploy new agent versions into the environment. When an environment is pointed to a new agent version by setting `environment.agent_version`, the environment is temporarily set to the `LOADING` state. During that time, the environment keeps on serving the previous version of the agent. After the new agent version is done loading, the environment is set back to the `RUNNING` state. You can use "-" as Environment ID in environment name to update version in "draft" environment. WARNING: this will negate all recent changes to draft and can't be undone. You may want to save the draft to a version before calling this function.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(parent, body=None, environmentId=None, x__xgafv=None)</code>
  <pre>Creates an agent environment.

Args:
  parent: string, Required. The agent to create an environment for. Supported formats: - `projects//agent` - `projects//locations//agent` (required)
  body: object, The request body.
    The object takes the form of:

{ # You can create multiple versions of your agent and publish them to separate environments. When you edit an agent, you are editing the draft agent. At any point, you can save the draft agent as an agent version, which is an immutable snapshot of your agent. When you save the draft agent, it is published to the default environment. When you create agent versions, you can publish them to custom environments. You can create a variety of custom environments for: - testing - development - production - etc. For more information, see the [versions and environments guide](https://cloud.google.com/dialogflow/docs/agents-versions).
  &quot;agentVersion&quot;: &quot;A String&quot;, # Optional. The agent version loaded into this environment. Supported formats: - `projects//agent/versions/` - `projects//locations//agent/versions/`
  &quot;description&quot;: &quot;A String&quot;, # Optional. The developer-provided description for this environment. The maximum length is 500 characters. If exceeded, the request is rejected.
  &quot;fulfillment&quot;: { # By default, your agent responds to a matched intent with a static response. As an alternative, you can provide a more dynamic response by using fulfillment. When you enable fulfillment for an intent, Dialogflow responds to that intent by calling a service that you define. For example, if an end-user wants to schedule a haircut on Friday, your service can check your database and respond to the end-user with availability information for Friday. For more information, see the [fulfillment guide](https://cloud.google.com/dialogflow/docs/fulfillment-overview). # Optional. The fulfillment settings to use for this environment.
    &quot;displayName&quot;: &quot;A String&quot;, # Optional. The human-readable name of the fulfillment, unique within the agent. This field is not used for Fulfillment in an Environment.
    &quot;enabled&quot;: True or False, # Optional. Whether fulfillment is enabled.
    &quot;features&quot;: [ # Optional. The field defines whether the fulfillment is enabled for certain features.
      { # Whether fulfillment is enabled for the specific feature.
        &quot;type&quot;: &quot;A String&quot;, # The type of the feature that enabled for fulfillment.
      },
    ],
    &quot;genericWebService&quot;: { # Represents configuration for a generic web service. Dialogflow supports two mechanisms for authentications: - Basic authentication with username and password. - Authentication with additional authentication headers. More information could be found at: https://cloud.google.com/dialogflow/docs/fulfillment-configure. # Configuration for a generic web service.
      &quot;isCloudFunction&quot;: True or False, # Optional. Indicates if generic web service is created through Cloud Functions integration. Defaults to false. is_cloud_function is deprecated. Cloud functions can be configured by its uri as a regular web service now.
      &quot;password&quot;: &quot;A String&quot;, # Optional. The password for HTTP Basic authentication.
      &quot;requestHeaders&quot;: { # Optional. The HTTP request headers to send together with fulfillment requests.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;uri&quot;: &quot;A String&quot;, # Required. The fulfillment URI for receiving POST requests. It must use https protocol.
      &quot;username&quot;: &quot;A String&quot;, # Optional. The user name for HTTP Basic authentication.
    },
    &quot;name&quot;: &quot;A String&quot;, # Required. The unique identifier of the fulfillment. Supported formats: - `projects//agent/fulfillment` - `projects//locations//agent/fulfillment` This field is not used for Fulfillment in an Environment.
  },
  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier of this agent environment. Supported formats: - `projects//agent/environments/` - `projects//locations//agent/environments/`
  &quot;state&quot;: &quot;A String&quot;, # Output only. The state of this environment. This field is read-only, i.e., it cannot be set by create and update methods.
  &quot;textToSpeechSettings&quot;: { # Instructs the speech synthesizer on how to generate the output audio content. # Optional. Text to speech settings for this environment.
    &quot;enableTextToSpeech&quot;: True or False, # Optional. Indicates whether text to speech is enabled. Even when this field is false, other settings in this proto are still retained.
    &quot;outputAudioEncoding&quot;: &quot;A String&quot;, # Required. Audio encoding of the synthesized audio content.
    &quot;sampleRateHertz&quot;: 42, # Optional. The synthesis sample rate (in hertz) for this audio. If not provided, then the synthesizer will use the default sample rate based on the audio encoding. If this is different from the voice&#x27;s natural sample rate, then the synthesizer will honor this request by converting to the desired sample rate (which might result in worse audio quality).
    &quot;synthesizeSpeechConfigs&quot;: { # Optional. Configuration of how speech should be synthesized, mapping from language (https://cloud.google.com/dialogflow/docs/reference/language) to SynthesizeSpeechConfig.
      &quot;a_key&quot;: { # Configuration of how speech should be synthesized.
        &quot;effectsProfileId&quot;: [ # Optional. An identifier which selects &#x27;audio effects&#x27; profiles that are applied on (post synthesized) text to speech. Effects are applied on top of each other in the order they are given.
          &quot;A String&quot;,
        ],
        &quot;pitch&quot;: 3.14, # Optional. Speaking pitch, in the range [-20.0, 20.0]. 20 means increase 20 semitones from the original pitch. -20 means decrease 20 semitones from the original pitch.
        &quot;speakingRate&quot;: 3.14, # Optional. Speaking rate/speed, in the range [0.25, 4.0]. 1.0 is the normal native speed supported by the specific voice. 2.0 is twice as fast, and 0.5 is half as fast. If unset(0.0), defaults to the native 1.0 speed. Any other values &lt; 0.25 or &gt; 4.0 will return an error.
        &quot;voice&quot;: { # Description of which voice to use for speech synthesis. # Optional. The desired voice of the synthesized audio.
          &quot;name&quot;: &quot;A String&quot;, # Optional. The name of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and ssml_gender.
          &quot;ssmlGender&quot;: &quot;A String&quot;, # Optional. The preferred gender of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and name. Note that this is only a preference, not requirement. If a voice of the appropriate gender is not available, the synthesizer should substitute a voice with a different gender rather than failing the request.
        },
        &quot;volumeGainDb&quot;: 3.14, # Optional. Volume gain (in dB) of the normal native volume supported by the specific voice, in the range [-96.0, 16.0]. If unset, or set to a value of 0.0 (dB), will play at normal native signal amplitude. A value of -6.0 (dB) will play at approximately half the amplitude of the normal native signal amplitude. A value of +6.0 (dB) will play at approximately twice the amplitude of the normal native signal amplitude. We strongly recommend not to exceed +10 (dB) as there&#x27;s usually no effective increase in loudness for any value greater than that.
      },
    },
  },
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update time of this environment. This field is read-only, i.e., it cannot be set by create and update methods.
}

  environmentId: string, Required. The unique id of the new environment.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # You can create multiple versions of your agent and publish them to separate environments. When you edit an agent, you are editing the draft agent. At any point, you can save the draft agent as an agent version, which is an immutable snapshot of your agent. When you save the draft agent, it is published to the default environment. When you create agent versions, you can publish them to custom environments. You can create a variety of custom environments for: - testing - development - production - etc. For more information, see the [versions and environments guide](https://cloud.google.com/dialogflow/docs/agents-versions).
  &quot;agentVersion&quot;: &quot;A String&quot;, # Optional. The agent version loaded into this environment. Supported formats: - `projects//agent/versions/` - `projects//locations//agent/versions/`
  &quot;description&quot;: &quot;A String&quot;, # Optional. The developer-provided description for this environment. The maximum length is 500 characters. If exceeded, the request is rejected.
  &quot;fulfillment&quot;: { # By default, your agent responds to a matched intent with a static response. As an alternative, you can provide a more dynamic response by using fulfillment. When you enable fulfillment for an intent, Dialogflow responds to that intent by calling a service that you define. For example, if an end-user wants to schedule a haircut on Friday, your service can check your database and respond to the end-user with availability information for Friday. For more information, see the [fulfillment guide](https://cloud.google.com/dialogflow/docs/fulfillment-overview). # Optional. The fulfillment settings to use for this environment.
    &quot;displayName&quot;: &quot;A String&quot;, # Optional. The human-readable name of the fulfillment, unique within the agent. This field is not used for Fulfillment in an Environment.
    &quot;enabled&quot;: True or False, # Optional. Whether fulfillment is enabled.
    &quot;features&quot;: [ # Optional. The field defines whether the fulfillment is enabled for certain features.
      { # Whether fulfillment is enabled for the specific feature.
        &quot;type&quot;: &quot;A String&quot;, # The type of the feature that enabled for fulfillment.
      },
    ],
    &quot;genericWebService&quot;: { # Represents configuration for a generic web service. Dialogflow supports two mechanisms for authentications: - Basic authentication with username and password. - Authentication with additional authentication headers. More information could be found at: https://cloud.google.com/dialogflow/docs/fulfillment-configure. # Configuration for a generic web service.
      &quot;isCloudFunction&quot;: True or False, # Optional. Indicates if generic web service is created through Cloud Functions integration. Defaults to false. is_cloud_function is deprecated. Cloud functions can be configured by its uri as a regular web service now.
      &quot;password&quot;: &quot;A String&quot;, # Optional. The password for HTTP Basic authentication.
      &quot;requestHeaders&quot;: { # Optional. The HTTP request headers to send together with fulfillment requests.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;uri&quot;: &quot;A String&quot;, # Required. The fulfillment URI for receiving POST requests. It must use https protocol.
      &quot;username&quot;: &quot;A String&quot;, # Optional. The user name for HTTP Basic authentication.
    },
    &quot;name&quot;: &quot;A String&quot;, # Required. The unique identifier of the fulfillment. Supported formats: - `projects//agent/fulfillment` - `projects//locations//agent/fulfillment` This field is not used for Fulfillment in an Environment.
  },
  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier of this agent environment. Supported formats: - `projects//agent/environments/` - `projects//locations//agent/environments/`
  &quot;state&quot;: &quot;A String&quot;, # Output only. The state of this environment. This field is read-only, i.e., it cannot be set by create and update methods.
  &quot;textToSpeechSettings&quot;: { # Instructs the speech synthesizer on how to generate the output audio content. # Optional. Text to speech settings for this environment.
    &quot;enableTextToSpeech&quot;: True or False, # Optional. Indicates whether text to speech is enabled. Even when this field is false, other settings in this proto are still retained.
    &quot;outputAudioEncoding&quot;: &quot;A String&quot;, # Required. Audio encoding of the synthesized audio content.
    &quot;sampleRateHertz&quot;: 42, # Optional. The synthesis sample rate (in hertz) for this audio. If not provided, then the synthesizer will use the default sample rate based on the audio encoding. If this is different from the voice&#x27;s natural sample rate, then the synthesizer will honor this request by converting to the desired sample rate (which might result in worse audio quality).
    &quot;synthesizeSpeechConfigs&quot;: { # Optional. Configuration of how speech should be synthesized, mapping from language (https://cloud.google.com/dialogflow/docs/reference/language) to SynthesizeSpeechConfig.
      &quot;a_key&quot;: { # Configuration of how speech should be synthesized.
        &quot;effectsProfileId&quot;: [ # Optional. An identifier which selects &#x27;audio effects&#x27; profiles that are applied on (post synthesized) text to speech. Effects are applied on top of each other in the order they are given.
          &quot;A String&quot;,
        ],
        &quot;pitch&quot;: 3.14, # Optional. Speaking pitch, in the range [-20.0, 20.0]. 20 means increase 20 semitones from the original pitch. -20 means decrease 20 semitones from the original pitch.
        &quot;speakingRate&quot;: 3.14, # Optional. Speaking rate/speed, in the range [0.25, 4.0]. 1.0 is the normal native speed supported by the specific voice. 2.0 is twice as fast, and 0.5 is half as fast. If unset(0.0), defaults to the native 1.0 speed. Any other values &lt; 0.25 or &gt; 4.0 will return an error.
        &quot;voice&quot;: { # Description of which voice to use for speech synthesis. # Optional. The desired voice of the synthesized audio.
          &quot;name&quot;: &quot;A String&quot;, # Optional. The name of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and ssml_gender.
          &quot;ssmlGender&quot;: &quot;A String&quot;, # Optional. The preferred gender of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and name. Note that this is only a preference, not requirement. If a voice of the appropriate gender is not available, the synthesizer should substitute a voice with a different gender rather than failing the request.
        },
        &quot;volumeGainDb&quot;: 3.14, # Optional. Volume gain (in dB) of the normal native volume supported by the specific voice, in the range [-96.0, 16.0]. If unset, or set to a value of 0.0 (dB), will play at normal native signal amplitude. A value of -6.0 (dB) will play at approximately half the amplitude of the normal native signal amplitude. A value of +6.0 (dB) will play at approximately twice the amplitude of the normal native signal amplitude. We strongly recommend not to exceed +10 (dB) as there&#x27;s usually no effective increase in loudness for any value greater than that.
      },
    },
  },
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update time of this environment. This field is read-only, i.e., it cannot be set by create and update methods.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes the specified agent environment.

Args:
  name: string, Required. The name of the environment to delete. / Format: - `projects//agent/environments/` - `projects//locations//agent/environments/` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Retrieves the specified agent environment.

Args:
  name: string, Required. The name of the environment. Supported formats: - `projects//agent/environments/` - `projects//locations//agent/environments/` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # You can create multiple versions of your agent and publish them to separate environments. When you edit an agent, you are editing the draft agent. At any point, you can save the draft agent as an agent version, which is an immutable snapshot of your agent. When you save the draft agent, it is published to the default environment. When you create agent versions, you can publish them to custom environments. You can create a variety of custom environments for: - testing - development - production - etc. For more information, see the [versions and environments guide](https://cloud.google.com/dialogflow/docs/agents-versions).
  &quot;agentVersion&quot;: &quot;A String&quot;, # Optional. The agent version loaded into this environment. Supported formats: - `projects//agent/versions/` - `projects//locations//agent/versions/`
  &quot;description&quot;: &quot;A String&quot;, # Optional. The developer-provided description for this environment. The maximum length is 500 characters. If exceeded, the request is rejected.
  &quot;fulfillment&quot;: { # By default, your agent responds to a matched intent with a static response. As an alternative, you can provide a more dynamic response by using fulfillment. When you enable fulfillment for an intent, Dialogflow responds to that intent by calling a service that you define. For example, if an end-user wants to schedule a haircut on Friday, your service can check your database and respond to the end-user with availability information for Friday. For more information, see the [fulfillment guide](https://cloud.google.com/dialogflow/docs/fulfillment-overview). # Optional. The fulfillment settings to use for this environment.
    &quot;displayName&quot;: &quot;A String&quot;, # Optional. The human-readable name of the fulfillment, unique within the agent. This field is not used for Fulfillment in an Environment.
    &quot;enabled&quot;: True or False, # Optional. Whether fulfillment is enabled.
    &quot;features&quot;: [ # Optional. The field defines whether the fulfillment is enabled for certain features.
      { # Whether fulfillment is enabled for the specific feature.
        &quot;type&quot;: &quot;A String&quot;, # The type of the feature that enabled for fulfillment.
      },
    ],
    &quot;genericWebService&quot;: { # Represents configuration for a generic web service. Dialogflow supports two mechanisms for authentications: - Basic authentication with username and password. - Authentication with additional authentication headers. More information could be found at: https://cloud.google.com/dialogflow/docs/fulfillment-configure. # Configuration for a generic web service.
      &quot;isCloudFunction&quot;: True or False, # Optional. Indicates if generic web service is created through Cloud Functions integration. Defaults to false. is_cloud_function is deprecated. Cloud functions can be configured by its uri as a regular web service now.
      &quot;password&quot;: &quot;A String&quot;, # Optional. The password for HTTP Basic authentication.
      &quot;requestHeaders&quot;: { # Optional. The HTTP request headers to send together with fulfillment requests.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;uri&quot;: &quot;A String&quot;, # Required. The fulfillment URI for receiving POST requests. It must use https protocol.
      &quot;username&quot;: &quot;A String&quot;, # Optional. The user name for HTTP Basic authentication.
    },
    &quot;name&quot;: &quot;A String&quot;, # Required. The unique identifier of the fulfillment. Supported formats: - `projects//agent/fulfillment` - `projects//locations//agent/fulfillment` This field is not used for Fulfillment in an Environment.
  },
  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier of this agent environment. Supported formats: - `projects//agent/environments/` - `projects//locations//agent/environments/`
  &quot;state&quot;: &quot;A String&quot;, # Output only. The state of this environment. This field is read-only, i.e., it cannot be set by create and update methods.
  &quot;textToSpeechSettings&quot;: { # Instructs the speech synthesizer on how to generate the output audio content. # Optional. Text to speech settings for this environment.
    &quot;enableTextToSpeech&quot;: True or False, # Optional. Indicates whether text to speech is enabled. Even when this field is false, other settings in this proto are still retained.
    &quot;outputAudioEncoding&quot;: &quot;A String&quot;, # Required. Audio encoding of the synthesized audio content.
    &quot;sampleRateHertz&quot;: 42, # Optional. The synthesis sample rate (in hertz) for this audio. If not provided, then the synthesizer will use the default sample rate based on the audio encoding. If this is different from the voice&#x27;s natural sample rate, then the synthesizer will honor this request by converting to the desired sample rate (which might result in worse audio quality).
    &quot;synthesizeSpeechConfigs&quot;: { # Optional. Configuration of how speech should be synthesized, mapping from language (https://cloud.google.com/dialogflow/docs/reference/language) to SynthesizeSpeechConfig.
      &quot;a_key&quot;: { # Configuration of how speech should be synthesized.
        &quot;effectsProfileId&quot;: [ # Optional. An identifier which selects &#x27;audio effects&#x27; profiles that are applied on (post synthesized) text to speech. Effects are applied on top of each other in the order they are given.
          &quot;A String&quot;,
        ],
        &quot;pitch&quot;: 3.14, # Optional. Speaking pitch, in the range [-20.0, 20.0]. 20 means increase 20 semitones from the original pitch. -20 means decrease 20 semitones from the original pitch.
        &quot;speakingRate&quot;: 3.14, # Optional. Speaking rate/speed, in the range [0.25, 4.0]. 1.0 is the normal native speed supported by the specific voice. 2.0 is twice as fast, and 0.5 is half as fast. If unset(0.0), defaults to the native 1.0 speed. Any other values &lt; 0.25 or &gt; 4.0 will return an error.
        &quot;voice&quot;: { # Description of which voice to use for speech synthesis. # Optional. The desired voice of the synthesized audio.
          &quot;name&quot;: &quot;A String&quot;, # Optional. The name of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and ssml_gender.
          &quot;ssmlGender&quot;: &quot;A String&quot;, # Optional. The preferred gender of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and name. Note that this is only a preference, not requirement. If a voice of the appropriate gender is not available, the synthesizer should substitute a voice with a different gender rather than failing the request.
        },
        &quot;volumeGainDb&quot;: 3.14, # Optional. Volume gain (in dB) of the normal native volume supported by the specific voice, in the range [-96.0, 16.0]. If unset, or set to a value of 0.0 (dB), will play at normal native signal amplitude. A value of -6.0 (dB) will play at approximately half the amplitude of the normal native signal amplitude. A value of +6.0 (dB) will play at approximately twice the amplitude of the normal native signal amplitude. We strongly recommend not to exceed +10 (dB) as there&#x27;s usually no effective increase in loudness for any value greater than that.
      },
    },
  },
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update time of this environment. This field is read-only, i.e., it cannot be set by create and update methods.
}</pre>
</div>

<div class="method">
    <code class="details" id="getHistory">getHistory(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Gets the history of the specified environment.

Args:
  parent: string, Required. The name of the environment to retrieve history for. Supported formats: - `projects//agent/environments/` - `projects//locations//agent/environments/` (required)
  pageSize: integer, Optional. The maximum number of items to return in a single page. By default 100 and at most 1000.
  pageToken: string, Optional. The next_page_token value returned from a previous list request.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response message for Environments.GetEnvironmentHistory.
  &quot;entries&quot;: [ # Output only. The list of agent environments. There will be a maximum number of items returned based on the page_size field in the request.
    { # Represents an environment history entry.
      &quot;agentVersion&quot;: &quot;A String&quot;, # The agent version loaded into this environment history entry.
      &quot;createTime&quot;: &quot;A String&quot;, # The creation time of this environment history entry.
      &quot;description&quot;: &quot;A String&quot;, # The developer-provided description for this environment history entry.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Output only. Token to retrieve the next page of results, or empty if there are no more results in the list.
  &quot;parent&quot;: &quot;A String&quot;, # Output only. The name of the environment this history is for. Supported formats: - `projects//agent/environments/` - `projects//locations//agent/environments/`
}</pre>
</div>

<div class="method">
    <code class="details" id="getHistory_next">getHistory_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Returns the list of all non-draft environments of the specified agent.

Args:
  parent: string, Required. The agent to list all environments from. Format: - `projects//agent` - `projects//locations//agent` (required)
  pageSize: integer, Optional. The maximum number of items to return in a single page. By default 100 and at most 1000.
  pageToken: string, Optional. The next_page_token value returned from a previous list request.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response message for Environments.ListEnvironments.
  &quot;environments&quot;: [ # The list of agent environments. There will be a maximum number of items returned based on the page_size field in the request.
    { # You can create multiple versions of your agent and publish them to separate environments. When you edit an agent, you are editing the draft agent. At any point, you can save the draft agent as an agent version, which is an immutable snapshot of your agent. When you save the draft agent, it is published to the default environment. When you create agent versions, you can publish them to custom environments. You can create a variety of custom environments for: - testing - development - production - etc. For more information, see the [versions and environments guide](https://cloud.google.com/dialogflow/docs/agents-versions).
      &quot;agentVersion&quot;: &quot;A String&quot;, # Optional. The agent version loaded into this environment. Supported formats: - `projects//agent/versions/` - `projects//locations//agent/versions/`
      &quot;description&quot;: &quot;A String&quot;, # Optional. The developer-provided description for this environment. The maximum length is 500 characters. If exceeded, the request is rejected.
      &quot;fulfillment&quot;: { # By default, your agent responds to a matched intent with a static response. As an alternative, you can provide a more dynamic response by using fulfillment. When you enable fulfillment for an intent, Dialogflow responds to that intent by calling a service that you define. For example, if an end-user wants to schedule a haircut on Friday, your service can check your database and respond to the end-user with availability information for Friday. For more information, see the [fulfillment guide](https://cloud.google.com/dialogflow/docs/fulfillment-overview). # Optional. The fulfillment settings to use for this environment.
        &quot;displayName&quot;: &quot;A String&quot;, # Optional. The human-readable name of the fulfillment, unique within the agent. This field is not used for Fulfillment in an Environment.
        &quot;enabled&quot;: True or False, # Optional. Whether fulfillment is enabled.
        &quot;features&quot;: [ # Optional. The field defines whether the fulfillment is enabled for certain features.
          { # Whether fulfillment is enabled for the specific feature.
            &quot;type&quot;: &quot;A String&quot;, # The type of the feature that enabled for fulfillment.
          },
        ],
        &quot;genericWebService&quot;: { # Represents configuration for a generic web service. Dialogflow supports two mechanisms for authentications: - Basic authentication with username and password. - Authentication with additional authentication headers. More information could be found at: https://cloud.google.com/dialogflow/docs/fulfillment-configure. # Configuration for a generic web service.
          &quot;isCloudFunction&quot;: True or False, # Optional. Indicates if generic web service is created through Cloud Functions integration. Defaults to false. is_cloud_function is deprecated. Cloud functions can be configured by its uri as a regular web service now.
          &quot;password&quot;: &quot;A String&quot;, # Optional. The password for HTTP Basic authentication.
          &quot;requestHeaders&quot;: { # Optional. The HTTP request headers to send together with fulfillment requests.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;uri&quot;: &quot;A String&quot;, # Required. The fulfillment URI for receiving POST requests. It must use https protocol.
          &quot;username&quot;: &quot;A String&quot;, # Optional. The user name for HTTP Basic authentication.
        },
        &quot;name&quot;: &quot;A String&quot;, # Required. The unique identifier of the fulfillment. Supported formats: - `projects//agent/fulfillment` - `projects//locations//agent/fulfillment` This field is not used for Fulfillment in an Environment.
      },
      &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier of this agent environment. Supported formats: - `projects//agent/environments/` - `projects//locations//agent/environments/`
      &quot;state&quot;: &quot;A String&quot;, # Output only. The state of this environment. This field is read-only, i.e., it cannot be set by create and update methods.
      &quot;textToSpeechSettings&quot;: { # Instructs the speech synthesizer on how to generate the output audio content. # Optional. Text to speech settings for this environment.
        &quot;enableTextToSpeech&quot;: True or False, # Optional. Indicates whether text to speech is enabled. Even when this field is false, other settings in this proto are still retained.
        &quot;outputAudioEncoding&quot;: &quot;A String&quot;, # Required. Audio encoding of the synthesized audio content.
        &quot;sampleRateHertz&quot;: 42, # Optional. The synthesis sample rate (in hertz) for this audio. If not provided, then the synthesizer will use the default sample rate based on the audio encoding. If this is different from the voice&#x27;s natural sample rate, then the synthesizer will honor this request by converting to the desired sample rate (which might result in worse audio quality).
        &quot;synthesizeSpeechConfigs&quot;: { # Optional. Configuration of how speech should be synthesized, mapping from language (https://cloud.google.com/dialogflow/docs/reference/language) to SynthesizeSpeechConfig.
          &quot;a_key&quot;: { # Configuration of how speech should be synthesized.
            &quot;effectsProfileId&quot;: [ # Optional. An identifier which selects &#x27;audio effects&#x27; profiles that are applied on (post synthesized) text to speech. Effects are applied on top of each other in the order they are given.
              &quot;A String&quot;,
            ],
            &quot;pitch&quot;: 3.14, # Optional. Speaking pitch, in the range [-20.0, 20.0]. 20 means increase 20 semitones from the original pitch. -20 means decrease 20 semitones from the original pitch.
            &quot;speakingRate&quot;: 3.14, # Optional. Speaking rate/speed, in the range [0.25, 4.0]. 1.0 is the normal native speed supported by the specific voice. 2.0 is twice as fast, and 0.5 is half as fast. If unset(0.0), defaults to the native 1.0 speed. Any other values &lt; 0.25 or &gt; 4.0 will return an error.
            &quot;voice&quot;: { # Description of which voice to use for speech synthesis. # Optional. The desired voice of the synthesized audio.
              &quot;name&quot;: &quot;A String&quot;, # Optional. The name of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and ssml_gender.
              &quot;ssmlGender&quot;: &quot;A String&quot;, # Optional. The preferred gender of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and name. Note that this is only a preference, not requirement. If a voice of the appropriate gender is not available, the synthesizer should substitute a voice with a different gender rather than failing the request.
            },
            &quot;volumeGainDb&quot;: 3.14, # Optional. Volume gain (in dB) of the normal native volume supported by the specific voice, in the range [-96.0, 16.0]. If unset, or set to a value of 0.0 (dB), will play at normal native signal amplitude. A value of -6.0 (dB) will play at approximately half the amplitude of the normal native signal amplitude. A value of +6.0 (dB) will play at approximately twice the amplitude of the normal native signal amplitude. We strongly recommend not to exceed +10 (dB) as there&#x27;s usually no effective increase in loudness for any value greater than that.
          },
        },
      },
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update time of this environment. This field is read-only, i.e., it cannot be set by create and update methods.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more results in the list.
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, allowLoadToDraftAndDiscardChanges=None, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates the specified agent environment. This method allows you to deploy new agent versions into the environment. When an environment is pointed to a new agent version by setting `environment.agent_version`, the environment is temporarily set to the `LOADING` state. During that time, the environment keeps on serving the previous version of the agent. After the new agent version is done loading, the environment is set back to the `RUNNING` state. You can use &quot;-&quot; as Environment ID in environment name to update version in &quot;draft&quot; environment. WARNING: this will negate all recent changes to draft and can&#x27;t be undone. You may want to save the draft to a version before calling this function.

Args:
  name: string, Output only. The unique identifier of this agent environment. Supported formats: - `projects//agent/environments/` - `projects//locations//agent/environments/` (required)
  body: object, The request body.
    The object takes the form of:

{ # You can create multiple versions of your agent and publish them to separate environments. When you edit an agent, you are editing the draft agent. At any point, you can save the draft agent as an agent version, which is an immutable snapshot of your agent. When you save the draft agent, it is published to the default environment. When you create agent versions, you can publish them to custom environments. You can create a variety of custom environments for: - testing - development - production - etc. For more information, see the [versions and environments guide](https://cloud.google.com/dialogflow/docs/agents-versions).
  &quot;agentVersion&quot;: &quot;A String&quot;, # Optional. The agent version loaded into this environment. Supported formats: - `projects//agent/versions/` - `projects//locations//agent/versions/`
  &quot;description&quot;: &quot;A String&quot;, # Optional. The developer-provided description for this environment. The maximum length is 500 characters. If exceeded, the request is rejected.
  &quot;fulfillment&quot;: { # By default, your agent responds to a matched intent with a static response. As an alternative, you can provide a more dynamic response by using fulfillment. When you enable fulfillment for an intent, Dialogflow responds to that intent by calling a service that you define. For example, if an end-user wants to schedule a haircut on Friday, your service can check your database and respond to the end-user with availability information for Friday. For more information, see the [fulfillment guide](https://cloud.google.com/dialogflow/docs/fulfillment-overview). # Optional. The fulfillment settings to use for this environment.
    &quot;displayName&quot;: &quot;A String&quot;, # Optional. The human-readable name of the fulfillment, unique within the agent. This field is not used for Fulfillment in an Environment.
    &quot;enabled&quot;: True or False, # Optional. Whether fulfillment is enabled.
    &quot;features&quot;: [ # Optional. The field defines whether the fulfillment is enabled for certain features.
      { # Whether fulfillment is enabled for the specific feature.
        &quot;type&quot;: &quot;A String&quot;, # The type of the feature that enabled for fulfillment.
      },
    ],
    &quot;genericWebService&quot;: { # Represents configuration for a generic web service. Dialogflow supports two mechanisms for authentications: - Basic authentication with username and password. - Authentication with additional authentication headers. More information could be found at: https://cloud.google.com/dialogflow/docs/fulfillment-configure. # Configuration for a generic web service.
      &quot;isCloudFunction&quot;: True or False, # Optional. Indicates if generic web service is created through Cloud Functions integration. Defaults to false. is_cloud_function is deprecated. Cloud functions can be configured by its uri as a regular web service now.
      &quot;password&quot;: &quot;A String&quot;, # Optional. The password for HTTP Basic authentication.
      &quot;requestHeaders&quot;: { # Optional. The HTTP request headers to send together with fulfillment requests.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;uri&quot;: &quot;A String&quot;, # Required. The fulfillment URI for receiving POST requests. It must use https protocol.
      &quot;username&quot;: &quot;A String&quot;, # Optional. The user name for HTTP Basic authentication.
    },
    &quot;name&quot;: &quot;A String&quot;, # Required. The unique identifier of the fulfillment. Supported formats: - `projects//agent/fulfillment` - `projects//locations//agent/fulfillment` This field is not used for Fulfillment in an Environment.
  },
  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier of this agent environment. Supported formats: - `projects//agent/environments/` - `projects//locations//agent/environments/`
  &quot;state&quot;: &quot;A String&quot;, # Output only. The state of this environment. This field is read-only, i.e., it cannot be set by create and update methods.
  &quot;textToSpeechSettings&quot;: { # Instructs the speech synthesizer on how to generate the output audio content. # Optional. Text to speech settings for this environment.
    &quot;enableTextToSpeech&quot;: True or False, # Optional. Indicates whether text to speech is enabled. Even when this field is false, other settings in this proto are still retained.
    &quot;outputAudioEncoding&quot;: &quot;A String&quot;, # Required. Audio encoding of the synthesized audio content.
    &quot;sampleRateHertz&quot;: 42, # Optional. The synthesis sample rate (in hertz) for this audio. If not provided, then the synthesizer will use the default sample rate based on the audio encoding. If this is different from the voice&#x27;s natural sample rate, then the synthesizer will honor this request by converting to the desired sample rate (which might result in worse audio quality).
    &quot;synthesizeSpeechConfigs&quot;: { # Optional. Configuration of how speech should be synthesized, mapping from language (https://cloud.google.com/dialogflow/docs/reference/language) to SynthesizeSpeechConfig.
      &quot;a_key&quot;: { # Configuration of how speech should be synthesized.
        &quot;effectsProfileId&quot;: [ # Optional. An identifier which selects &#x27;audio effects&#x27; profiles that are applied on (post synthesized) text to speech. Effects are applied on top of each other in the order they are given.
          &quot;A String&quot;,
        ],
        &quot;pitch&quot;: 3.14, # Optional. Speaking pitch, in the range [-20.0, 20.0]. 20 means increase 20 semitones from the original pitch. -20 means decrease 20 semitones from the original pitch.
        &quot;speakingRate&quot;: 3.14, # Optional. Speaking rate/speed, in the range [0.25, 4.0]. 1.0 is the normal native speed supported by the specific voice. 2.0 is twice as fast, and 0.5 is half as fast. If unset(0.0), defaults to the native 1.0 speed. Any other values &lt; 0.25 or &gt; 4.0 will return an error.
        &quot;voice&quot;: { # Description of which voice to use for speech synthesis. # Optional. The desired voice of the synthesized audio.
          &quot;name&quot;: &quot;A String&quot;, # Optional. The name of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and ssml_gender.
          &quot;ssmlGender&quot;: &quot;A String&quot;, # Optional. The preferred gender of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and name. Note that this is only a preference, not requirement. If a voice of the appropriate gender is not available, the synthesizer should substitute a voice with a different gender rather than failing the request.
        },
        &quot;volumeGainDb&quot;: 3.14, # Optional. Volume gain (in dB) of the normal native volume supported by the specific voice, in the range [-96.0, 16.0]. If unset, or set to a value of 0.0 (dB), will play at normal native signal amplitude. A value of -6.0 (dB) will play at approximately half the amplitude of the normal native signal amplitude. A value of +6.0 (dB) will play at approximately twice the amplitude of the normal native signal amplitude. We strongly recommend not to exceed +10 (dB) as there&#x27;s usually no effective increase in loudness for any value greater than that.
      },
    },
  },
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update time of this environment. This field is read-only, i.e., it cannot be set by create and update methods.
}

  allowLoadToDraftAndDiscardChanges: boolean, Optional. This field is used to prevent accidental overwrite of the draft environment, which is an operation that cannot be undone. To confirm that the caller desires this overwrite, this field must be explicitly set to true when updating the draft environment (environment ID = `-`).
  updateMask: string, Required. The mask to control which fields get updated.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # You can create multiple versions of your agent and publish them to separate environments. When you edit an agent, you are editing the draft agent. At any point, you can save the draft agent as an agent version, which is an immutable snapshot of your agent. When you save the draft agent, it is published to the default environment. When you create agent versions, you can publish them to custom environments. You can create a variety of custom environments for: - testing - development - production - etc. For more information, see the [versions and environments guide](https://cloud.google.com/dialogflow/docs/agents-versions).
  &quot;agentVersion&quot;: &quot;A String&quot;, # Optional. The agent version loaded into this environment. Supported formats: - `projects//agent/versions/` - `projects//locations//agent/versions/`
  &quot;description&quot;: &quot;A String&quot;, # Optional. The developer-provided description for this environment. The maximum length is 500 characters. If exceeded, the request is rejected.
  &quot;fulfillment&quot;: { # By default, your agent responds to a matched intent with a static response. As an alternative, you can provide a more dynamic response by using fulfillment. When you enable fulfillment for an intent, Dialogflow responds to that intent by calling a service that you define. For example, if an end-user wants to schedule a haircut on Friday, your service can check your database and respond to the end-user with availability information for Friday. For more information, see the [fulfillment guide](https://cloud.google.com/dialogflow/docs/fulfillment-overview). # Optional. The fulfillment settings to use for this environment.
    &quot;displayName&quot;: &quot;A String&quot;, # Optional. The human-readable name of the fulfillment, unique within the agent. This field is not used for Fulfillment in an Environment.
    &quot;enabled&quot;: True or False, # Optional. Whether fulfillment is enabled.
    &quot;features&quot;: [ # Optional. The field defines whether the fulfillment is enabled for certain features.
      { # Whether fulfillment is enabled for the specific feature.
        &quot;type&quot;: &quot;A String&quot;, # The type of the feature that enabled for fulfillment.
      },
    ],
    &quot;genericWebService&quot;: { # Represents configuration for a generic web service. Dialogflow supports two mechanisms for authentications: - Basic authentication with username and password. - Authentication with additional authentication headers. More information could be found at: https://cloud.google.com/dialogflow/docs/fulfillment-configure. # Configuration for a generic web service.
      &quot;isCloudFunction&quot;: True or False, # Optional. Indicates if generic web service is created through Cloud Functions integration. Defaults to false. is_cloud_function is deprecated. Cloud functions can be configured by its uri as a regular web service now.
      &quot;password&quot;: &quot;A String&quot;, # Optional. The password for HTTP Basic authentication.
      &quot;requestHeaders&quot;: { # Optional. The HTTP request headers to send together with fulfillment requests.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;uri&quot;: &quot;A String&quot;, # Required. The fulfillment URI for receiving POST requests. It must use https protocol.
      &quot;username&quot;: &quot;A String&quot;, # Optional. The user name for HTTP Basic authentication.
    },
    &quot;name&quot;: &quot;A String&quot;, # Required. The unique identifier of the fulfillment. Supported formats: - `projects//agent/fulfillment` - `projects//locations//agent/fulfillment` This field is not used for Fulfillment in an Environment.
  },
  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier of this agent environment. Supported formats: - `projects//agent/environments/` - `projects//locations//agent/environments/`
  &quot;state&quot;: &quot;A String&quot;, # Output only. The state of this environment. This field is read-only, i.e., it cannot be set by create and update methods.
  &quot;textToSpeechSettings&quot;: { # Instructs the speech synthesizer on how to generate the output audio content. # Optional. Text to speech settings for this environment.
    &quot;enableTextToSpeech&quot;: True or False, # Optional. Indicates whether text to speech is enabled. Even when this field is false, other settings in this proto are still retained.
    &quot;outputAudioEncoding&quot;: &quot;A String&quot;, # Required. Audio encoding of the synthesized audio content.
    &quot;sampleRateHertz&quot;: 42, # Optional. The synthesis sample rate (in hertz) for this audio. If not provided, then the synthesizer will use the default sample rate based on the audio encoding. If this is different from the voice&#x27;s natural sample rate, then the synthesizer will honor this request by converting to the desired sample rate (which might result in worse audio quality).
    &quot;synthesizeSpeechConfigs&quot;: { # Optional. Configuration of how speech should be synthesized, mapping from language (https://cloud.google.com/dialogflow/docs/reference/language) to SynthesizeSpeechConfig.
      &quot;a_key&quot;: { # Configuration of how speech should be synthesized.
        &quot;effectsProfileId&quot;: [ # Optional. An identifier which selects &#x27;audio effects&#x27; profiles that are applied on (post synthesized) text to speech. Effects are applied on top of each other in the order they are given.
          &quot;A String&quot;,
        ],
        &quot;pitch&quot;: 3.14, # Optional. Speaking pitch, in the range [-20.0, 20.0]. 20 means increase 20 semitones from the original pitch. -20 means decrease 20 semitones from the original pitch.
        &quot;speakingRate&quot;: 3.14, # Optional. Speaking rate/speed, in the range [0.25, 4.0]. 1.0 is the normal native speed supported by the specific voice. 2.0 is twice as fast, and 0.5 is half as fast. If unset(0.0), defaults to the native 1.0 speed. Any other values &lt; 0.25 or &gt; 4.0 will return an error.
        &quot;voice&quot;: { # Description of which voice to use for speech synthesis. # Optional. The desired voice of the synthesized audio.
          &quot;name&quot;: &quot;A String&quot;, # Optional. The name of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and ssml_gender.
          &quot;ssmlGender&quot;: &quot;A String&quot;, # Optional. The preferred gender of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and name. Note that this is only a preference, not requirement. If a voice of the appropriate gender is not available, the synthesizer should substitute a voice with a different gender rather than failing the request.
        },
        &quot;volumeGainDb&quot;: 3.14, # Optional. Volume gain (in dB) of the normal native volume supported by the specific voice, in the range [-96.0, 16.0]. If unset, or set to a value of 0.0 (dB), will play at normal native signal amplitude. A value of -6.0 (dB) will play at approximately half the amplitude of the normal native signal amplitude. A value of +6.0 (dB) will play at approximately twice the amplitude of the normal native signal amplitude. We strongly recommend not to exceed +10 (dB) as there&#x27;s usually no effective increase in loudness for any value greater than that.
      },
    },
  },
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update time of this environment. This field is read-only, i.e., it cannot be set by create and update methods.
}</pre>
</div>

</body></html>