Adding support for API path parameters and repsonse type HTTP (#951)

* adding support for repsonse type http

* validating path parameters and adding them to API

* fixing integration test

* fixing unit test failure

* changing test name

* adding seperate manifest for api with path

* fixing integration test

* fixing integration test
diff --git a/deployers/manifestreader.go b/deployers/manifestreader.go
index 6434907..efe9a92 100644
--- a/deployers/manifestreader.go
+++ b/deployers/manifestreader.go
@@ -108,7 +108,7 @@
 		return wskderrors.NewYAMLFileFormatError(manifestName, err)
 	}
 
-	apis, err := manifestParser.ComposeApiRecordsFromAllPackages(reader.serviceDeployer.ClientConfig, manifest)
+	apis, responses, err := manifestParser.ComposeApiRecordsFromAllPackages(reader.serviceDeployer.ClientConfig, manifest)
 	if err != nil {
 		return wskderrors.NewYAMLFileFormatError(manifestName, err)
 	}
@@ -138,7 +138,7 @@
 		return wskderrors.NewYAMLFileFormatError(manifestName, err)
 	}
 
-	err = reader.SetApis(apis)
+	err = reader.SetApis(apis, responses)
 	if err != nil {
 		return wskderrors.NewYAMLFileFormatError(manifestName, err)
 	}
@@ -304,19 +304,20 @@
 	return nil
 }
 
-func (reader *ManifestReader) SetApis(ar []*whisk.ApiCreateRequest) error {
+func (reader *ManifestReader) SetApis(ar []*whisk.ApiCreateRequest, responses map[string]*whisk.ApiCreateRequestOptions) error {
 	dep := reader.serviceDeployer
 
 	dep.mt.Lock()
 	defer dep.mt.Unlock()
 
 	for _, api := range ar {
-		apiPath := api.ApiDoc.ApiName + api.ApiDoc.GatewayBasePath + api.ApiDoc.GatewayRelPath + api.ApiDoc.GatewayMethod
-
-		// uniqueness issue when using action name as key as there can be multiple APIs pointing to same action.
-		// using apiPath instead as it is uniqueue
+		apiPath := api.ApiDoc.ApiName + " " + api.ApiDoc.GatewayBasePath +
+			api.ApiDoc.GatewayRelPath + " " + api.ApiDoc.GatewayMethod
 		dep.Deployment.Apis[apiPath] = api
 	}
+	for apiPath, response := range responses {
+		dep.Deployment.ApiOptions[apiPath] = response
+	}
 
 	return nil
 }
diff --git a/deployers/servicedeployer.go b/deployers/servicedeployer.go
index a0e84e7..970629a 100644
--- a/deployers/servicedeployer.go
+++ b/deployers/servicedeployer.go
@@ -45,10 +45,11 @@
 )
 
 type DeploymentProject struct {
-	Packages map[string]*DeploymentPackage
-	Triggers map[string]*whisk.Trigger
-	Rules    map[string]*whisk.Rule
-	Apis     map[string]*whisk.ApiCreateRequest
+	Packages   map[string]*DeploymentPackage
+	Triggers   map[string]*whisk.Trigger
+	Rules      map[string]*whisk.Rule
+	Apis       map[string]*whisk.ApiCreateRequest
+	ApiOptions map[string]*whisk.ApiCreateRequestOptions
 }
 
 func NewDeploymentProject() *DeploymentProject {
@@ -57,6 +58,7 @@
 	dep.Triggers = make(map[string]*whisk.Trigger)
 	dep.Rules = make(map[string]*whisk.Rule)
 	dep.Apis = make(map[string]*whisk.ApiCreateRequest)
+	dep.ApiOptions = make(map[string]*whisk.ApiCreateRequestOptions)
 	return &dep
 }
 
@@ -1014,10 +1016,9 @@
 	var err error
 	var response *http.Response
 
-	apiCreateReqOptions := new(whisk.ApiCreateRequestOptions)
+	apiCreateReqOptions := deployer.Deployment.ApiOptions[apiPath]
 	apiCreateReqOptions.SpaceGuid = strings.Split(deployer.Client.Config.AuthToken, ":")[0]
 	apiCreateReqOptions.AccessToken = deployer.Client.Config.ApigwAccessToken
-	// TODO() Add Response type apiCreateReqOptions.ResponseType
 
 	err = retry(DEFAULT_ATTEMPTS, DEFAULT_INTERVAL, func() error {
 		_, response, err = deployer.Client.Apis.Insert(api, apiCreateReqOptions, true)
diff --git a/parsers/manifest_parser.go b/parsers/manifest_parser.go
index f7853be..3223225 100644
--- a/parsers/manifest_parser.go
+++ b/parsers/manifest_parser.go
@@ -41,14 +41,16 @@
 )
 
 const (
-	API                 = "API"
-	HTTPS               = "https://"
-	HTTP                = "http://"
-	API_VERSION         = "v1"
-	WEB                 = "web"
-	PATH_SEPARATOR      = "/"
-	DEFAULT_PACKAGE     = "default"
-	NATIVE_DOCKER_IMAGE = "openwhisk/dockerskeleton"
+	API                   = "API"
+	HTTPS                 = "https://"
+	HTTP                  = "http://"
+	API_VERSION           = "v1"
+	WEB                   = "web"
+	PATH_SEPARATOR        = "/"
+	DEFAULT_PACKAGE       = "default"
+	NATIVE_DOCKER_IMAGE   = "openwhisk/dockerskeleton"
+	PARAM_OPENING_BRACKET = "{"
+	PARAM_CLOSING_BRACKET = "}"
 )
 
 // Read existing manifest file or create new if none exists
@@ -1089,8 +1091,9 @@
 	return rules, nil
 }
 
-func (dm *YAMLParser) ComposeApiRecordsFromAllPackages(client *whisk.Config, manifest *YAML) ([]*whisk.ApiCreateRequest, error) {
-	var requests []*whisk.ApiCreateRequest = make([]*whisk.ApiCreateRequest, 0)
+func (dm *YAMLParser) ComposeApiRecordsFromAllPackages(client *whisk.Config, manifest *YAML) ([]*whisk.ApiCreateRequest, map[string]*whisk.ApiCreateRequestOptions, error) {
+	var requests = make([]*whisk.ApiCreateRequest, 0)
+	var responses = make(map[string]*whisk.ApiCreateRequestOptions, 0)
 	manifestPackages := make(map[string]Package)
 
 	if len(manifest.Packages) != 0 {
@@ -1100,23 +1103,26 @@
 	}
 
 	for packageName, p := range manifestPackages {
-		r, err := dm.ComposeApiRecords(client, packageName, p, manifest.Filepath)
+		r, response, err := dm.ComposeApiRecords(client, packageName, p, manifest.Filepath)
 		if err == nil {
 			requests = append(requests, r...)
+			for k, v := range response {
+				responses[k] = v
+			}
 		} else {
-			return nil, err
+			return nil, nil, err
 		}
 	}
-	return requests, nil
+	return requests, responses, nil
 }
 
 /*
  * read API section from manifest file:
  * apis: # List of APIs
- *     hello-world: #API name
- *	/hello: #gateway base path
- *	    /world:   #gateway rel path
- *		greeting: get #action name: gateway method
+ * 		hello-world: #API name
+ *			/hello: #gateway base path
+ *	    		/world:   #gateway rel path
+ *					greeting: get #action name: gateway method
  *
  * compose APIDoc structure from the manifest:
  * {
@@ -1135,29 +1141,41 @@
  * 	}
  * }
  */
-func (dm *YAMLParser) ComposeApiRecords(client *whisk.Config, packageName string, pkg Package, manifestPath string) ([]*whisk.ApiCreateRequest, error) {
-	var requests []*whisk.ApiCreateRequest = make([]*whisk.ApiCreateRequest, 0)
+func (dm *YAMLParser) ComposeApiRecords(client *whisk.Config, packageName string, pkg Package, manifestPath string) ([]*whisk.ApiCreateRequest, map[string]*whisk.ApiCreateRequestOptions, error) {
+	var requests = make([]*whisk.ApiCreateRequest, 0)
 
+	// verify APIGW_ACCESS_TOKEN is set before composing APIs
+	// until this point, we dont know whether APIs are specified in manifest or not
 	if pkg.Apis != nil && len(pkg.Apis) != 0 {
-		// verify APIGW_ACCESS_TOKEN is set before composing APIs
-		// until this point, we dont know whether APIs are specified in manifest or not
 		if len(client.ApigwAccessToken) == 0 {
-			return nil, wskderrors.NewWhiskClientInvalidConfigError(wski18n.ID_MSG_CONFIG_MISSING_APIGW_ACCESS_TOKEN)
+			return nil, nil, wskderrors.NewWhiskClientInvalidConfigError(
+				wski18n.ID_MSG_CONFIG_MISSING_APIGW_ACCESS_TOKEN)
 		}
 	}
 
+	requestOptions := make(map[string]*whisk.ApiCreateRequestOptions, 0)
+
 	for apiName, apiDoc := range pkg.Apis {
 		for gatewayBasePath, gatewayBasePathMap := range apiDoc {
+			// Base Path
+			// validate base path should not have any path parameters
+			if !isGatewayBasePathValid(gatewayBasePath) {
+				err := wskderrors.NewYAMLParserErr(manifestPath,
+					wski18n.T(wski18n.ID_ERR_API_GATEWAY_BASE_PATH_INVALID_X_api_X,
+						map[string]interface{}{wski18n.KEY_API_BASE_PATH: gatewayBasePath}))
+				return requests, requestOptions, err
+			}
 			// append "/" to the gateway base path if its missing
 			if !strings.HasPrefix(gatewayBasePath, PATH_SEPARATOR) {
 				gatewayBasePath = PATH_SEPARATOR + gatewayBasePath
 			}
 			for gatewayRelPath, gatewayRelPathMap := range gatewayBasePathMap {
+				// Relative Path
 				// append "/" to the gateway relative path if its missing
 				if !strings.HasPrefix(gatewayRelPath, PATH_SEPARATOR) {
 					gatewayRelPath = PATH_SEPARATOR + gatewayRelPath
 				}
-				for actionName, gatewayMethod := range gatewayRelPathMap {
+				for actionName, gatewayMethodResponse := range gatewayRelPathMap {
 					// verify that the action is defined under actions sections
 					if _, ok := pkg.Actions[actionName]; ok {
 						// verify that the action is defined as web action
@@ -1194,48 +1212,84 @@
 						}
 						// return failure since action or sequence are not defined in the manifest
 					} else {
-						return nil, wskderrors.NewYAMLFileFormatError(manifestPath,
+						return nil, nil, wskderrors.NewYAMLFileFormatError(manifestPath,
 							wski18n.T(wski18n.ID_ERR_API_MISSING_ACTION_OR_SEQUENCE_X_action_or_sequence_X_api_X,
 								map[string]interface{}{
 									wski18n.KEY_ACTION: actionName,
 									wski18n.KEY_API:    apiName}))
 					}
-					request := new(whisk.ApiCreateRequest)
-					request.ApiDoc = new(whisk.Api)
-					request.ApiDoc.GatewayBasePath = gatewayBasePath
-					// is API verb is valid, it must be one of (GET, PUT, POST, DELETE)
-					request.ApiDoc.GatewayRelPath = gatewayRelPath
-					if _, ok := whisk.ApiVerbs[strings.ToUpper(gatewayMethod)]; !ok {
-						return nil, wskderrors.NewInvalidAPIGatewayMethodError(manifestPath,
+
+					// get the list of path parameters from relative path
+					pathParameters := generatePathParameters(gatewayRelPath)
+
+					// Check if response type is set to http for API using path parameters
+					if strings.ToLower(gatewayMethodResponse.Method) != utils.HTTP_FILE_EXTENSION &&
+						len(pathParameters) > 0 {
+						warningString := wski18n.T(wski18n.ID_WARN_API_INVALID_RESPONSE_TYPE,
+							map[string]interface{}{
+								wski18n.KEY_API:               apiName,
+								wski18n.KEY_API_RELATIVE_PATH: gatewayRelPath,
+								wski18n.KEY_RESPONSE:          gatewayMethodResponse.Response})
+						wskprint.PrintlnOpenWhiskWarning(warningString)
+						gatewayMethodResponse.Response = utils.HTTP_FILE_EXTENSION
+					}
+
+					// Chekc if API verb is valid, it must be one of (GET, PUT, POST, DELETE)
+					if _, ok := whisk.ApiVerbs[strings.ToUpper(gatewayMethodResponse.Method)]; !ok {
+						return nil, nil, wskderrors.NewInvalidAPIGatewayMethodError(manifestPath,
 							gatewayBasePath+gatewayRelPath,
-							gatewayMethod,
+							gatewayMethodResponse.Method,
 							dm.getGatewayMethods())
 					}
-					request.ApiDoc.GatewayMethod = strings.ToUpper(gatewayMethod)
-					request.ApiDoc.Namespace = client.Namespace
-					request.ApiDoc.ApiName = apiName
-					request.ApiDoc.Id = strings.Join([]string{API, request.ApiDoc.Namespace, request.ApiDoc.GatewayRelPath}, ":")
-					// set action of an API Doc
-					request.ApiDoc.Action = new(whisk.ApiAction)
-					if packageName == DEFAULT_PACKAGE {
-						request.ApiDoc.Action.Name = actionName
-					} else {
-						request.ApiDoc.Action.Name = packageName + PATH_SEPARATOR + actionName
+
+					apiDocActionName := actionName
+					if strings.ToLower(packageName) != DEFAULT_PACKAGE {
+						apiDocActionName = packageName + PATH_SEPARATOR + actionName
 					}
-					url := []string{HTTPS + client.Host, strings.ToLower(API),
-						API_VERSION, WEB, client.Namespace, packageName,
-						actionName + "." + utils.HTTP_FILE_EXTENSION}
-					request.ApiDoc.Action.Namespace = client.Namespace
-					request.ApiDoc.Action.BackendUrl = strings.Join(url, PATH_SEPARATOR)
-					request.ApiDoc.Action.BackendMethod = gatewayMethod
-					request.ApiDoc.Action.Auth = client.AuthToken
+
+					// set action of an API Doc
+					apiDocAction := whisk.ApiAction{
+						Name:      apiDocActionName,
+						Namespace: client.Namespace,
+						BackendUrl: strings.Join([]string{HTTPS +
+							client.Host, strings.ToLower(API),
+							API_VERSION, WEB, client.Namespace, packageName,
+							actionName + "." + utils.HTTP_FILE_EXTENSION},
+							PATH_SEPARATOR),
+						BackendMethod: gatewayMethodResponse.Method,
+						Auth:          client.AuthToken,
+					}
+
+					requestApiDoc := whisk.Api{
+						GatewayBasePath: gatewayBasePath,
+						PathParameters:  pathParameters,
+						GatewayRelPath:  gatewayRelPath,
+						GatewayMethod:   strings.ToUpper(gatewayMethodResponse.Method),
+						Namespace:       client.Namespace,
+						ApiName:         apiName,
+						Id:              strings.Join([]string{API, client.Namespace, gatewayRelPath}, ":"),
+						Action:          &apiDocAction,
+					}
+
+					request := whisk.ApiCreateRequest{
+						ApiDoc: &requestApiDoc,
+					}
+
 					// add a newly created ApiCreateRequest object to a list of requests
-					requests = append(requests, request)
+					requests = append(requests, &request)
+
+					// Create an instance of ApiCreateRequestOptions
+					options := whisk.ApiCreateRequestOptions{
+						ResponseType: gatewayMethodResponse.Response,
+					}
+					apiPath := request.ApiDoc.ApiName + " " + request.ApiDoc.GatewayBasePath +
+						request.ApiDoc.GatewayRelPath + " " + request.ApiDoc.GatewayMethod
+					requestOptions[apiPath] = &options
 				}
 			}
 		}
 	}
-	return requests, nil
+	return requests, requestOptions, nil
 }
 
 func (dm *YAMLParser) getGatewayMethods() []string {
@@ -1245,3 +1299,74 @@
 	}
 	return methods
 }
+
+func doesPathParamExist(params []string, param string) bool {
+	for _, e := range params {
+		if e == param {
+			return true
+		}
+	}
+	return false
+}
+
+func getPathParameterNames(path string) []string {
+	var pathParameters []string
+	pathElements := strings.Split(path, PATH_SEPARATOR)
+	for _, e := range pathElements {
+		paramName := getParamName(e)
+		if len(paramName) > 0 {
+			if !doesPathParamExist(pathParameters, paramName) {
+				pathParameters = append(pathParameters, paramName)
+			}
+		}
+	}
+	return pathParameters
+}
+
+func generatePathParameters(relativePath string) []whisk.ApiParameter {
+	pathParams := []whisk.ApiParameter{}
+
+	pathParamNames := getPathParameterNames(relativePath)
+	for _, paramName := range pathParamNames {
+		param := whisk.ApiParameter{Name: paramName, In: "path", Required: true, Type: "string",
+			Description: wski18n.T("Default description for '{{.name}}'", map[string]interface{}{"name": paramName})}
+		pathParams = append(pathParams, param)
+	}
+
+	return pathParams
+}
+
+func isParam(param string) bool {
+	if strings.HasPrefix(param, PARAM_OPENING_BRACKET) &&
+		strings.HasSuffix(param, PARAM_CLOSING_BRACKET) {
+		return true
+	}
+	return false
+}
+
+func getParamName(param string) string {
+	paramName := ""
+	if isParam(param) {
+		paramName = param[1 : len(param)-1]
+	}
+	return paramName
+}
+
+func isGatewayBasePathValid(basePath string) bool {
+	// return false if base path is empty string
+	if len(basePath) == 0 {
+		return false
+	}
+	// drop preceding "/" if exists
+	if strings.HasPrefix(basePath, PATH_SEPARATOR) {
+		basePath = basePath[1:]
+	}
+	// slice base path into substrings seperated by "/"
+	// if there are more than one substrings, basePath has path parameters
+	// basePath will have path parameters if substrings count is more than 1
+	basePathElements := strings.Split(basePath, PATH_SEPARATOR)
+	if len(basePathElements) > 1 {
+		return false
+	}
+	return true
+}
diff --git a/parsers/manifest_parser_test.go b/parsers/manifest_parser_test.go
index b4a3cc8..ec7dc24 100644
--- a/parsers/manifest_parser_test.go
+++ b/parsers/manifest_parser_test.go
@@ -31,6 +31,7 @@
 
 	"github.com/apache/incubator-openwhisk-client-go/whisk"
 	"github.com/apache/incubator-openwhisk-wskdeploy/runtimes"
+	"github.com/apache/incubator-openwhisk-wskdeploy/utils"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wskderrors"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wskprint"
 	"github.com/stretchr/testify/assert"
@@ -1499,11 +1500,11 @@
 		ApigwAccessToken: "token",
 	}
 
-	apiList, err := p.ComposeApiRecordsFromAllPackages(&config, m)
+	apiList, apiRequestOptions, err := p.ComposeApiRecordsFromAllPackages(&config, m)
 	if err != nil {
 		assert.Fail(t, "Failed to compose api records: "+err.Error())
 	}
-	assert.Equal(t, 7, len(apiList), "Failed to get api records")
+	assert.Equal(t, 10, len(apiList), "Failed to get api records")
 	for _, apiRecord := range apiList {
 		apiDoc := apiRecord.ApiDoc
 		action := apiDoc.Action
@@ -1539,7 +1540,30 @@
 			assert.Equal(t, "/club2", apiDoc.GatewayBasePath, "Failed to set api base path")
 			assert.Equal(t, "/members2", apiDoc.GatewayRelPath, "Failed to set api rel path")
 			assert.Equal(t, "get", action.BackendMethod, "Failed to set api backend method")
-
+		case "apiTest/getBooks3":
+			assert.Equal(t, "book-club3", apiDoc.ApiName, "Failed to set api name")
+			assert.Equal(t, "/club3", apiDoc.GatewayBasePath, "Failed to set api base path")
+			assert.Equal(t, "/booksByISBN/{isbn}", apiDoc.GatewayRelPath, "Failed to set api rel path")
+			assert.Equal(t, "get", action.BackendMethod, "Failed to set api backend method")
+			assert.Equal(t, 1, len(apiDoc.PathParameters), "Failed to set api path parameters")
+			apiPath := apiDoc.ApiName + " " + apiDoc.GatewayBasePath + apiDoc.GatewayRelPath + " " + apiDoc.GatewayMethod
+			assert.Equal(t, utils.HTTP_FILE_EXTENSION, apiRequestOptions[apiPath].ResponseType, "Failed to set response type")
+		case "apiTest/putBooks3":
+			assert.Equal(t, "book-club3", apiDoc.ApiName, "Failed to set api name")
+			assert.Equal(t, "/club3", apiDoc.GatewayBasePath, "Failed to set api base path")
+			assert.Equal(t, "/booksWithParams/path/{params}/more/{params1}/", apiDoc.GatewayRelPath, "Failed to set api rel path")
+			assert.Equal(t, "put", action.BackendMethod, "Failed to set api backend method")
+			assert.Equal(t, 2, len(apiDoc.PathParameters), "Failed to set api path parameters")
+			apiPath := apiDoc.ApiName + " " + apiDoc.GatewayBasePath + apiDoc.GatewayRelPath + " " + apiDoc.GatewayMethod
+			assert.Equal(t, utils.HTTP_FILE_EXTENSION, apiRequestOptions[apiPath].ResponseType, "Failed to set response type")
+		case "apiTest/deleteBooks3":
+			assert.Equal(t, "book-club3", apiDoc.ApiName, "Failed to set api name")
+			assert.Equal(t, "/club3", apiDoc.GatewayBasePath, "Failed to set api base path")
+			assert.Equal(t, "/booksWithDuplicateParams/path/{params}/more/{params}/", apiDoc.GatewayRelPath, "Failed to set api rel path")
+			assert.Equal(t, "delete", action.BackendMethod, "Failed to set api backend method")
+			assert.Equal(t, 1, len(apiDoc.PathParameters), "Failed to set api path parameters")
+			apiPath := apiDoc.ApiName + " " + apiDoc.GatewayBasePath + apiDoc.GatewayRelPath + " " + apiDoc.GatewayMethod
+			assert.Equal(t, utils.HTTP_FILE_EXTENSION, apiRequestOptions[apiPath].ResponseType, "Failed to set response type")
 		default:
 			assert.Fail(t, "Failed to get api action name")
 		}
diff --git a/parsers/yamlparser.go b/parsers/yamlparser.go
index 1cb3174..5f12370 100644
--- a/parsers/yamlparser.go
+++ b/parsers/yamlparser.go
@@ -194,25 +194,30 @@
 	Credential  string `yaml:"credential,omitempty"`
 }
 
+type APIMethodResponse struct {
+	Method   string `yaml:"method"`
+	Response string `yaml:"response"`
+}
+
 type Package struct {
-	Packagename      string                                             `yaml:"name"`
-	Version          string                                             `yaml:"version"` //mandatory
-	License          string                                             `yaml:"license"` //mandatory
-	Public           bool                                               `yaml:"public,omitempty"`
-	Repositories     []Repository                                       `yaml:"repositories,omitempty"`
-	Dependencies     map[string]Dependency                              `yaml:"dependencies"`
-	Namespace        string                                             `yaml:"namespace"`
-	Credential       string                                             `yaml:"credential"`
-	ApiHost          string                                             `yaml:"apiHost"`
-	ApigwAccessToken string                                             `yaml:"apigwAccessToken"`
-	Actions          map[string]Action                                  `yaml:"actions"`
-	Triggers         map[string]Trigger                                 `yaml:"triggers"`
-	Feeds            map[string]Feed                                    `yaml:"feeds"`
-	Rules            map[string]Rule                                    `yaml:"rules"`
-	Inputs           map[string]Parameter                               `yaml:"inputs"`
-	Sequences        map[string]Sequence                                `yaml:"sequences"`
-	Annotations      map[string]interface{}                             `yaml:"annotations,omitempty"`
-	Apis             map[string]map[string]map[string]map[string]string `yaml:"apis"`
+	Packagename      string                                                        `yaml:"name"`
+	Version          string                                                        `yaml:"version"` //mandatory
+	License          string                                                        `yaml:"license"` //mandatory
+	Public           bool                                                          `yaml:"public,omitempty"`
+	Repositories     []Repository                                                  `yaml:"repositories,omitempty"`
+	Dependencies     map[string]Dependency                                         `yaml:"dependencies"`
+	Namespace        string                                                        `yaml:"namespace"`
+	Credential       string                                                        `yaml:"credential"`
+	ApiHost          string                                                        `yaml:"apiHost"`
+	ApigwAccessToken string                                                        `yaml:"apigwAccessToken"`
+	Actions          map[string]Action                                             `yaml:"actions"`
+	Triggers         map[string]Trigger                                            `yaml:"triggers"`
+	Feeds            map[string]Feed                                               `yaml:"feeds"`
+	Rules            map[string]Rule                                               `yaml:"rules"`
+	Inputs           map[string]Parameter                                          `yaml:"inputs"`
+	Sequences        map[string]Sequence                                           `yaml:"sequences"`
+	Annotations      map[string]interface{}                                        `yaml:"annotations,omitempty"`
+	Apis             map[string]map[string]map[string]map[string]APIMethodResponse `yaml:"apis"`
 }
 
 type Project struct {
@@ -371,7 +376,7 @@
 					api.GatewayRelPath = gatewayRelPath
 					action := &whisk.ApiAction{}
 					action.Name = k
-					action.BackendMethod = v
+					action.BackendMethod = v.Method
 					api.Action = action
 					apis = append(apis, api)
 				}
diff --git a/tests/dat/manifest_data_compose_api_records.yaml b/tests/dat/manifest_data_compose_api_records.yaml
index b0d7baa..6beee8d 100644
--- a/tests/dat/manifest_data_compose_api_records.yaml
+++ b/tests/dat/manifest_data_compose_api_records.yaml
@@ -2,38 +2,65 @@
 # license agreements; and to You under the Apache License, Version 2.0.
 
 packages:
-  apiTest:
-    actions:
-      putBooks:
-        function: ../tests/src/integration/helloworld/actions/hello.js
-        web-export: true
-      deleteBooks:
-        function: ../tests/src/integration/helloworld/actions/hello.js
-      listMembers:
-        function: ../tests/src/integration/helloworld/actions/hello.js
-      getBooks2:
-        function: ../tests/src/integration/helloworld/actions/hello.js
-      postBooks2:
-        function: ../tests/src/integration/helloworld/actions/hello.js
-      listMembers2:
-        function: ../tests/src/integration/helloworld/actions/hello.js
-    sequences:
-      listAllMembers:
-        actions: listMembers, listMembers2
-        web: true
-    apis:
-      book-club:
-        club:
-          books:
-            putBooks: put
-            deleteBooks: delete
-          members:
-            listMembers: get
-      book-club2:
-        club2:
-          books2:
-            getBooks2: get
-            postBooks2: post
-          members2:
-            listMembers2: get
-            listAllMembers: get
+    apiTest:
+        actions:
+            putBooks:
+                function: ../tests/src/integration/helloworld/actions/hello.js
+                web-export: true
+            deleteBooks:
+                function: ../tests/src/integration/helloworld/actions/hello.js
+            listMembers:
+                function: ../tests/src/integration/helloworld/actions/hello.js
+            getBooks2:
+                function: ../tests/src/integration/helloworld/actions/hello.js
+            postBooks2:
+                function: ../tests/src/integration/helloworld/actions/hello.js
+            listMembers2:
+                function: ../tests/src/integration/helloworld/actions/hello.js
+            getBooks3:
+                function: ../tests/src/integration/helloworld/actions/hello.js
+            putBooks3:
+                function: ../tests/src/integration/helloworld/actions/hello.js
+            deleteBooks3:
+                function: ../tests/src/integration/helloworld/actions/hello.js
+        sequences:
+            listAllMembers:
+                actions: listMembers, listMembers2
+                web: true
+        apis:
+            book-club:
+                club:
+                    books:
+                        putBooks:
+                            method: put
+                        deleteBooks:
+                            method: delete
+                    members:
+                        listMembers:
+                            method: get
+            book-club2:
+                club2:
+                    books2:
+                        getBooks2:
+                            method: get
+                        postBooks2:
+                            method: post
+                    members2:
+                        listMembers2:
+                            method: get
+                        listAllMembers:
+                            method: get
+            book-club3:
+                club3:
+                    booksByISBN/{isbn}:
+                        getBooks3:
+                            method: get
+                            response: http
+                    booksWithParams/path/{params}/more/{params1}/:
+                        putBooks3:
+                            method: put
+                            response: json
+                    booksWithDuplicateParams/path/{params}/more/{params}/:
+                        deleteBooks3:
+                            method: delete
+
diff --git a/tests/dat/manifest_validate_trigger_action_rule_grammar.yaml b/tests/dat/manifest_validate_trigger_action_rule_grammar.yaml
index c5417cd..26045df 100644
--- a/tests/dat/manifest_validate_trigger_action_rule_grammar.yaml
+++ b/tests/dat/manifest_validate_trigger_action_rule_grammar.yaml
@@ -3,41 +3,46 @@
 
 # This test file is used to test the basic Trigger-Action-Rule grammar
 packages:
-  manifest2:
-      version: 1.0
-      license: Apache-2.0
-      actions:
-        first_action:
-          function: actions/dump_params.js
-        second_action:
-          function: actions/dump_params.js
-        third_action:
-          function: actions/dump_params.js
-      triggers:
-        trigger1:
-        trigger2:
-      rules:
-        rule1:
-          trigger: trigger1
-          action: first_action
-        rule3:
-          trigger: trigger2
-          action: second_action
-        rule2:
-          trigger: trigger1
-          action: second_action
-      feeds:
-        feed1:
-        feed2:
-        feed3:
-        feed4:
-      apis:
-        book-club: #api name
-          club: # shared base path
-            books:   #path
-               getBooks: get #action name:verb
-               postBooks: post
-               putBooks: put
-               deleteBooks: delete
-            members: #path
-               listMembers: get #action name:verb
+    manifest2:
+        version: 1.0
+        license: Apache-2.0
+        actions:
+            first_action:
+                function: actions/dump_params.js
+            second_action:
+                function: actions/dump_params.js
+            third_action:
+                function: actions/dump_params.js
+        triggers:
+            trigger1:
+            trigger2:
+        rules:
+            rule1:
+                trigger: trigger1
+                action: first_action
+            rule3:
+                trigger: trigger2
+                action: second_action
+            rule2:
+                trigger: trigger1
+                action: second_action
+        feeds:
+            feed1:
+            feed2:
+            feed3:
+            feed4:
+        apis:
+            book-club: #api name
+                club: # shared base path
+                    books:   #path
+                        getBooks: #action name:verb
+                            method: get
+                        postBooks:
+                            method: post
+                        putBooks:
+                            method: put
+                        deleteBooks:
+                            method: delete
+                    members: #path
+                        listMembers: #action name:verb
+                            method: get
diff --git a/tests/src/integration/apigateway/apigateway_test.go b/tests/src/integration/apigateway/apigateway_test.go
index 6bc3355..a6cf3de 100644
--- a/tests/src/integration/apigateway/apigateway_test.go
+++ b/tests/src/integration/apigateway/apigateway_test.go
@@ -26,10 +26,20 @@
 	"testing"
 )
 
-// TODO: write the integration against openwhisk
-func TestTriggerRule(t *testing.T) {
+const PATH = "/src/github.com/apache/incubator-openwhisk-wskdeploy/tests/src/integration/apigateway/"
+
+func TestApiGateway(t *testing.T) {
 	wskdeploy := common.NewWskdeploy()
-	manifestPath := os.Getenv("GOPATH") + "/src/github.com/apache/incubator-openwhisk-wskdeploy/tests/src/integration/apigateway/manifest.yml"
+	manifestPath := os.Getenv("GOPATH") + PATH + "manifest.yml"
+	_, err := wskdeploy.DeployManifestPathOnly(manifestPath)
+	assert.Equal(t, nil, err, "Failed to deploy based on the manifest file.")
+	_, err = wskdeploy.UndeployManifestPathOnly(manifestPath)
+	assert.Equal(t, nil, err, "Failed to undeploy based on the manifest file.")
+}
+
+func TestApiGatewayWithParams(t *testing.T) {
+	wskdeploy := common.NewWskdeploy()
+	manifestPath := os.Getenv("GOPATH") + PATH + "manifest-apis-with-params.yaml"
 	_, err := wskdeploy.DeployManifestPathOnly(manifestPath)
 	assert.Equal(t, nil, err, "Failed to deploy based on the manifest file.")
 	_, err = wskdeploy.UndeployManifestPathOnly(manifestPath)
diff --git a/tests/src/integration/apigateway/manifest-apis-with-params.yaml b/tests/src/integration/apigateway/manifest-apis-with-params.yaml
new file mode 100644
index 0000000..5ebeb11
--- /dev/null
+++ b/tests/src/integration/apigateway/manifest-apis-with-params.yaml
@@ -0,0 +1,29 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more contributor
+# license agreements; and to You under the Apache License, Version 2.0.
+
+packages:
+    api-gateway-test-with-params:
+        version: 1.0
+        license: Apache-2.0
+        actions:
+            getBooksWithISBN:
+                function: src/get-books.js
+            putBooksWithParams:
+                function: src/put-books.js
+            deleteBooksWithDuplicateParams:
+                function: src/delete-books.js
+        # new top-level key for defining groups of named APIs
+        apis:
+            book-club-with-params:
+                club-with-params:
+                    booksWithISBN/{isbn}:
+                        getBooksWithISBN:
+                            method: GET
+                            response: http
+                    booksWithParams/path/{params}/more/{params1}/:
+                        putBooksWithParams:
+                            method: PUT
+                    booksWithDuplicateParams/path/{params}/more/{params}/:
+                        deleteBooksWithDuplicateParams:
+                            method: DELETE
+
diff --git a/tests/src/integration/apigateway/manifest.yml b/tests/src/integration/apigateway/manifest.yml
index 888ab86..6848b29 100644
--- a/tests/src/integration/apigateway/manifest.yml
+++ b/tests/src/integration/apigateway/manifest.yml
@@ -29,15 +29,29 @@
             hello-world:
                 hello:
                     world:
-                        greeting: GET
+                        greeting:
+                            method: GET
             book-club:
                 club:
                     books:
-                        getBooks: GET
-                        postBooks: POST
-                        putBooks: PUT
-                        deleteBooks: DELETE
+                        getBooks:
+                            method: GET
+                            response: http
+                        postBooks:
+                            method: POST
+                            response: http
+                        putBooks:
+                            method: PUT
+                            response: http
+                        deleteBooks:
+                            method: DELETE
+                            response: http
                     members:
-                        listMembers: GET
+                        listMembers:
+                            method: GET
+                            response: http
                     allMembers:
-                        listAllMembers: GET
+                        listAllMembers:
+                            method: GET
+                            response: http
+
diff --git a/wski18n/i18n_ids.go b/wski18n/i18n_ids.go
index dc97872..7c45bba 100644
--- a/wski18n/i18n_ids.go
+++ b/wski18n/i18n_ids.go
@@ -47,42 +47,45 @@
 // DO NOT TRANSLATE
 // Known keys used for text replacement in i18n translated strings
 const (
-	KEY_ACTION          = "action"
-	KEY_CMD             = "cmd"
-	KEY_CODE            = "code"
-	KEY_DEPLOYMENT_NAME = "dname"
-	KEY_DEPLOYMENT_PATH = "dpath"
-	KEY_ERR             = "err"
-	KEY_EXTENSION       = "ext"
-	KEY_FILE_TYPE       = "filetype"
-	KEY_HOST            = "host"
-	KEY_KEY             = "key"
-	KEY_LIMIT           = "limit"
-	KEY_MANIFEST_NAME   = "mname"
-	KEY_MANIFEST_PATH   = "mpath"
-	KEY_NAME            = "name"
-	KEY_NAMESPACE       = "namespace"
-	KEY_NEW             = "newkey"
-	KEY_OLD             = "oldkey"
-	KEY_PATH            = "path"
-	KEY_PROJECT         = "project"
-	KEY_RUNTIME         = "runtime"
-	KEY_SOURCE          = "source"
-	KEY_VALUE           = "value"
-	KEY_VALUE_MIN       = "min" // TODO() attempt to use this for Limit value range errors
-	KEY_VALUE_MAX       = "max" // TODO() attempt to use this for Limit value range errors
-	KEY_API             = "api"
-	KEY_URL             = "url"
-	KEY_PACKAGE         = "package"
-	KEY_BINDINGS        = "bindings"
-	KEY_DEPENDENCY      = "dependency"
-	KEY_LOCATION        = "location"
-	KEY_SEQUENCE        = "sequence"
-	KEY_TRIGGER         = "trigger"
-	KEY_TRIGGER_FEED    = "feed"
-	KEY_RULE            = "rule"
-	KEY_ARG             = "arg"
-	KEY_INPUTS          = "inputs"
+	KEY_ACTION            = "action"
+	KEY_CMD               = "cmd"
+	KEY_CODE              = "code"
+	KEY_DEPLOYMENT_NAME   = "dname"
+	KEY_DEPLOYMENT_PATH   = "dpath"
+	KEY_ERR               = "err"
+	KEY_EXTENSION         = "ext"
+	KEY_FILE_TYPE         = "filetype"
+	KEY_HOST              = "host"
+	KEY_KEY               = "key"
+	KEY_LIMIT             = "limit"
+	KEY_MANIFEST_NAME     = "mname"
+	KEY_MANIFEST_PATH     = "mpath"
+	KEY_NAME              = "name"
+	KEY_NAMESPACE         = "namespace"
+	KEY_NEW               = "newkey"
+	KEY_OLD               = "oldkey"
+	KEY_PATH              = "path"
+	KEY_PROJECT           = "project"
+	KEY_RUNTIME           = "runtime"
+	KEY_SOURCE            = "source"
+	KEY_VALUE             = "value"
+	KEY_VALUE_MIN         = "min" // TODO() attempt to use this for Limit value range errors
+	KEY_VALUE_MAX         = "max" // TODO() attempt to use this for Limit value range errors
+	KEY_API               = "api"
+	KEY_URL               = "url"
+	KEY_PACKAGE           = "package"
+	KEY_BINDINGS          = "bindings"
+	KEY_DEPENDENCY        = "dependency"
+	KEY_LOCATION          = "location"
+	KEY_SEQUENCE          = "sequence"
+	KEY_TRIGGER           = "trigger"
+	KEY_TRIGGER_FEED      = "feed"
+	KEY_RULE              = "rule"
+	KEY_ARG               = "arg"
+	KEY_INPUTS            = "inputs"
+	KEY_API_BASE_PATH     = "apibasepath"
+	KEY_RESPONSE          = "response"
+	KEY_API_RELATIVE_PATH = "apirelativepath"
 )
 
 // DO NOT TRANSLATE
@@ -199,6 +202,7 @@
 	ID_ERR_ARG_MISSING_KEY_VALUE_X_arg_X                                 = "msg_err_arg_missing_key_value"
 	ID_ERR_INVALID_PARAM_FILE_X_file_X                                   = "msg_err_invalid_param_file"
 	ID_ERR_REQUIRED_INPUTS_MISSING_VALUE_X_inputs_X                      = "msg_err_required_inputs_missing_value"
+	ID_ERR_API_GATEWAY_BASE_PATH_INVALID_X_api_X                         = "msg_err_api_gateway_base_path_invalid"
 	ID_ERR_RUNTIME_PARSER_ERROR                                          = "msg_err_runtime_parser_error"
 
 	// Server-side Errors (wskdeploy as an Action)
@@ -227,6 +231,7 @@
 	ID_WARN_ACTION_WEB_X_action_X                             = "msg_warn_action_web_export_ignored"
 	ID_WARN_API_MISSING_WEB_ACTION_X_action_X_api_X           = "msg_warn_api_missing_web_action"
 	ID_WARN_API_MISSING_WEB_SEQUENCE_X_sequence_X_api_X       = "msg_warn_api_missing_web_sequence"
+	ID_WARN_API_INVALID_RESPONSE_TYPE                         = "msg_warn_api_invalid_response_type"
 
 	// Verbose (Debug/Trace) messages
 	ID_DEBUG_PROJECT_SEARCH_X_path_X_key_X                = "msg_dbg_searching_project_directory"
diff --git a/wski18n/i18n_resources.go b/wski18n/i18n_resources.go
old mode 100755
new mode 100644
index eb033ff..198a009
--- a/wski18n/i18n_resources.go
+++ b/wski18n/i18n_resources.go
@@ -97,7 +97,7 @@
 	return a, nil
 }
 
-var _wski18nResourcesEn_usAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x5b\x5f\x6f\x1b\x39\x92\x7f\xcf\xa7\x28\x0c\x0e\x98\x19\x40\x91\x33\x7b\x38\xe0\x10\x20\x0f\xb9\xc4\xd9\xf5\x6d\x12\x07\x76\xbc\xc1\x22\x67\xb4\xa9\xee\x92\xc4\x55\x37\xd9\x43\xb2\xa5\x68\x0c\x7d\xf7\x43\x15\xc9\xee\x96\xac\xfe\x23\x25\x73\x97\x97\x48\x26\x59\xf5\xab\x62\xb1\x58\x7f\xa8\xaf\xcf\x00\x1e\x9f\x01\x00\xfc\x24\xb3\x9f\x5e\xc2\x4f\x85\x5d\x24\xa5\xc1\xb9\xfc\x96\xa0\x31\xda\xfc\x34\xf1\xa3\xce\x08\x65\x73\xe1\xa4\x56\x34\xed\x92\xc7\x9e\x01\xec\x26\x3d\x14\xa4\x9a\xeb\x0e\x02\x57\x34\x34\xb4\xde\x56\x69\x8a\xd6\x76\x90\xb8\x0d\xa3\x43\x54\x36\xc2\x28\xa9\x16\x1d\x54\xbe\x84\xd1\x4e\x2a\x69\x91\x25\x19\xda\x34\xc9\xb5\x5a\x24\x06\x4b\x6d\x5c\x07\xad\x1b\x1e\xb4\xa0\x15\x64\x58\xe6\x7a\x8b\x19\xa0\x72\xd2\x49\xb4\xf0\x8b\x9c\xe2\x74\x02\x9f\x44\xba\x12\x0b\xb4\x13\x78\x9d\xd2\x3a\x3b\x81\xcf\x46\x2e\x16\x68\xec\x04\x6e\xaa\x9c\x46\xd0\xa5\xd3\x5f\x41\x58\xd8\x60\x9e\xd3\xff\x06\x53\x54\x8e\x57\xac\x99\x9b\x05\xa9\xc0\x2d\x11\x6c\x89\xa9\x9c\x4b\xcc\x40\x89\x02\x6d\x29\x52\x9c\x8e\x96\x45\xeb\x2e\x49\x5e\x83\xd3\x3a\x07\xa7\x83\x20\x13\xa8\x94\xff\x04\x42\x65\x60\xb7\x2a\x05\x5d\xa2\xda\x2c\xa5\x5d\x41\x19\x64\x82\xca\x4a\xb5\x00\x01\x85\x50\x72\x8e\xd6\xf1\x64\x5d\x12\x55\x91\x07\x52\x05\x49\x32\x97\x79\x3d\xfd\x9f\xaf\x3f\xbc\x1f\x83\xd9\x2e\xb5\x71\xfd\x1b\xf0\xc9\xe8\xb5\xcc\xd0\x82\x00\x5b\x15\x85\x30\x5b\xf0\xf3\x41\xcf\x61\xb3\x14\xee\x67\x0b\x33\xc4\xd6\xf6\x7c\x9f\x1a\x03\xa4\x41\x3d\x5a\x74\xa4\xcb\x25\xe6\x65\x60\x0d\x5b\x5d\x99\x51\x2a\x24\x55\x8d\xc7\xb2\x46\x63\x89\x77\x97\x7e\xa4\x72\x2c\x70\x98\x07\xaa\x2a\x66\x68\x58\x3d\x76\xe5\xa1\x8d\xe6\x45\x56\x30\x68\x3f\x6c\x2a\x2c\xec\x75\x89\xea\xcb\xbe\xb0\x33\x74\x1b\xda\x8e\x34\x97\x64\x15\x6c\x5a\x68\xd6\x68\x46\xdb\xf0\x78\x0c\x2d\xeb\x23\x3e\xd1\x9e\xf9\x0f\x7a\xfe\x7f\x69\xcd\xf3\x5c\x2c\x12\x51\xca\x64\xa9\x6d\x97\xe1\x78\x28\xaf\x3f\x5d\xc1\xc3\xdf\xae\x6f\x3f\x3f\x8c\xa4\xd8\xbf\xfd\x2d\xa2\xff\xb8\xbc\xb9\xbd\xba\xfe\x38\x8a\x6e\xe5\x96\xc9\x0a\xb7\x1d\x44\x69\x58\x1b\xf9\x07\xff\x01\x1e\xfe\x7e\xf9\xcf\x31\x44\x53\x34\x2e\x21\xbd\x75\x50\x2d\x85\x5b\xd2\xb6\x90\xad\x4e\x69\x32\x2b\x79\x0c\x61\xad\xe6\xb2\xcb\xd9\xfb\x41\x26\x05\xbf\x64\x38\x17\x55\xee\x40\x5a\xf8\xb7\xbf\x5d\x7f\xb8\xbc\x98\x6e\xec\xaa\x34\xba\xb4\xbf\x8e\xd1\x4a\x9e\xeb\x4d\x12\x68\x74\x5d\x51\x3c\x09\xea\x49\xc3\x54\x1b\xa3\xea\xd3\x4b\xed\x96\x6b\xeb\x1b\x41\xba\x34\xb8\x96\xb8\xe9\xa0\x6b\x97\x0c\x34\x12\xbd\xd8\x3b\x1e\x65\x2e\xd4\x08\x0e\x2b\xdc\x8e\xde\xd2\x15\x6e\xc7\x02\xf7\x9a\x2e\x84\x12\x0b\xcc\x7a\x15\x5d\x1a\xfd\x2f\x4c\x5d\x73\xe7\x3a\x0d\x33\x84\x42\x98\x15\x66\x10\x29\x8c\x51\x15\xd3\x49\xe8\x2e\xe8\x12\x26\xb0\xe2\x29\xc3\x14\xa3\x0b\x19\xd8\xd5\x3d\xa7\x3f\x82\x6c\x7d\x59\x75\xd0\x6d\xc6\x47\x0b\x3d\x80\xd0\xbb\xe7\x1c\xad\x8d\xda\x1e\x41\xda\x3a\x23\x3b\x29\xfb\xad\xab\x2c\x1a\x3a\x28\x52\x61\x06\xa6\x52\x4e\x16\xf5\x25\x35\x82\x83\x33\xdd\x4a\xe0\x31\xd0\x95\x2b\xab\x31\x60\xbd\xb9\xad\xd1\xcc\xb4\xed\x22\x19\x46\x4f\x25\x5a\x0a\x23\x8a\x4e\x05\x1b\x51\xa0\x43\x03\x6b\x91\x57\xc8\x01\x1e\x39\x53\xf8\xc7\xeb\xf7\x77\x97\x0f\x30\xd7\xa6\x10\x27\xb2\xea\x3b\x8d\x0f\xef\xae\xde\x5f\x3e\x40\xaa\x95\x13\x92\x22\x60\x38\x86\xe0\xbf\x6f\xaf\x3f\x0e\xb3\x66\xaf\x9a\x14\xd2\xd2\x0d\xc8\xf7\x45\xf7\x75\xf1\x79\x89\x40\x33\xe8\x8c\xa6\xfe\xce\x20\x5f\x20\x2d\x28\xed\xc0\x93\xaa\x0c\x66\xd3\xff\xe9\xdb\xf7\x03\x8e\xa5\xec\xb9\x4a\x89\x23\xdd\x79\x34\xe5\xfb\xf8\x0c\x1d\x37\xe2\x54\xcf\x39\x8f\x55\x10\xa5\x2f\x75\x3a\x94\xe7\xeb\xe3\xe3\x94\x3e\xef\x76\xf7\x13\x98\x1b\x5d\xc0\xe3\xe3\xd4\xea\xca\xa4\xb8\xdb\x8d\xe2\xe9\x37\x6c\x88\x27\x4d\x8b\x7b\x65\xd1\x9d\xc7\xab\x56\xcf\x10\xb7\x3d\x3d\x92\x88\xf5\x1f\xce\x97\xb3\x94\x8b\x4d\x22\x38\x6b\x4c\x9c\x5e\xa1\x1a\x14\x99\x56\x80\x5f\x01\xbc\xe2\x3c\xe1\x2b\x55\x08\x63\x97\x22\x4f\x72\x9d\x8a\xbc\x83\xe3\x5d\x9c\xd5\x0a\x95\x83\x2b\xb4\x9e\x1f\xaf\x0e\xc7\x73\x24\x43\x85\x6e\xa3\xcd\xea\x6c\x96\x52\x39\x34\x0a\x1d\x08\x47\xe2\x56\x26\x1f\x90\xb5\x89\x1b\x92\x54\xa8\x14\xf3\xbc\xf3\xd6\xbe\xfe\xfb\x14\xde\xf8\x39\xe4\x80\x9a\x95\x63\x19\xcc\x85\xec\xa6\xfe\xb6\x09\x60\x32\x99\x85\xb3\x58\x94\x39\x3a\x04\x5b\xd1\x96\xce\xab\x3c\xdf\x4e\xe1\xa6\x52\xf0\x50\xa7\x3f\x75\x66\xf0\x40\xf7\x9d\xc1\x42\xaf\x91\x7c\xa3\x93\x22\xcf\xb7\x4d\xe6\x28\xac\x45\xd7\xbf\x0b\x2d\xa4\x3e\x0d\x4d\xac\x13\xae\xea\x8a\x16\x9f\x3f\x7f\xfe\xfc\xd5\xab\x57\xaf\x5a\x7b\xd1\x92\xe1\x96\x97\x02\x4d\xa0\x89\xa3\xb8\x72\x01\x05\xb3\x31\x2a\x8a\xaa\xc9\x20\x54\x5d\xbc\x72\xfa\x8d\xec\xfc\xbd\x6e\xaf\x1d\xcf\xa4\x77\xbf\xef\xda\x21\x6b\xef\x8e\x8f\xe6\x37\xa4\xbf\x3d\x96\x67\x68\x30\xd5\x45\x21\x54\x96\x70\xea\xc8\xb7\x35\x79\xb9\x44\xb8\x84\xe2\xad\x0e\xa6\x8f\x8f\xd3\xb4\xc8\x76\xbb\x90\x70\x3e\x3e\x4e\x69\xa1\xdb\x96\xb8\xdb\xb1\xa7\xa4\xb5\xbb\xdd\xfd\x74\xda\xcb\x9b\x83\xe4\x6d\x12\xed\x79\xa0\xd8\xf6\xf8\x48\x21\x7b\x60\x40\x20\x77\xbb\x7b\x58\x8a\x50\x4e\x69\x0b\x5c\x9f\x90\xf1\xdc\xbb\xab\x73\x6f\xe3\x38\x1c\x05\x30\x9d\xf6\xa4\xda\x81\x45\xdc\xd0\x1f\x29\x62\x43\x73\x8c\x90\x71\x76\xb7\x98\x77\xcd\x8c\xa3\x82\xf6\xca\x99\x61\x89\x2a\x43\x95\x9e\xa2\xce\x66\xd1\xf9\x7c\x9a\x23\xd2\xa9\xd3\xb7\x47\xd9\x7c\x8f\xe1\x1c\x47\x41\x8e\xa1\x32\x5d\x71\xd9\xdb\xbd\x4a\xcf\x71\xd1\xff\x1f\xef\x88\x28\xcf\x69\x76\xf2\x7d\x3b\xf8\xd4\xcd\xfd\x98\x3d\x1c\x79\x32\xba\x90\xf4\xef\xe3\xdd\x41\xcd\xee\x9c\x9d\xec\x43\x15\x2a\x04\xe7\xde\x39\x8c\xc8\xdf\x00\x75\x05\xa2\x0f\x0b\x64\x95\xa1\x9d\x0c\x6c\xdb\xf1\xcf\x9f\x67\x6f\x51\xc6\xb9\xae\x54\x96\x04\xbc\xc1\x53\x75\x1a\x40\x8e\xae\xd3\x07\x6f\x96\x32\x5d\xc2\x86\xbb\x14\x84\x2b\xf3\x71\xa3\x5b\x22\xa4\x95\x31\xa4\x98\x28\x60\x2c\x9a\xf0\x25\xe5\x3f\x13\x05\x61\x59\x16\xd2\xdf\xe8\xb0\x20\xd4\xd4\x92\x50\xac\xed\xaa\x77\xfb\x51\x4e\x26\xa0\x55\xef\x33\xc8\x75\x8c\x6c\x02\x22\x6f\x87\xbe\xf5\xb6\x11\x0e\x53\xaf\x08\x4c\x40\x18\xac\x75\x7d\xd1\x58\x3a\x64\xd2\x60\xea\x82\xf5\x1b\x5f\xed\x1e\xea\x23\x5c\xde\xdc\x5c\xdf\xdc\x76\xe0\x7e\x75\xf8\x0f\xfc\x74\x78\x32\xf0\xea\x55\xcf\xf5\x63\xcc\xfe\x41\x5b\x29\xbd\x51\x09\x45\x0a\xc3\x47\x9d\x66\x91\xaa\xc2\xaa\x29\x34\x0d\x02\xd0\x2a\xdf\x82\xad\x4a\xdf\xed\xba\xe0\xb2\xf2\xd4\x6e\xad\xc3\x02\x66\x52\x65\x52\x2d\x2c\x68\x03\x0b\xe9\x96\xd5\x6c\x9a\xea\xa2\x2e\xaa\xf7\xdf\x97\xc6\xc4\x3b\x33\x35\x28\x5c\x17\x4c\xee\x3e\x02\x4f\xd9\x33\xcb\x8d\x74\x4b\xe0\xb6\x25\x14\x68\xad\x58\xe0\x4b\x1a\x44\x63\x76\x3b\x2e\xde\xfb\xb1\x54\x67\x7e\x80\x3e\x0c\x64\x33\x2d\x48\xfe\xac\xf4\x42\xca\x9e\x9c\x94\x3f\x09\xd2\x1c\x31\x4b\xa4\x5a\xeb\x55\x17\xa0\x77\xec\xb6\xc8\x5d\xf8\x69\x7c\x20\x69\x19\x6c\x96\xdc\x00\x0b\x48\x9d\x6f\x3e\x86\xa1\x3f\x07\xed\x0a\xb7\x75\x0d\x85\xe2\x5d\xe1\xb4\xe9\xab\x0f\xd5\x73\xb8\xdc\xf0\x35\x2a\xf3\x9e\xec\x31\xd0\x19\xe4\x19\x4b\xa9\x89\xd2\xce\x3b\xbb\x0e\x86\x1f\xda\x35\x57\xf6\xd5\x3c\x9b\xf2\x5d\x2e\x7a\xb6\x23\xea\x21\xa6\x1c\xbd\x17\xd2\x16\xc2\xa5\x5d\xe1\x3b\x09\x58\x9b\x07\x2d\xc8\x98\x45\x16\xfd\xa9\x54\x87\xc5\x7d\x3f\x1e\x30\x40\xa6\xd1\x17\x96\x98\x09\x6f\x2b\xbb\x37\x9a\x54\xb4\x88\xec\xd5\x92\xfd\x68\x14\xa3\x5f\x88\x90\xff\x93\x79\x89\x5c\x76\xa9\xed\xca\x8f\xd2\x31\x0f\x5b\x52\x97\x6d\x89\x57\xf8\x4c\x58\x9a\xde\xea\x1e\x2a\x6d\x18\xbb\xe0\x2e\x38\xaf\xf1\x1f\xc7\xe8\x39\x42\x1c\x50\xf5\xcd\x29\x80\x0e\xf4\xca\x47\xc1\x23\xfa\xd9\x82\xaf\xf2\x78\x55\xe2\x37\x87\xca\x46\xd0\xf8\x8d\xef\x30\x12\xe7\x7b\x44\xb1\xc9\x02\xbb\x0a\x98\xcd\x51\x5e\xa0\xef\xde\x06\xdf\xdb\x94\xca\x43\xb1\xa6\xb9\xc9\xe8\x7e\x93\x69\xeb\xf8\x8e\xd6\xa9\x87\x9e\x78\x89\xf9\xf4\xd4\xdc\x3a\xf0\xed\x09\xcc\x71\x21\xa9\xb1\xd1\xb2\x50\xdb\xda\x36\xc8\x89\xb4\xb6\x7d\x50\xaf\xa1\x88\x5a\x43\x18\x14\xa3\x32\xf9\xe9\x96\xeb\x0b\x5b\x21\x85\xbe\xbb\x79\xcf\x08\xb8\xd4\xc5\x47\xe9\xeb\x5e\x8e\x7d\xef\x5b\xf2\x63\x80\x14\x22\x9f\x6b\x53\x74\x6a\xee\x43\x1c\xef\x43\x30\x85\xcf\x66\x0b\x62\x21\xa4\x1a\x4a\xe9\x8d\x49\xfe\x65\xb5\xaa\x9d\x6d\x5a\x64\x3d\x9d\x5b\x2e\xee\x4b\x55\x56\x0e\x32\xe1\x04\x7c\x08\xda\xf8\x39\x2d\xb2\x9f\xc9\xf5\xf6\x73\x12\xa5\x6c\x2a\xf0\xde\x68\xb4\x49\x2c\xfe\x5e\xa1\xea\x2c\x91\xfb\x47\x2f\x17\xb7\x61\xd6\xfe\x61\x69\xf9\x77\x6f\xcf\x7b\x3e\x6c\xc2\x55\x6f\x5e\x50\x4a\x9a\x9d\x0a\xe5\x43\x91\x19\xfa\x60\x00\x33\x98\x09\x8b\x19\x68\xd5\x32\xb2\x8b\x08\xe9\x08\xcd\x29\x7c\xca\x51\x58\x84\xaa\xcc\x84\xc3\x03\xa7\xc9\x97\x67\x9a\x57\xd9\x21\x4e\x61\x41\xc0\x06\x67\x87\x1c\x06\x77\x27\xe8\xa9\xdf\x40\x5f\x1f\xf1\x23\xa4\x9a\xb0\x6a\x0a\x57\xce\x67\x5f\xda\x2d\xf9\x2e\xe6\x53\x35\xaf\x54\x38\x53\xf1\xe0\x4d\xbc\x76\xb4\xc2\xd0\x76\x2d\x88\x0a\x7e\x2b\x31\x1d\x73\x92\x02\xd6\xb8\xc5\xd1\x3f\x90\x63\x4c\x88\xeb\x77\xa2\x67\xe0\x8d\x93\x20\xb2\xba\x72\x6d\x67\x31\x85\x2f\x8d\x13\x8e\xae\x82\x96\x4d\x6a\x77\x42\x06\x13\x83\x85\x81\x6b\x2d\x88\x13\xd5\x94\x50\xb6\xe2\x30\xc9\xa4\x19\xe5\xe4\x8e\x8a\x45\x72\xd4\x7a\x2f\xb5\x54\x3e\xa4\xf2\x29\x9a\xc3\x90\x18\x50\x20\xd3\x1c\xe7\x09\xa5\x80\x51\x2a\xcb\x39\xc5\xbe\x87\xeb\x17\x23\x15\x94\xb0\x8b\x35\x26\x99\x4e\x57\xd8\xf5\x40\xef\x8d\x50\x4c\x55\xac\x11\xde\xf2\x44\x90\x05\x07\xe0\x03\x81\xa5\xcc\x31\x11\xb9\x41\x91\x6d\x13\xfc\x26\x6d\xe7\xdb\x86\x77\x74\x42\xc2\x4c\xf0\x33\x07\x68\x67\x72\x3e\x47\x4a\x08\x9b\xac\x44\xa2\xf5\x06\x65\x29\x72\xca\xc5\x0c\xbb\x9a\x23\xd7\x0a\x81\xec\x30\xc7\xc3\xb4\xbf\xf9\x1a\xb7\xc4\x6d\x34\xd4\xcc\xb8\x69\xe2\x75\x4d\xb3\xe3\x37\xef\x58\x97\xd2\xc2\x4a\xaa\x8c\x0e\x48\xb0\xc5\xd0\x94\x7c\x72\xf1\x1c\x78\x0a\xf2\x2f\x2d\x20\x0c\xfd\x08\x9c\xf0\xbe\xec\x89\x5f\x61\x63\xe1\x86\x3a\xc5\x6e\x11\x14\xc4\xb4\x06\x59\x06\x8b\xa5\x30\xf4\x85\xa9\x5b\x1f\x33\x1d\x97\x6d\x9c\xf1\x87\x43\x96\x90\xc8\xa7\xda\xb9\xd2\x5e\x53\x16\xdd\x69\xcc\x4e\xf5\x15\x81\x59\xeb\xbc\x0f\xf0\x8b\xde\x37\x59\x8a\x35\x79\x2a\xb6\x25\x5f\x48\xb7\x01\x4c\xd7\x13\xd2\xf6\x35\x14\xc9\x04\x7f\x15\x4d\x3b\x3e\x4a\x20\x9f\xaf\xa2\x33\xf2\x89\x3e\x87\x62\xb4\x7f\x21\xbb\x9d\xc6\x37\x9d\xe1\x25\x9b\xa7\x67\xf9\xa2\x22\x63\x5a\xd2\x69\xe4\x05\x1c\xb1\x4b\x05\x22\xda\x74\xa4\x30\x70\xf8\xb5\x9a\xe7\x32\x25\x2f\x93\x84\xc4\x8d\x24\x34\xda\xda\x58\x09\xe9\x3a\xae\xad\xf3\x13\x53\x3e\x12\x3a\x7c\x0e\x32\x47\x59\x39\xf8\x2d\xaa\xdc\xc9\x32\xf7\x59\xa3\x3f\x3c\xf4\x29\x44\x24\x9e\x39\xbb\xaf\x78\xf7\x1e\x94\x41\x5c\xbb\x8b\x3b\x01\xe9\xfc\x89\x2a\xb5\xb5\x72\xe6\x4f\x01\x2b\x24\x0a\xe2\xb9\x36\xea\x99\x51\x5c\x52\x5b\x3a\x83\x78\x72\x08\x83\x24\xcc\xe6\x49\xd2\x73\x82\x32\x4d\x95\xe3\x19\x9a\xa4\x65\x21\xbb\xc8\xf1\x98\x0e\x1b\xfc\xd1\xdf\x1f\x04\x12\x2a\xbb\xa0\x43\x1d\x55\xb0\xbf\x25\x53\xff\x20\xf8\x47\x28\x99\x05\x3c\xa6\x61\x61\xad\x4e\x25\x93\x3e\x8e\xf8\x22\x82\x3b\x54\x3e\x0b\x7f\x96\xe6\x85\x69\xde\x54\x70\x33\xbb\xf3\x05\x67\x68\x90\x41\x2e\x15\x82\x30\x8b\x8a\x93\x62\x52\xa1\x59\xec\x76\xed\x78\x91\xe9\x4c\xa0\xf4\x10\xbd\x2f\xdf\xb2\x3e\x78\xe4\x04\x44\x2b\xdc\xfe\x30\x54\x2b\xdc\x5e\x30\x2d\x28\x85\x34\x4f\xe0\xed\x0f\xb3\x7f\xc7\x6f\xa2\x28\x29\xd8\xad\xc9\xad\x70\x3b\x4a\x86\x10\x60\x0d\x3f\xfd\xe9\x12\xe0\x97\xc8\xf2\x57\xf6\xc1\x81\x9e\x7f\x17\xe4\x2f\xae\xba\x14\x32\xf1\x05\xc9\x56\x7a\x19\x8d\x23\x8a\x26\xc0\xaf\xe6\x24\xa3\x21\x31\x54\x7b\xc0\xdf\x2b\x69\xb8\xb6\x55\x56\xce\x8e\xb2\x92\x9b\xb0\xc6\xa7\x32\xfe\xb4\xec\x59\x85\x05\x5c\xa3\x02\x31\x77\x68\x40\x94\x65\xce\xfd\x13\x7e\xd8\x50\x6a\x4f\x27\xf4\x52\x51\xad\xa7\xb0\x16\x46\x8a\x59\x8e\x8d\xc1\x5b\x74\x35\xc5\xfd\x29\xf1\x00\xfb\x2c\xaa\x79\x37\x15\x4f\xc3\xc5\x61\x29\x47\x1b\x4a\x4e\xde\xbc\xbf\xe2\xcd\x9e\xeb\x3c\xd7\x1b\x8f\x86\xb0\xb3\x3e\xfd\xc7\xdd\x6e\x5c\xba\x5e\x0a\x63\xd1\xf4\xfe\x58\xa3\xa9\x1f\x18\x74\x46\x22\xbb\x83\x50\x36\xa8\xf7\x2f\x70\x3b\x64\xf7\xe5\xf5\xcd\xc7\xab\x8f\x7f\x1d\x5f\xa8\x8e\x0b\x4e\x2b\x55\x6f\x84\x51\x75\x37\x9c\x50\x76\xe5\xac\x37\x34\x46\x0a\xfb\x1a\xdb\xe0\xf7\x61\x63\x59\x03\x2f\x7d\xed\x80\x24\xba\xef\xcb\x6f\x02\x3f\x7e\x16\x74\x72\xb5\xa0\xfd\x8a\xb8\x55\x1d\x84\x0c\xdd\x70\x66\xc5\x9c\xc9\xc5\x64\x58\x1a\x4c\xc9\xf1\x26\x06\xcb\x5c\xa4\x9d\xa9\xc7\xe7\xa5\xe7\xa3\xf3\x2c\xd4\x41\xf9\x15\x96\x8f\x2c\xf7\xdb\xff\x1b\x99\xe7\x60\xb5\x56\x94\x13\x37\x1c\x6a\xc7\x53\x59\x1f\xb9\x72\x03\x07\x37\x7b\xe4\xac\x43\x31\x12\x7b\xd0\xc4\x39\x25\x5c\xbb\xd4\x55\x9e\x11\x3c\x0a\x24\xe1\xce\xfa\x5e\xa6\x6f\xb4\x78\x5f\x48\xb3\xf9\xd3\xf0\x23\x86\x1a\x11\xcf\x1f\xd8\x4a\xc2\xe5\x39\xd0\xd9\x7b\x5a\x5a\xa6\x8b\xd3\xe7\xa8\x27\xb0\xe4\xdc\x51\xac\x7b\x37\x6f\x88\x29\xaf\x8f\x1b\x1a\x9b\x66\xf1\x17\x1a\xed\x9f\x66\x0c\x03\xcb\x65\x21\x5d\x22\x17\x4a\x9b\x4e\x48\xd1\xa4\x43\x2c\xcb\x4b\x7c\x6e\x44\x9f\x0e\xcb\xc7\x94\xba\x7b\x72\x63\xb9\xa7\x4b\xa1\x16\x48\xfe\xb1\x03\xc0\xfb\x9a\x63\x5d\xaf\xb6\x51\xee\x7c\xeb\xfb\xa5\x35\x8d\x29\x5c\x11\x7b\xa9\x16\x63\x6c\x81\x11\xd8\x24\xd7\x8b\xc4\xca\x3f\xba\x00\xe4\x7a\x71\x2b\xff\xe0\xb2\x88\x5f\xb0\x27\x71\x63\xa2\x42\xf1\x35\x41\x21\x66\xfc\xa9\xca\x0b\x8e\xed\x7f\x7b\x31\x1a\x4a\x81\x85\x36\xdb\x3e\x34\x7e\xc6\xb9\x80\x7e\xfb\xcb\x7f\x32\xa4\xff\xf8\xed\x2f\xa3\x31\x91\xef\xd7\x55\x57\xbd\x39\x8c\x9e\x05\xe6\x85\xd7\xcf\xbf\xbf\xa0\x7f\xc3\x78\xb8\x75\x98\x94\x46\x97\x68\x9c\xec\x0c\xb9\xa3\x07\x6c\xf9\x2b\xdf\x70\xf6\xd7\x59\x68\x39\xfb\x3e\x64\x43\x2c\xb6\xa6\x8f\xfb\xc4\xe8\x12\x33\xcd\x06\x47\x9e\x51\x3a\xd0\x95\xb3\x32\xe3\x8d\xf8\x6c\xc4\x5a\x5a\x98\x55\x32\xcf\xfa\xfb\x96\x2c\x8a\x77\x07\x86\xcc\x76\x94\x2b\xa8\xad\x7f\xcf\x21\xa8\x03\x87\x1e\xb4\xcd\xdd\x58\xca\x0d\xfc\x5f\xa3\xba\x1f\x1f\xa7\x85\x54\xa1\x37\x47\x5f\x44\x3a\x50\xe9\x67\xa8\x31\x76\xf0\x87\xac\xcb\x4d\xc4\xee\x49\x98\x45\xf1\xc3\x41\x23\xe5\x48\xb1\xb5\xb3\x57\x72\x56\x83\x84\xd1\x86\xf6\x2b\x27\xf4\xbd\x15\xa9\x27\x9d\xb5\x3d\x17\x73\x50\xaa\x6a\x62\xbb\x1c\x53\x07\x42\x69\xb7\x0c\x99\xe4\x30\xa4\x98\x21\x0e\x36\x17\x3f\x3f\xa9\xfd\xb4\x03\x86\xf0\xf8\x1e\x33\x50\x7a\x5c\x87\x9c\xb9\xb7\x1e\xa7\xb0\x52\xc6\x80\x38\xfa\x74\x23\xdc\x38\x87\x31\xea\x26\x74\x70\x7c\x1f\xf4\x58\x05\x6b\x84\x86\x5a\x3f\xa1\x49\xf4\x1a\x8d\x91\x59\x86\x5d\x75\x18\x42\xd8\xfe\x45\x4d\xf3\xb8\xa8\x59\x1a\x63\x85\xf6\xdb\x91\xb1\x1b\x95\x48\x9b\x94\xd5\x2c\x97\x5d\xbf\x15\xf4\xbb\xc2\x73\x63\x1f\xc2\xff\x68\x48\x58\xf0\x0b\x9f\xe4\xb8\x94\x6c\x7b\xdf\x32\x43\x58\x4b\x9f\x6e\xd3\x39\x4c\x05\x7b\x1a\xff\x6a\x1c\x33\x98\x6d\x41\xa8\xad\x56\x3d\x3f\xc2\x61\xac\xb1\x6c\x86\xb3\x04\xbf\xf1\x6b\xe1\xfe\x6b\xfc\x69\xd5\x8c\x1b\x02\xdc\x96\x50\x19\xfd\xff\xdc\xd3\x79\xd2\x11\xa0\x83\x40\xaa\xdc\xe0\x6c\xe2\x2f\xf7\xf0\x2d\x2c\xe8\x49\xd2\x3c\xd2\x56\xe7\x87\xe0\xf6\xd6\xd8\xba\xfa\x01\x64\x61\xed\x26\xca\xa8\xf6\x8e\x4f\xd3\x9a\x45\x53\x78\xa3\xd5\x9a\xdc\x7d\x48\x09\x1a\x16\x4e\xef\x91\x1f\x36\xd9\x43\xa9\x06\x3a\x59\x7d\xb5\xc3\x46\xb6\x38\x70\xa2\x74\x75\x43\xe9\x50\xbe\x36\xa3\x5a\xc2\xc1\xf6\xd3\xdb\xcb\xff\xba\xfb\xeb\xe8\x14\x8e\x67\x9f\x96\xbf\x65\xb3\x45\x62\x51\x98\x74\x49\xda\x8b\x87\xbf\x6e\x7f\x74\xaa\x30\xac\xa8\x0f\xff\x7e\xc3\x24\xfa\x49\xba\x3b\x9a\x4b\x72\x20\x0c\x24\x28\x87\x1e\xf2\x47\x7b\xc7\x33\x3d\x23\x41\xab\xaf\x0e\xff\x00\xaf\xe7\xb7\xe3\x6f\x8f\xbc\x02\x09\x1a\x79\x09\xef\x18\x41\xf3\x53\x65\x2e\x06\x12\xb1\x53\x01\xf4\xff\xec\xef\x74\x0c\xed\x37\x7e\xf1\x4d\x6a\x80\xf4\xec\xfe\xd9\xff\x06\x00\x00\xff\xff\x64\x87\x26\x11\x70\x42\x00\x00")
+var _wski18nResourcesEn_usAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x5c\x5f\xaf\xdb\xb6\x92\x7f\xcf\xa7\x18\x14\x0b\xb4\x05\x1c\x9f\xf6\x2e\x16\x58\x14\xc8\x43\x36\x49\x7b\xcf\xde\xa4\x09\x4e\x92\x1b\x5c\x64\x03\x85\x96\xc6\x36\xaf\x25\x52\x97\xa4\xec\xb8\x07\xfe\xee\x8b\x19\x92\x92\xec\x63\x4a\xb2\x93\xee\xf6\x25\x3e\x26\x39\xf3\x9b\xe1\x70\x38\x7f\xe8\x7e\x7c\x04\x70\xff\x08\x00\xe0\x3b\x59\x7c\xf7\x0b\x7c\x57\xd9\x55\x56\x1b\x5c\xca\x2f\x19\x1a\xa3\xcd\x77\x33\x3f\xea\x8c\x50\xb6\x14\x4e\x6a\x45\xd3\x5e\xf0\xd8\x23\x80\xc3\x6c\x80\x82\x54\x4b\x9d\x20\x70\x4b\x43\x63\xeb\x6d\x93\xe7\x68\x6d\x82\xc4\xdb\x30\x3a\x46\x65\x27\x8c\x92\x6a\x95\xa0\xf2\x21\x8c\x26\xa9\xe4\x55\x91\x15\x68\xf3\xac\xd4\x6a\x95\x19\xac\xb5\x71\x09\x5a\x77\x3c\x68\x41\x2b\x28\xb0\x2e\xf5\x1e\x0b\x40\xe5\xa4\x93\x68\xe1\x07\x39\xc7\xf9\x0c\xde\x88\x7c\x23\x56\x68\x67\xf0\x34\xa7\x75\x76\x06\xef\x8c\x5c\xad\xd0\xd8\x19\xdc\x35\x25\x8d\xa0\xcb\xe7\x3f\x82\xb0\xb0\xc3\xb2\xa4\x7f\x0d\xe6\xa8\x1c\xaf\xd8\x32\x37\x0b\x52\x81\x5b\x23\xd8\x1a\x73\xb9\x94\x58\x80\x12\x15\xda\x5a\xe4\x38\x9f\x2c\x8b\xd6\x29\x49\x9e\x82\xd3\xba\x04\xa7\x83\x20\x33\x68\x94\xff\x04\x42\x15\x60\xf7\x2a\x07\x5d\xa3\xda\xad\xa5\xdd\x40\x1d\x64\x82\xc6\x4a\xb5\x02\x01\x95\x50\x72\x89\xd6\xf1\x64\x5d\x13\x55\x51\x06\x52\x15\x49\xb2\x94\x65\x3b\xfd\x1f\x4f\x5f\xbd\x9c\x82\xd9\xae\xb5\x71\xc3\x1b\xf0\xc6\xe8\xad\x2c\xd0\x82\x00\xdb\x54\x95\x30\x7b\xf0\xf3\x41\x2f\x61\xb7\x16\xee\x7b\x0b\x0b\xc4\xde\xf6\x7c\x9d\x1a\x03\xa4\x51\x3d\x5a\x74\xa4\xcb\x35\x96\x75\x60\x0d\x7b\xdd\x98\x49\x2a\x24\x55\x4d\xc7\xb2\x45\x63\x89\x77\x4a\x3f\x52\x39\x16\x38\xcc\x03\xd5\x54\x0b\x34\xac\x1e\xbb\xf1\xd0\x26\xf3\x22\x2b\x18\xb5\x1f\x36\x15\x16\xf6\x75\x8d\xea\xc3\xb1\xb0\x0b\x74\x3b\xda\x8e\xbc\x94\x64\x15\x6c\x5a\x68\xb6\x68\x26\xdb\xf0\x74\x0c\x3d\xeb\x23\x3e\xd1\x9e\xf9\x0b\xbd\xfc\xbf\xb4\xe6\x65\x29\x56\x99\xa8\x65\xb6\xd6\x36\x65\x38\x1e\xca\xd3\x37\xb7\xf0\xf9\xaf\xaf\xdf\xbe\xfb\x3c\x91\xe2\xf0\xf6\xf7\x88\xfe\xfd\xc5\xdd\xdb\xdb\xd7\xbf\x4f\xa2\xdb\xb8\x75\xb6\xc1\x7d\x82\x28\x0d\x6b\x23\xff\xe0\x2f\xe0\xf3\xdf\x5e\xfc\x63\x0a\xd1\x1c\x8d\xcb\x48\x6f\x09\xaa\xb5\x70\x6b\xda\x16\xb2\xd5\x39\x4d\x66\x25\x4f\x21\xac\xd5\x52\xa6\x9c\xbd\x1f\x64\x52\xf0\x43\x81\x4b\xd1\x94\x0e\xa4\x85\x7f\xfb\xeb\xeb\x57\x2f\x6e\xe6\x3b\xbb\xa9\x8d\xae\xed\x8f\x53\xb4\x52\x96\x7a\x97\x05\x1a\xa9\x2b\x8a\x27\x41\x3b\x69\x9c\x6a\x67\x54\x43\x7a\x69\xdd\x72\x6b\x7d\x13\x48\xd7\x06\xb7\x12\x77\x09\xba\x76\xcd\x40\x23\xd1\x9b\xa3\xe3\x51\x97\x42\x4d\xe0\xb0\xc1\xfd\xe4\x2d\xdd\xe0\x7e\x2a\x70\xaf\xe9\x4a\x28\xb1\xc2\x62\x50\xd1\xb5\xd1\xff\xc4\xdc\x75\x77\xae\xd3\xb0\x40\xa8\x84\xd9\x60\x01\x91\xc2\x14\x55\x31\x9d\x8c\xee\x82\x94\x30\x81\x15\x4f\x19\xa7\x18\x5d\xc8\xc8\xae\x1e\x39\xfd\x09\x64\xdb\xcb\x2a\x41\xb7\x1b\x9f\x2c\xf4\x08\x42\xef\x9e\x4b\xb4\x36\x6a\x7b\x02\x69\xeb\x8c\x4c\x52\xf6\x5b\xd7\x58\x34\x74\x50\xa4\xc2\x02\x4c\xa3\x9c\xac\xda\x4b\x6a\x02\x07\x67\xd2\x4a\xe0\x31\xd0\x8d\xab\x9b\x29\x60\xbd\xb9\x6d\xd1\x2c\xb4\x4d\x91\x0c\xa3\x97\x12\xad\x85\x11\x55\x52\xc1\x46\x54\xe8\xd0\xc0\x56\x94\x0d\x72\x80\x47\xce\x14\xfe\xfe\xf4\xe5\xfb\x17\x9f\x61\xa9\x4d\x25\x2e\x64\x35\x74\x1a\x3f\xff\x7a\xfb\xf2\xc5\x67\xc8\xb5\x72\x42\x52\x04\x0c\xe7\x10\xfc\xf7\xdb\xd7\xbf\x8f\xb3\x66\xaf\x9a\x55\xd2\xd2\x0d\xc8\xf7\x45\xfa\xba\x78\xb7\x46\xa0\x19\x74\x46\x73\x7f\x67\x90\x2f\x90\x16\x94\x76\xe0\x49\x35\x06\x8b\xf9\xff\x0c\xed\xfb\x09\xc7\x5a\x0e\x5c\xa5\xc4\x91\xee\x3c\x9a\xf2\x75\x7c\xc6\x8e\x1b\x71\x6a\xe7\x5c\xc7\x2a\x88\x32\x94\x3a\x9d\xca\xf3\xf1\xfe\x7e\x4e\x9f\x0f\x87\x4f\x33\x58\x1a\x5d\xc1\xfd\xfd\xdc\xea\xc6\xe4\x78\x38\x4c\xe2\xe9\x37\x6c\x8c\x27\x4d\x8b\x7b\x65\xd1\x5d\xc7\xab\x55\xcf\x18\xb7\x23\x3d\x92\x88\xed\x17\xd7\xcb\x59\xcb\xd5\x2e\x13\x9c\x35\x66\x4e\x6f\x50\x8d\x8a\x4c\x2b\xc0\xaf\x00\x5e\x71\x9d\xf0\x8d\xaa\x84\xb1\x6b\x51\x66\xa5\xce\x45\x99\xe0\xf8\x3e\xce\xea\x85\xca\xc1\x15\x5a\xcf\x8f\x57\x87\xe3\x39\x91\xa1\x42\xb7\xd3\x66\x73\x35\x4b\xa9\x1c\x1a\x85\x0e\x84\x23\x71\x1b\x53\x8e\xc8\xda\xc5\x0d\x59\x2e\x54\x8e\x65\x99\xbc\xb5\x5f\xff\x6d\x0e\xcf\xfc\x1c\x72\x40\xdd\xca\xa9\x0c\x96\x42\xa6\xa9\x3f\xef\x02\x98\x42\x16\xe1\x2c\x56\x75\x89\x0e\xc1\x36\xb4\xa5\xcb\xa6\x2c\xf7\x73\xb8\x6b\x14\x7c\x6e\xd3\x9f\x36\x33\xf8\x4c\xf7\x9d\xc1\x4a\x6f\x91\x7c\xa3\x93\xa2\x2c\xf7\x5d\xe6\x28\xac\x45\x37\xbc\x0b\x3d\xa4\x3e\x0d\xcd\xac\x13\xae\x49\x45\x8b\x8f\x1f\x3f\x7e\xfc\xe4\xc9\x93\x27\xbd\xbd\xe8\xc9\xf0\x96\x97\x02\x4d\xa0\x89\x93\xb8\x72\x01\x05\x8b\x29\x2a\x8a\xaa\x29\x20\x54\x5d\xbc\x72\x86\x8d\xec\xfa\xbd\xee\xaf\x9d\xce\x64\x70\xbf\xdf\xf7\x43\xd6\xc1\x1d\x9f\xcc\x6f\x4c\x7f\x47\x2c\xaf\xd0\x60\xae\xab\x4a\xa8\x22\xe3\xd4\x91\x6f\x6b\xf2\x72\x99\x70\x19\xc5\x5b\x09\xa6\xf7\xf7\xf3\xbc\x2a\x0e\x87\x90\x70\xde\xdf\xcf\x69\xa1\xdb\xd7\x78\x38\xb0\xa7\xa4\xb5\x87\xc3\xa7\xf9\x7c\x90\x37\x07\xc9\xfb\x2c\xda\xf3\x48\xb1\xed\xfe\x9e\x42\xf6\xc0\x80\x40\x1e\x0e\x9f\x60\x2d\x42\x39\xa5\x2f\x70\x7b\x42\xa6\x73\x4f\x57\xe7\x9e\xc7\x71\x38\x0b\x60\x3e\x1f\x48\xb5\x03\x8b\xb8\xa1\xdf\x52\xc4\x8e\xe6\x14\x21\xe3\xec\xb4\x98\xef\xbb\x19\x67\x05\x1d\x94\xb3\xc0\x1a\x55\x81\x2a\xbf\x44\x9d\xdd\xa2\xeb\xf9\x74\x47\x24\xa9\xd3\xe7\x67\xd9\x7c\x8d\xe1\x9c\x47\x41\x8e\xa1\x31\xa9\xb8\xec\xf9\x51\xa5\xe7\xbc\xe8\xff\x8f\x77\x44\x94\xe7\x32\x3b\xf9\xba\x1d\x7c\xe8\xe6\xbe\xcd\x1e\x4e\x3c\x19\x29\x24\xc3\xfb\xf8\xfe\xa4\x66\x77\xcd\x4e\x0e\xa1\x0a\x15\x82\x6b\xef\x1c\x46\xe4\x6f\x80\xb6\x02\x31\x84\x05\x8a\xc6\xd0\x4e\x06\xb6\xfd\xf8\xe7\xcf\xb3\xb7\x28\xe3\x52\x37\xaa\xc8\x02\xde\xe0\xa9\x92\x06\x50\xa2\x4b\xfa\xe0\xdd\x5a\xe6\x6b\xd8\x71\x97\x82\x70\x15\x3e\x6e\x74\x6b\x84\xbc\x31\x86\x14\x13\x05\x8c\x45\x13\xbe\xa4\xfc\x67\xa2\x20\x2c\xcb\x42\xfa\x9b\x1c\x16\x84\x9a\x5a\x16\x8a\xb5\xa9\x7a\xb7\x1f\xe5\x64\x02\x7a\xf5\x3e\x83\x5c\xc7\x28\x66\x20\xca\x7e\xe8\xdb\x6e\x1b\xe1\x30\xed\x8a\xc0\x04\x84\xc1\x56\xd7\x37\x9d\xa5\x43\x21\x0d\xe6\x2e\x58\xbf\xf1\xd5\xee\xb1\x3e\xc2\x8b\xbb\xbb\xd7\x77\x6f\x13\xb8\x9f\x9c\xfe\x07\x7e\x3a\x3c\x18\x78\xf2\x64\xe0\xfa\x31\xe6\xf8\xa0\x6d\x94\xde\xa9\x8c\x22\x85\xf1\xa3\x4e\xb3\x48\x55\x61\xd5\x1c\xba\x06\x01\x68\x55\xee\xc1\x36\xb5\xef\x76\xdd\x70\x59\x79\x6e\xf7\xd6\x61\x05\x0b\xa9\x0a\xa9\x56\x16\xb4\x81\x95\x74\xeb\x66\x31\xcf\x75\xd5\x16\xd5\x87\xef\x4b\x63\xe2\x9d\x99\x1b\x14\x2e\x05\x93\xbb\x8f\xc0\x53\x8e\xcc\x72\x27\xdd\x1a\xb8\x6d\x09\x15\x5a\x2b\x56\xf8\x0b\x0d\xa2\x31\x87\x03\x17\xef\xfd\x58\xae\x0b\x3f\x40\x1f\x46\xb2\x99\x1e\x24\x7f\x56\x06\x21\x15\x0f\x4e\xca\x9f\x04\x69\x89\x58\x64\x52\x6d\xf5\x26\x05\xe8\x57\x76\x5b\xe4\x2e\xfc\x34\x3e\x90\xb4\x0c\x76\x6b\x6e\x80\x05\xa4\xce\x37\x1f\xc3\xd0\x9f\x83\x76\x83\xfb\xb6\x86\x42\xf1\xae\x70\xda\x0c\xd5\x87\xda\x39\x5c\x6e\xf8\x18\x95\xf9\x89\xec\x31\xd0\x19\xe5\x19\x4b\xa9\x99\xd2\xce\x3b\xbb\x04\xc3\x57\xfd\x9a\x2b\xfb\x6a\x9e\x4d\xf9\x2e\x17\x3d\xfb\x11\xf5\x18\x53\x8e\xde\x2b\x69\x2b\xe1\xf2\x54\xf8\x4e\x02\xb6\xe6\x41\x0b\x0a\x66\x51\x44\x7f\x2a\xd5\x69\x71\xdf\x8f\x07\x0c\x50\x68\xf4\x85\x25\x66\xc2\xdb\xca\xee\x8d\x26\x55\x3d\x22\x47\xb5\x64\x3f\x1a\xc5\x18\x16\x22\xe4\xff\x64\x5e\xa2\x94\x29\xb5\xdd\xfa\x51\x3a\xe6\x61\x4b\xda\xb2\x2d\xf1\x0a\x9f\x09\x4b\xd7\x5b\x3d\x42\xa5\x0d\x63\x17\xdc\x05\xe7\x35\xfe\xe3\x14\x3d\x47\x88\x23\xaa\xbe\xbb\x04\xd0\x89\x5e\xf9\x28\x78\x44\xdf\x5b\xf0\x55\x1e\xaf\x4a\xfc\xe2\x50\xd9\x08\x1a\xbf\xf0\x1d\x46\xe2\x7c\x8d\x28\x36\x5b\x61\xaa\x80\xd9\x1d\xe5\x15\xfa\xee\x6d\xf0\xbd\x5d\xa9\x3c\x14\x6b\xba\x9b\x8c\xee\x37\x99\xf7\x8e\xef\x64\x9d\x7a\xe8\x99\x97\x98\x4f\x4f\xcb\x2d\x81\xef\x48\x60\x8e\x0b\x49\x8d\x9d\x96\x85\xda\xb7\xb6\x41\x4e\xa4\xb7\xed\xa3\x7a\x0d\x45\xd4\x16\xc2\xa8\x18\x8d\x29\x2f\xb7\x5c\x5f\xd8\x0a\x29\xf4\xfb\xbb\x97\x8c\x80\x4b\x5d\x7c\x94\x3e\x1e\xe5\xd8\x9f\x7c\x4b\x7e\x0a\x90\x4a\x94\x4b\x6d\xaa\xa4\xe6\x5e\xc5\xf1\x21\x04\x73\x78\x67\xf6\x20\x56\x42\xaa\xb1\x94\xde\x98\xec\x9f\x56\xab\xd6\xd9\xe6\x55\x31\xd0\xb9\xe5\xe2\xbe\x54\x75\xe3\xa0\x10\x4e\xc0\xab\xa0\x8d\xef\xf3\xaa\xf8\x9e\x5c\xef\x30\x27\x51\xcb\xae\x02\xef\x8d\x46\x9b\xcc\xe2\xbf\x1a\x54\xc9\x12\xb9\x7f\xf4\x72\xf3\x36\xcc\x3a\x3e\x2c\x3d\xff\xee\xed\xf9\xc8\x87\xcd\xb8\xea\xcd\x0b\x6a\x49\xb3\x73\xa1\x7c\x28\xb2\x40\x1f\x0c\x60\x01\x0b\x61\xb1\x00\xad\x7a\x46\x76\x13\x21\x9d\xa1\x39\x87\x37\x25\x0a\x8b\xd0\xd4\x85\x70\x78\xe2\x34\xf9\xf2\xcc\xcb\xa6\x38\xc5\x29\x2c\x08\xd8\xe1\xe2\x94\xc3\xe8\xee\x04\x3d\x0d\x1b\xe8\xd3\x33\x7e\x84\x54\x13\x56\xcd\xe1\xd6\xf9\xec\x4b\xbb\x35\xdf\xc5\x7c\xaa\x96\x8d\x0a\x67\x2a\x1e\xbc\x99\xd7\x8e\x56\x18\xda\xae\x15\x51\xc1\x2f\x35\xe6\x53\x4e\x52\xc0\x1a\xb7\x38\xfa\x07\x72\x8c\x19\x71\xfd\x4a\xf4\x0c\xbc\x73\x12\x44\x56\x37\xae\xef\x2c\xe6\xf0\xa1\x73\xc2\xd1\x55\xd0\xb2\x59\xeb\x4e\xc8\x60\x62\xb0\x30\x72\xad\x05\x71\xa2\x9a\x32\xca\x56\x1c\x66\x85\x34\x93\x9c\xdc\x59\xb1\x48\x8e\x56\xef\xb5\x96\xca\x87\x54\x3e\x45\x73\x18\x12\x03\x0a\x64\xba\xe3\x3c\xa3\x14\x30\x4a\x65\x39\xa7\x38\xf6\x70\xc3\x62\xe4\x82\x12\x76\xb1\xc5\xac\xd0\xf9\x06\x53\x0f\xf4\x9e\x09\xc5\x54\xc5\x16\xe1\x39\x4f\x04\x59\x71\x00\x3e\x12\x58\xca\x12\x33\x51\x1a\x14\xc5\x3e\xc3\x2f\xd2\x26\xdf\x36\xfc\x4a\x27\x24\xcc\x04\x3f\x73\x84\x76\x21\x97\x4b\xa4\x84\xb0\xcb\x4a\x24\x5a\x6f\x50\x96\x22\xa7\x52\x2c\x30\xd5\x1c\x79\xad\x10\xc8\x0e\x4b\x3c\x4d\xfb\xbb\x3f\xe3\x96\xb8\x9d\x86\x96\x19\x37\x4d\xbc\xae\x69\x76\xfc\xcb\x3b\xd6\xb5\xb4\xb0\x91\xaa\xa0\x03\x12\x6c\x31\x34\x25\x1f\x5c\x3c\x27\x9e\x82\xfc\x4b\x0f\x08\x43\x3f\x03\x27\xbc\x2f\x7b\xe0\x57\xd8\x58\xb8\xa1\x4e\xb1\x5b\x04\x05\x31\xad\x41\x96\xc1\x62\x2d\x0c\xfd\xc1\xd4\xad\x8f\x99\xce\xcb\x36\xcd\xf8\xc3\x21\xcb\x48\xe4\x4b\xed\x5c\x69\xaf\x29\x8b\xee\x32\x66\x97\xfa\x8a\xc0\xac\x77\xde\x47\xf8\x45\xef\x9b\xad\xc5\x96\x3c\x15\xdb\x92\x2f\xa4\xdb\x00\x26\xf5\x84\xb4\x7f\x0d\x45\x32\xc1\x5f\x45\xd3\x8e\x8f\x12\xc8\xe7\xab\xe8\x8c\x7c\xa2\xcf\xa1\x18\xed\x5f\xc8\x6e\xe7\xf1\x4d\x67\x78\xc9\xe6\xe9\x59\xbe\xa8\xc8\x98\xd6\x74\x1a\x79\x01\x47\xec\x52\x81\x88\x36\x1d\x29\x8c\x1c\x7e\xad\x96\xa5\xcc\xc9\xcb\x64\x21\x71\x23\x09\x8d\xb6\x36\x56\x42\x52\xc7\xb5\x77\x7e\x62\xca\x47\x42\x87\xcf\x41\xe6\x28\x2b\x07\xbf\x55\x53\x3a\x59\x97\x3e\x6b\xf4\x87\x87\x3e\x85\x88\xc4\x33\x67\xf7\x15\xef\xde\x93\x32\x88\xeb\x77\x71\x67\x20\x9d\x3f\x51\xb5\xb6\x56\x2e\xfc\x29\x60\x85\x44\x41\x3c\xd7\x4e\x3d\x0b\x8a\x4b\x5a\x4b\x67\x10\x0f\x0e\x61\x90\x84\xd9\x3c\x48\x7a\x2e\x50\xa6\x69\x4a\xbc\x42\x93\xb4\x2c\x64\x17\x25\x9e\xd3\x61\x87\x3f\xfa\xfb\x93\x40\x42\x15\x37\x74\xa8\xa3\x0a\x8e\xb7\x64\xee\x1f\x04\x7f\x0b\x25\xb3\x80\xe7\x34\x2c\xac\xd5\xb9\x64\xd2\xe7\x11\xdf\x44\x70\xa7\xca\x67\xe1\xaf\xd2\xbc\x30\xdd\x9b\x0a\x6e\x66\x27\x5f\x70\x86\x06\x19\x94\x52\x21\x08\xb3\x6a\x38\x29\x26\x15\x9a\xd5\xe1\xd0\x8f\x17\x99\xce\x0c\x6a\x0f\xd1\xfb\xf2\x3d\xeb\x83\x47\x2e\x40\xb4\xc1\xfd\x37\x43\xb5\xc1\xfd\x0d\xd3\x82\x5a\x48\xf3\x00\xde\xf1\x30\xfb\x77\xfc\x22\xaa\x9a\x82\xdd\x96\xdc\x06\xf7\x93\x64\x08\x01\xd6\xf8\xd3\x9f\x94\x00\x3f\x44\x96\x3f\xb2\x0f\x0e\xf4\xfc\xbb\x20\x7f\x71\xb5\xa5\x90\x99\x2f\x48\xf6\xd2\xcb\x68\x1c\x51\x34\x01\x7e\x35\x27\x19\x1d\x89\xb1\xda\x03\xfe\xab\x91\x86\x6b\x5b\x75\xe3\xec\x24\x2b\xb9\x0b\x6b\x7c\x2a\xe3\x4f\xcb\x91\x55\x58\xc0\x2d\x2a\x10\x4b\x87\x06\x44\x5d\x97\xdc\x3f\xe1\x87\x0d\xb5\xf6\x74\x42\x2f\x15\xd5\x76\x0e\x5b\x61\xa4\x58\x94\xd8\x19\xbc\x45\xd7\x52\x3c\x9e\x12\x0f\xb0\xcf\xa2\xba\x77\x53\xf1\x34\xdc\x9c\x96\x72\xb4\xa1\xe4\xe4\xd9\xcb\x5b\xde\xec\xa5\x2e\x4b\xbd\xf3\x68\x08\x3b\xeb\xd3\x7f\x3c\x1c\xc6\xb3\xaf\x95\x70\xb8\x13\xfb\x8c\x92\x1e\xee\x18\x8f\x25\x16\x6f\x6e\xe1\x37\xbf\x86\x13\xa5\xae\xc0\x25\x6a\x49\x5f\xc4\x1a\xd3\x99\x70\x9d\xa7\xb6\x4f\xc4\x6c\x28\xfb\x9f\x46\x49\x21\xe5\x30\x48\x4c\xb7\x81\x41\x5b\x29\x3e\xa1\x31\xb1\x0e\x55\x0b\x63\xd1\x0c\xfe\x1c\xa5\xab\x90\x18\x74\x46\x22\x3b\xbc\x50\x18\x69\x2d\x34\x70\x3b\x65\xf7\xe1\xe9\xdd\xef\xb7\xbf\xff\x36\xbd\x14\x1f\x17\x5c\x56\x8c\xdf\x09\xa3\xda\x7e\x3f\xa1\x4c\x65\xe5\x77\x34\x46\x26\xf1\x31\x36\xfa\x3f\x05\xd3\x65\x0d\xfc\xe2\xab\x23\x24\xd1\xa7\xa1\x0c\x2e\xf0\xe3\x87\x4f\x17\xd7\x43\xfa\xef\xa4\x7b\xf5\x4f\x28\xd0\x8d\xe7\x8e\xcc\x99\x9c\x68\x81\xb5\xc1\x9c\xae\x96\xcc\x60\x5d\x8a\x3c\x99\x5c\xbd\x5b\x7b\x3e\xba\x2c\x42\xa5\x97\xdf\x99\xf9\xd8\xf9\xf8\x81\xc3\x4e\x96\x25\x58\xad\x15\x65\xfd\x1d\x87\xd6\xb5\x36\xd6\xc7\xe6\xdc\xa2\xc2\xdd\x11\x39\xeb\x50\x4c\xc4\x1e\x34\x71\x4d\x91\xda\xae\x75\x53\x16\x04\x8f\x42\x65\x78\x6f\x7d\xb7\xd6\xb7\x92\xbc\xb7\xa7\xd9\xfc\x69\xfc\x99\x46\x8b\x88\xe7\x8f\x6c\x25\xe1\xf2\x1c\xc8\xbb\x3c\x2c\x9e\xd3\x59\xf5\xc7\xfa\x02\x96\x9c\x1d\x8b\xed\xe0\xe6\x8d\x31\xe5\xf5\x71\x43\x63\x5b\x30\xfe\x06\xa5\xff\xe3\x93\x71\x60\xa5\xac\xa4\xcb\xe4\x4a\x69\x93\x84\x14\x4d\x3a\x44\xeb\xbc\xc4\x67\x7f\xf4\xe9\xb4\x40\x4e\xde\xce\x93\x9b\xca\x3d\x5f\x0b\xb5\x42\xba\x01\x12\x00\x5e\xb6\x1c\xdb\x8a\xbc\x8d\x72\x97\x7b\xdf\x11\x6e\x69\xcc\xe1\x96\xd8\x4b\xb5\x9a\x62\x0b\x8c\xc0\x66\xa5\x5e\x65\x56\xfe\x91\x02\x50\xea\xd5\x5b\xf9\x07\x17\x7e\xfc\x82\x23\x89\x3b\x13\x15\x8a\x2f\x42\x0a\xa2\xe3\x8f\x71\x7e\xe2\xec\xe5\xe7\x9f\x26\x43\xa9\xb0\xd2\x66\x3f\x84\xc6\xcf\xb8\x16\xd0\xcf\x7f\xf9\x4f\x86\xf4\x1f\x3f\xff\x65\x32\x26\xf2\xfd\xba\x49\x55\xd4\xc3\xe8\x55\x60\x7e\xf2\xfa\xf9\xf7\x9f\xe8\xbf\x71\x3c\xdc\x1c\xcd\x6a\xa3\x6b\x34\x4e\x26\x93\x8a\xe8\x01\x7b\xfe\xca\xb7\xd4\xfd\x75\x16\x9a\xea\xbe\xd3\xda\x11\x8b\xcd\xf7\xf3\x3e\x31\xba\xc4\x42\xb3\xc1\x91\x67\x94\x0e\x74\xe3\xac\x2c\x78\x23\xde\x19\xb1\x95\x16\x16\x8d\x2c\x8b\xe1\xce\x2c\x8b\xe2\xdd\x81\x21\xb3\x9d\xe4\x0a\x5a\xeb\x3f\x72\x08\xea\xc4\xa1\x07\x6d\x73\xbf\x99\xb2\x1f\xff\x6d\x54\xf7\xfd\xfd\xbc\x92\x2a\x74\x1f\xe9\x0f\x91\x8f\xf4\x32\x18\x6a\x8c\x1d\xfc\x21\x4b\xb9\x89\xd8\x1f\x0a\xb3\x28\x7e\x38\x69\x15\x9d\x29\x27\x27\xbb\x41\x57\xb5\x80\x18\x6d\x68\x30\x73\xc9\x62\xb0\xe6\xf6\xa0\x77\x78\xe4\x62\x4e\x8a\x71\x5d\xf4\x5a\x62\xee\x40\x28\xed\xd6\x21\x57\x1e\x87\x14\x73\xe0\xd1\xf6\xe9\xbb\x07\xd5\xad\x7e\xc0\x10\x7e\x5e\x80\x05\x28\x3d\xed\x0d\x00\x73\xef\x3d\xbf\x61\xa5\x4c\x01\x71\xf6\x71\x4a\xb8\x71\x4e\xa3\xf0\x5d\xe8\x51\xf9\x4e\xef\xb9\x1a\xdd\x04\x0d\xf5\x7e\x24\x94\xe9\x2d\x1a\x23\x8b\x02\x53\x95\x26\x42\xd8\xff\xcd\x50\xf7\x7c\xaa\x5b\x1a\x63\x85\xfe\xeb\x98\xa9\x1b\x95\x49\x9b\xd5\xcd\xa2\x94\xa9\x5f\x43\xfa\x5d\xe1\xb9\xb1\xd3\xe2\x7f\x16\x45\xb1\x3d\x2f\x7c\x90\xc5\xcf\xc8\x5d\xb0\x6f\x59\x20\x6c\xa5\x2f\x28\xd0\x39\xcc\x05\x7b\x1a\xff\x2e\x1e\x0b\x58\xec\x41\xa8\xbd\x56\x03\x3f\x33\x62\xac\xb1\x30\x88\x8b\x0c\xbf\xf0\x7b\xe8\xe1\x6b\xfc\x61\x5d\x90\x5b\x1e\xdc\x78\x51\x05\xfd\xfb\xd8\xd3\x79\xd0\xf3\xa0\x83\x40\xaa\xdc\xe1\x62\xe6\x2f\xf7\xf0\x57\x58\x30\x90\x7a\x78\xa4\xbd\xde\x16\xc1\x1d\xac\x22\xa6\x3a\x1e\x64\x61\xfd\x36\xd1\xa4\x06\x96\x4f\x44\xbb\x45\x73\x78\xa6\xd5\x96\xdc\x7d\x48\x09\x3a\x16\x4e\x1f\x91\x1f\x37\xd9\x53\xa9\x46\x7a\x75\x43\xd5\xd1\x4e\xb6\x38\x70\xa1\x74\x6d\xcb\xec\x54\xbe\x3e\xa3\x56\xc2\x49\x0d\xb6\x56\xc6\x58\x09\x31\x68\x6b\xad\x2c\x0e\x3d\x79\x3a\x01\xcd\x35\xb0\xd3\x5c\x37\x8c\xc7\xac\xb6\x97\x25\xc7\x7a\x45\x5b\x67\x5b\x3b\x57\xfb\x5f\xec\x7b\xd6\x7c\xaf\xcd\xe1\x19\xdd\x30\xfc\x46\xa2\xff\xbd\xbf\xd4\xf9\xca\x09\x5f\x07\xa1\x99\x0a\xdd\x27\x1d\xb2\x84\xc5\x3e\x7f\xf1\x5f\xef\x7f\x9b\x9c\xba\xf2\xec\xcb\xf2\xd6\x62\xb1\xca\x2c\x0a\x93\xaf\xc9\x6a\xa2\xd3\x6b\x1b\x5b\x49\xd3\x09\x2b\x5a\xa7\x77\xdc\x0a\x8b\x2a\x8c\x32\xfa\xe0\x60\x24\xfc\x25\x28\xa7\x37\xc3\xb7\xbe\x15\xae\xbc\x11\x08\x5a\x7b\x65\xfa\xa7\x95\x03\xff\x57\x80\xe7\x67\xde\xf7\x04\x8d\xfc\x02\xbf\x32\x82\xee\x47\xe8\x5c\xe6\x25\x62\x97\x02\x18\xfe\x41\xe7\xe5\x18\xfa\xaf\x37\xe3\x6b\xe3\x00\xe9\xd1\xa7\x47\xff\x1b\x00\x00\xff\xff\x37\xe8\x8a\x21\x4a\x44\x00\x00")
 
 func wski18nResourcesEn_usAllJsonBytes() ([]byte, error) {
 	return bindataRead(
@@ -112,7 +112,7 @@
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 17008, mode: os.FileMode(420), modTime: time.Unix(1528157319, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 17482, mode: os.FileMode(420), modTime: time.Unix(1528407012, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
diff --git a/wski18n/resources/en_US.all.json b/wski18n/resources/en_US.all.json
index 614d434..d6283a9 100644
--- a/wski18n/resources/en_US.all.json
+++ b/wski18n/resources/en_US.all.json
@@ -364,6 +364,10 @@
     "translation": "Required inputs are missing values even after applying interpolation using env. variables. Please set missing env. variables and/or input values in manifest/deployment file or on CLI for following inputs: {{.inputs}}"
   },
   {
+    "id": "msg_err_api_gateway_base_path_invalid",
+    "translation": "API Gateway base path [{{.apibasepath}}] is invalid. It has path parameters which is not supported, only relative path supports path parameters."
+  },
+  {
     "id": "msg_err_runtime_parser_error",
     "translation": "Failed to retrieve runtimes {{.err}}."
   },
@@ -461,6 +465,10 @@
     "translation": "Sequence [{{.sequence}}] is not a web sequence, API [{{.api}}] can only be created using web sequence. Converting [{{.sequence}}] to a web sequence.\n"
   },
   {
+    "id": "msg_warn_api_invalid_response_type",
+    "translation": "API [{{.api}}] with path parameters [{{.apirelativepath}}] is required to have http as response type. Changing response type from [{{.response}}] to http for [{{.api}}]."
+  },
+  {
     "id": "DEBUG",
     "translation": "================= DEBUG ==================="
   },
diff --git a/wskprint/console.go b/wskprint/console.go
index 62228bc..1863bda 100644
--- a/wskprint/console.go
+++ b/wskprint/console.go
@@ -51,13 +51,17 @@
 }
 
 func PrintOpenWhiskWarning(message string) {
-	outputStream := colorable.NewColorableStdout()
-	fmt.Fprintf(outputStream, clrWarning.Sprintf(STR_PREFIXED_MESSAGE,
-		wski18n.T(wski18n.ID_MSG_PREFIX_WARNING), message))
+	if DetectVerbose() {
+		outputStream := colorable.NewColorableStdout()
+		fmt.Fprintf(outputStream, clrWarning.Sprintf(STR_PREFIXED_MESSAGE,
+			wski18n.T(wski18n.ID_MSG_PREFIX_WARNING), message))
+	}
 }
 
 func PrintlnOpenWhiskWarning(message string) {
-	PrintOpenWhiskWarning(message + "\n")
+	if DetectVerbose() {
+		PrintOpenWhiskWarning(message + "\n")
+	}
 }
 
 func PrintOpenWhiskSuccess(message string) {
@@ -129,3 +133,14 @@
 	}
 	return false
 }
+
+func DetectVerbose() bool {
+	arguments := os.Args
+	for i := range arguments {
+		if strings.HasPrefix(arguments[i], "-v") ||
+			strings.HasPrefix(arguments[i], "--verbose") {
+			return true
+		}
+	}
+	return false
+}