From 09190f013fdac285d56b68e39f5a3b7b739f82f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 16 Dec 2019 14:08:41 +0100 Subject: [PATCH 001/110] Fix metaschema generation capabilities Some file locations changed in the latest OSCAL repo. Addressing: $ go generate 2019/12/16 14:03:57 open OSCAL/schema/metaschema/oscal-catalog-metaschema.xml: no such file or directory exit status 1 metaschema.go:9: running "go": exit status 1 --- metaschema/generate.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/metaschema/generate.go b/metaschema/generate.go index cc7556f7..db04bcbd 100644 --- a/metaschema/generate.go +++ b/metaschema/generate.go @@ -15,7 +15,7 @@ import ( const ( oscalRepo = "https://github.com/usnistgov/OSCAL.git" - metaschemaBaseDir = "OSCAL/schema/metaschema/%s" + metaschemaBaseDir = "OSCAL/src/metaschema/%s" ) var ( @@ -38,9 +38,9 @@ func main() { } metaschemaPaths := map[string]string{ - "catalog": "oscal-catalog-metaschema.xml", - "profile": "oscal-profile-metaschema.xml", - "ssp": "oscal-ssp-metaschema.xml", + "catalog": "oscal_catalog_metaschema.xml", + "profile": "oscal_profile_metaschema.xml", + "ssp": "oscal_ssp_metaschema.xml", } for pkg, metaschemaPath := range metaschemaPaths { From 67d76da1da1bb6e48b30fa38fb59dc9cbb0c70da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 16 Dec 2019 14:38:15 +0100 Subject: [PATCH 002/110] Improve error message When generating go out of xml schema errors are likely to occur. It is handy to see generated file along the errors as that's exactly what's needed for diagnosis. --- metaschema/template.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/metaschema/template.go b/metaschema/template.go index 9fbdc6f7..14d988ad 100644 --- a/metaschema/template.go +++ b/metaschema/template.go @@ -2,6 +2,7 @@ package metaschema import ( "bytes" + "errors" "fmt" "go/format" "os" @@ -63,7 +64,7 @@ func GenerateTypes(metaschema *Metaschema) error { p, err := format.Source(buf.Bytes()) if err != nil { - return err + return errors.New(err.Error() + " in following file:\n" + string(buf.Bytes())) } _, err = f.Write(p) From 09a858f7263428c006222e6a19cabd91331b50d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 16 Dec 2019 16:12:22 +0100 Subject: [PATCH 003/110] Allow multiple import elements in metaschema XML Latest OSCAL content uses multiple imports. --- metaschema/generate.go | 7 +++++-- metaschema/metaschema.go | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/metaschema/generate.go b/metaschema/generate.go index db04bcbd..a8dc0c0f 100644 --- a/metaschema/generate.go +++ b/metaschema/generate.go @@ -76,8 +76,11 @@ func decode(r io.Reader) (*metaschema.Metaschema, error) { return nil, fmt.Errorf("Error decoding metaschema: %s", err) } - if meta.Import != nil && meta.Import.Href != nil && meta.Import.Href.URL != nil { - imf, err := os.Open(fmt.Sprintf(metaschemaBaseDir, meta.Import.Href.URL.String())) + for _, imported := range meta.Import { + if imported.Href == nil { + return nil, fmt.Errorf("import element in %s is missing 'href' attribute", r) + } + imf, err := os.Open(fmt.Sprintf(metaschemaBaseDir, imported.Href.URL.String())) if err != nil { return nil, err } diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index ffbf933d..9d79c273 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -51,7 +51,7 @@ type Metaschema struct { Remarks *Remarks `xml:"remarks,omitempty"` // Import is a URI to an external metaschema - Import *Import `xml:"import,omitempty"` + Import []Import `xml:"import"` // DefineAssembly is one or more assembly definitions DefineAssembly []DefineAssembly `xml:"define-assembly"` From d992881bc87e3d1b5cad6e31b0d7af087d4865bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 16 Dec 2019 16:25:32 +0100 Subject: [PATCH 004/110] Allow multiple import in Metaschema struct and process them correctly. --- metaschema/generate.go | 2 +- metaschema/metaschema.go | 2 +- metaschema/template.go | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/metaschema/generate.go b/metaschema/generate.go index a8dc0c0f..4f934f63 100644 --- a/metaschema/generate.go +++ b/metaschema/generate.go @@ -91,7 +91,7 @@ func decode(r io.Reader) (*metaschema.Metaschema, error) { return nil, err } - meta.ImportedMetaschema = importedMeta + meta.ImportedMetaschema = append(meta.ImportedMetaschema, *importedMeta) } return &meta, nil diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 9d79c273..22327367 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -62,7 +62,7 @@ type Metaschema struct { // DefineFlag is one or more flag definitions DefineFlag []DefineFlag `xml:"define-flag"` - ImportedMetaschema *Metaschema + ImportedMetaschema []Metaschema } // DefineAssembly is a definition for for an object or element that contains diff --git a/metaschema/template.go b/metaschema/template.go index 14d988ad..6515762f 100644 --- a/metaschema/template.go +++ b/metaschema/template.go @@ -119,7 +119,7 @@ func packageImport(named string, metaschema Metaschema) string { } } - if im := metaschema.ImportedMetaschema; im != nil { + for _, im := range metaschema.ImportedMetaschema { return im.Root + "." } @@ -131,7 +131,7 @@ func getImports(metaschema Metaschema) string { imports.WriteString("import (\n") imports.WriteString("\t\"encoding/xml\"\n") - if im := metaschema.ImportedMetaschema; im != nil { + for _, im := range metaschema.ImportedMetaschema { imports.WriteString(fmt.Sprintf("\n\t\"github.com/docker/oscalkit/types/oscal/%s\"\n", strings.ToLower(im.Root))) } From 84a169a0b6c8629fd21f6bad347100b77eff4c25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 16 Dec 2019 16:27:30 +0100 Subject: [PATCH 005/110] Performance: Use shallow clone of OSCAL.git to speed-up things a bit --- metaschema/generate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metaschema/generate.go b/metaschema/generate.go index 4f934f63..2b122ddc 100644 --- a/metaschema/generate.go +++ b/metaschema/generate.go @@ -32,7 +32,7 @@ func main() { log.Fatal(err) } - cloneCmd := exec.Command("git", "clone", oscalRepo) + cloneCmd := exec.Command("git", "clone", "--depth", "1", oscalRepo) if err := cloneCmd.Run(); err != nil { log.Fatal(err) } From 2a6614ebc9af674c438593da34ab2353ca8ae949 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 16 Dec 2019 16:40:08 +0100 Subject: [PATCH 006/110] Avoid using '-' character in go package name It would be invalid. --- metaschema/template.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metaschema/template.go b/metaschema/template.go index 6515762f..879c6d7e 100644 --- a/metaschema/template.go +++ b/metaschema/template.go @@ -132,7 +132,7 @@ func getImports(metaschema Metaschema) string { imports.WriteString("\t\"encoding/xml\"\n") for _, im := range metaschema.ImportedMetaschema { - imports.WriteString(fmt.Sprintf("\n\t\"github.com/docker/oscalkit/types/oscal/%s\"\n", strings.ToLower(im.Root))) + imports.WriteString(fmt.Sprintf("\n\t\"github.com/docker/oscalkit/types/oscal/%s\"\n", strings.ReplaceAll(strings.ToLower(im.Root), "-", "_"))) } imports.WriteString(")") From e5a5981ac8e5041e9161957f42a7660c64037626 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 10:05:53 +0100 Subject: [PATCH 007/110] Parse @ref attribute from field Newest oscal repo contains references to field definitions instead of direct fields. For instance see: --- metaschema/metaschema.go | 1 + 1 file changed, 1 insertion(+) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 22327367..47f3e16c 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -137,6 +137,7 @@ type Field struct { Description string `xml:"description"` Remarks *Remarks `xml:"remarks"` + Ref string `xml:"ref,attr"` } type Fields struct { From 69dcbc035dcf9003f26c2f28477807b135bb59ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 10:41:48 +0100 Subject: [PATCH 008/110] Implement indirection from field to define-field Some types may be defined using element. In that case, we have to find relevant element and fetch definition from there. --- metaschema/metaschema.go | 9 +++++++++ metaschema/types.tmpl | 12 +++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 47f3e16c..dd002265 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -65,6 +65,15 @@ type Metaschema struct { ImportedMetaschema []Metaschema } +func (metaschema *Metaschema) GetDefineField(name string) (*DefineField, error) { + for _, v := range metaschema.DefineField { + if name == v.Name { + return &v, nil + } + } + return nil, fmt.Errorf("Could not find define-field element with name='%s'.", name) +} + // DefineAssembly is a definition for for an object or element that contains // structured content type DefineAssembly struct { diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index 81adace5..8e8362b3 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -31,9 +31,15 @@ type {{toCamel .Name}} struct { {{- end}} {{- end}} {{if .Model}} - {{- range .Model.Field}} - {{toCamel .Named}} {{if requiresPointer .Named $m}}*{{end}}{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` - {{- end}} + {{ range .Model.Field}} + {{- if .Ref }} + {{- with $m.GetDefineField .Ref }} + {{ toCamel .Name}} {{if requiresPointer .Name $m}}*{{end}}{{packageImport .Name $m}}{{toCamel .Name}} `xml:"{{ .Name }},omitempty" json:"{{toLowerCamel .Name}},omitempty"` + {{- end }} + {{- else }} + {{ toCamel .Named}} {{if requiresPointer .Named $m}}*{{end}}{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` + {{- end}} + {{- end}} {{- range .Model.Fields}} {{toCamel .GroupAs}} []{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{plural .Named}},omitempty"` From 71c49b89fa1c2980eb9c85d06ead0b1a5643f54a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 11:13:08 +0100 Subject: [PATCH 009/110] Remove Assemblies metaschema element Assemblies no longer appear in the OSCAL metaschema --- metaschema/metaschema.go | 29 +++++++++-------------------- metaschema/types.tmpl | 7 ------- 2 files changed, 9 insertions(+), 27 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index dd002265..711dfa1e 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -115,13 +115,12 @@ type DefineFlag struct { } type Model struct { - Assembly []Assembly `xml:"assembly"` - Assemblies []Assemblies `xml:"assemblies"` - Field []Field `xml:"field"` - Fields []Fields `xml:"fields"` - Choice []Choice `xml:"choice"` - Prose *struct{} `xml:"prose"` - Any *struct{} `xml:"any"` + Assembly []Assembly `xml:"assembly"` + Field []Field `xml:"field"` + Fields []Fields `xml:"fields"` + Choice []Choice `xml:"choice"` + Prose *struct{} `xml:"prose"` + Any *struct{} `xml:"any"` } type Assembly struct { @@ -131,15 +130,6 @@ type Assembly struct { Remarks *Remarks `xml:"remarks"` } -type Assemblies struct { - Named string `xml:"named,attr"` - GroupAs string `xml:"group-as,attr"` - Address string `xml:"address,attr"` - - Description string `xml:"description"` - Remarks *Remarks `xml:"remarks"` -} - type Field struct { Named string `xml:"named,attr"` Required string `xml:"required,attr"` @@ -168,10 +158,9 @@ type Flag struct { } type Choice struct { - Field []Field `xml:"field"` - Fields []Fields `xml:"fields"` - Assembly []Assembly `xml:"assembly"` - Assemblies []Assemblies `xml:"assemblies"` + Field []Field `xml:"field"` + Fields []Fields `xml:"fields"` + Assembly []Assembly `xml:"assembly"` } type Import struct { diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index 8e8362b3..2492b6a6 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -49,10 +49,6 @@ type {{toCamel .Name}} struct { {{toCamel .Named}} *{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` {{- end}} - {{- range .Model.Assemblies}} - {{toCamel .GroupAs}} []{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{plural .Named}},omitempty"` - {{- end}} - {{- range .Model.Choice}} {{- range .Field}} {{toCamel .Named}} {{if requiresPointer .Named $m}}*{{end}}{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` @@ -66,9 +62,6 @@ type {{toCamel .Name}} struct { {{toCamel .Named}} *{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` {{- end}} - {{- range .Assemblies}} - {{toCamel .GroupAs}} []{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{plural .Named}},omitempty"` - {{- end}} {{- end}} {{- if .Model.Prose}} From aac030053c8e09607ee3af830cd5604635e5371d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 11:13:45 +0100 Subject: [PATCH 010/110] Parse @ref attribute from assembly Newest oscal repo contains references to assembly definitions instead of direct assembly. For instance see: --- metaschema/metaschema.go | 1 + 1 file changed, 1 insertion(+) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 711dfa1e..0abf6391 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -128,6 +128,7 @@ type Assembly struct { Description string `xml:"description"` Remarks *Remarks `xml:"remarks"` + Ref string `xml:"ref,attr"` } type Field struct { From b2a8bc1691b89250b863241f95b8f18c30c102fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 12:32:54 +0100 Subject: [PATCH 011/110] Refactor: Use existing method instead of expanding it This will one day allow us to work well with multiple inherited metaschemas. --- metaschema/template.go | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/metaschema/template.go b/metaschema/template.go index 879c6d7e..f145c223 100644 --- a/metaschema/template.go +++ b/metaschema/template.go @@ -141,15 +141,9 @@ func getImports(metaschema Metaschema) string { } func requiresPointer(fieldName string, metaschema Metaschema) bool { - for _, df := range metaschema.DefineField { - if df.Name == fieldName { - if len(df.Flags) > 0 { - return true - } - - return false - } + df, err := metaschema.GetDefineField(fieldName) + if err == nil { + return len(df.Flags) > 0 } - return false } From ebb1e548a5dd8b3af50024d737c5d7a2dc72d4c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 12:53:04 +0100 Subject: [PATCH 012/110] Implement indirection from assembly to define-assembly Some types may be defined using element. In that case, we have to find relevant element and fetch definition from there. --- metaschema/metaschema.go | 9 +++++++++ metaschema/types.tmpl | 12 +++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 0abf6391..7123ee71 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -74,6 +74,15 @@ func (metaschema *Metaschema) GetDefineField(name string) (*DefineField, error) return nil, fmt.Errorf("Could not find define-field element with name='%s'.", name) } +func (metaschema *Metaschema) GetDefineAssembly(name string) (*DefineAssembly, error) { + for _, v := range metaschema.DefineAssembly { + if name == v.Name { + return &v, nil + } + } + return nil, fmt.Errorf("Could not find define-assembly element with name='%s'.", name) +} + // DefineAssembly is a definition for for an object or element that contains // structured content type DefineAssembly struct { diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index 2492b6a6..1a020193 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -45,9 +45,15 @@ type {{toCamel .Name}} struct { {{toCamel .GroupAs}} []{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{plural .Named}},omitempty"` {{- end}} - {{- range .Model.Assembly}} - {{toCamel .Named}} *{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` - {{- end}} + {{- range .Model.Assembly}} + {{- if .Ref}} + {{- with $m.GetDefineAssembly .Ref }} + {{ toCamel .Name}} *{{packageImport .Name $m}}{{toCamel .Name}} `xml:"{{ .Name }},omitempty" json:"{{toLowerCamel .Name}},omitempty"` + {{- end}} + {{- else }} + {{toCamel .Named}} *{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` + {{- end}} + {{- end}} {{- range .Model.Choice}} {{- range .Field}} From 2b57abb457f3ea6e4852d9bb0a9618e879b3ea41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 13:08:08 +0100 Subject: [PATCH 013/110] Implement plural of assemblies If some assembly is allowed to repeat we have to implement it as slice not as pointer. Example may be: --- metaschema/metaschema.go | 5 +++++ metaschema/types.tmpl | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 7123ee71..def40b20 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -138,6 +138,7 @@ type Assembly struct { Description string `xml:"description"` Remarks *Remarks `xml:"remarks"` Ref string `xml:"ref,attr"` + GroupAs *GroupAs `xml:"group-as"` } type Field struct { @@ -173,6 +174,10 @@ type Choice struct { Assembly []Assembly `xml:"assembly"` } +type GroupAs struct { + Name string `xml:"name,attr"` +} + type Import struct { Href *Href `xml:"href,attr"` } diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index 1a020193..b5bbbc37 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -47,8 +47,9 @@ type {{toCamel .Name}} struct { {{- range .Model.Assembly}} {{- if .Ref}} + {{- $groupAs := .GroupAs }} {{- with $m.GetDefineAssembly .Ref }} - {{ toCamel .Name}} *{{packageImport .Name $m}}{{toCamel .Name}} `xml:"{{ .Name }},omitempty" json:"{{toLowerCamel .Name}},omitempty"` + {{ toCamel .Name}} {{if $groupAs}}[]{{else}}*{{end}}{{packageImport .Name $m}}{{toCamel .Name}} `xml:"{{ if $groupAs }}{{$groupAs.Name}}{{else}}{{ .Name }}{{end}},omitempty" json:"{{toLowerCamel .Name}},omitempty"` {{- end}} {{- else }} {{toCamel .Named}} *{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` From d4592a6b63f2e018818faae44a0bf6b2569b5308 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 13:30:05 +0100 Subject: [PATCH 014/110] Refactor: Extract method: RepresentsRootElement --- metaschema/metaschema.go | 4 ++++ metaschema/types.tmpl | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index def40b20..40ee86db 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -99,6 +99,10 @@ type DefineAssembly struct { Examples []Example `xml:"example"` } +func (da *DefineAssembly) RepresentsRootElement() bool { + return da.Name == "catalog" || da.Name == "profile" || da.Name == "declarations" +} + type DefineField struct { Name string `xml:"name,attr"` GroupAs string `xml:"group-as,attr"` diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index b5bbbc37..8629f6b8 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -11,7 +11,7 @@ package {{ $packageName }} // {{ . }} {{end -}} type {{toCamel .Name}} struct { - {{if or (eq "catalog" .Name) (eq "profile" .Name) (eq "declarations" .Name)}} + {{if .RepresentsRootElement }} XMLName xml.Name `xml:"http://csrc.nist.gov/ns/oscal/1.0 {{ .Name }}" json:"-"` {{- end}} {{- if eq "profile" .Name}} From 70b63d353d942b6c9c719cb45e3c4b4c6ac63abc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 13:37:17 +0100 Subject: [PATCH 015/110] Depend on encoding/xml only when file contains final root element --- metaschema/metaschema.go | 9 +++++++++ metaschema/template.go | 4 +++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 40ee86db..75f27841 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -83,6 +83,15 @@ func (metaschema *Metaschema) GetDefineAssembly(name string) (*DefineAssembly, e return nil, fmt.Errorf("Could not find define-assembly element with name='%s'.", name) } +func (Metaschema *Metaschema) ContainsRootElement() bool { + for _, v := range Metaschema.DefineAssembly { + if v.RepresentsRootElement() { + return true + } + } + return false +} + // DefineAssembly is a definition for for an object or element that contains // structured content type DefineAssembly struct { diff --git a/metaschema/template.go b/metaschema/template.go index f145c223..9e7da660 100644 --- a/metaschema/template.go +++ b/metaschema/template.go @@ -129,7 +129,9 @@ func packageImport(named string, metaschema Metaschema) string { func getImports(metaschema Metaschema) string { var imports strings.Builder imports.WriteString("import (\n") - imports.WriteString("\t\"encoding/xml\"\n") + if metaschema.ContainsRootElement() { + imports.WriteString("\t\"encoding/xml\"\n") + } for _, im := range metaschema.ImportedMetaschema { imports.WriteString(fmt.Sprintf("\n\t\"github.com/docker/oscalkit/types/oscal/%s\"\n", strings.ReplaceAll(strings.ToLower(im.Root), "-", "_"))) From b3ea5a7547ed149fd4d2c251e31b04b9e3893f37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 13:47:20 +0100 Subject: [PATCH 016/110] Refactor: Extract method: RequiresPointer --- metaschema/metaschema.go | 4 ++++ metaschema/template.go | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 75f27841..c3f62aa1 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -125,6 +125,10 @@ type DefineField struct { As As `xml:"as"` } +func (df *DefineField) RequiresPointer() bool { + return len(df.Flags) > 0 +} + type DefineFlag struct { Name string `xml:"name,attr"` Datatype string `xml:"datatype,attr"` diff --git a/metaschema/template.go b/metaschema/template.go index 9e7da660..28d43b2e 100644 --- a/metaschema/template.go +++ b/metaschema/template.go @@ -145,7 +145,7 @@ func getImports(metaschema Metaschema) string { func requiresPointer(fieldName string, metaschema Metaschema) bool { df, err := metaschema.GetDefineField(fieldName) if err == nil { - return len(df.Flags) > 0 + return df.RequiresPointer() } return false } From 337c1d321129b478fcb5811d486724a8c139b5b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 13:48:55 +0100 Subject: [PATCH 017/110] Refactor: Avoid unnecessary indirection --- metaschema/types.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index 8629f6b8..4eaa633d 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -34,7 +34,7 @@ type {{toCamel .Name}} struct { {{ range .Model.Field}} {{- if .Ref }} {{- with $m.GetDefineField .Ref }} - {{ toCamel .Name}} {{if requiresPointer .Name $m}}*{{end}}{{packageImport .Name $m}}{{toCamel .Name}} `xml:"{{ .Name }},omitempty" json:"{{toLowerCamel .Name}},omitempty"` + {{ toCamel .Name}} {{if .RequiresPointer}}*{{end}}{{packageImport .Name $m}}{{toCamel .Name}} `xml:"{{ .Name }},omitempty" json:"{{toLowerCamel .Name}},omitempty"` {{- end }} {{- else }} {{ toCamel .Named}} {{if requiresPointer .Named $m}}*{{end}}{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` From 1ad7f08bd744f4c63d2bd8d7806c19a93f010c8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 13:54:24 +0100 Subject: [PATCH 018/110] Implement plural of define-fields If some field is allowed to repeat we have to implement it as a slice not as a pointer. Example may be: --- metaschema/metaschema.go | 1 + metaschema/types.tmpl | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index c3f62aa1..69451799 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -165,6 +165,7 @@ type Field struct { Description string `xml:"description"` Remarks *Remarks `xml:"remarks"` Ref string `xml:"ref,attr"` + GroupAs *GroupAs `xml:"group-as"` } type Fields struct { diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index 4eaa633d..cf742f77 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -33,8 +33,9 @@ type {{toCamel .Name}} struct { {{if .Model}} {{ range .Model.Field}} {{- if .Ref }} + {{- $groupAs := .GroupAs }} {{- with $m.GetDefineField .Ref }} - {{ toCamel .Name}} {{if .RequiresPointer}}*{{end}}{{packageImport .Name $m}}{{toCamel .Name}} `xml:"{{ .Name }},omitempty" json:"{{toLowerCamel .Name}},omitempty"` + {{ toCamel .Name}} {{if $groupAs}}[]{{else}}{{if .RequiresPointer}}*{{end}}{{end}}{{packageImport .Name $m}}{{toCamel .Name}} `xml:"{{ if $groupAs}}{{ $groupAs.Name }}{{else}}{{ .Name }}{{end}},omitempty" json:"{{toLowerCamel .Name}},omitempty"` {{- end }} {{- else }} {{ toCamel .Named}} {{if requiresPointer .Named $m}}*{{end}}{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` From 19ec205e86aa01989a221dbb73160b5d32a3987d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 14:11:00 +0100 Subject: [PATCH 019/110] Remove support for elements in OSCAL schema These are no longer used. --- metaschema/metaschema.go | 10 ---------- metaschema/types.tmpl | 8 -------- 2 files changed, 18 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 69451799..a31df56c 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -143,7 +143,6 @@ type DefineFlag struct { type Model struct { Assembly []Assembly `xml:"assembly"` Field []Field `xml:"field"` - Fields []Fields `xml:"fields"` Choice []Choice `xml:"choice"` Prose *struct{} `xml:"prose"` Any *struct{} `xml:"any"` @@ -168,14 +167,6 @@ type Field struct { GroupAs *GroupAs `xml:"group-as"` } -type Fields struct { - Named string `xml:"named,attr"` - GroupAs string `xml:"group-as,attr"` - - Description string `xml:"description"` - Remarks *Remarks `xml:"remarks"` -} - type Flag struct { Name string `xml:"name,attr"` Datatype string `xml:"datatype,attr"` @@ -188,7 +179,6 @@ type Flag struct { type Choice struct { Field []Field `xml:"field"` - Fields []Fields `xml:"fields"` Assembly []Assembly `xml:"assembly"` } diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index cf742f77..cb421cb3 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -42,10 +42,6 @@ type {{toCamel .Name}} struct { {{- end}} {{- end}} - {{- range .Model.Fields}} - {{toCamel .GroupAs}} []{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{plural .Named}},omitempty"` - {{- end}} - {{- range .Model.Assembly}} {{- if .Ref}} {{- $groupAs := .GroupAs }} @@ -62,10 +58,6 @@ type {{toCamel .Name}} struct { {{toCamel .Named}} {{if requiresPointer .Named $m}}*{{end}}{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` {{- end}} - {{- range .Fields}} - {{toCamel .GroupAs}} []{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{plural .Named}},omitempty"` - {{- end}} - {{- range .Assembly}} {{toCamel .Named}} *{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` {{- end}} From 0b474ab6ef84b8bcd183652ac5beb363ff04c601 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 14:21:53 +0100 Subject: [PATCH 020/110] Refactor: Pass whole metaschema to the helper method instead of list of define-flags. This will later allow us to clean-up a bit. --- metaschema/template.go | 4 ++-- metaschema/types.tmpl | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/metaschema/template.go b/metaschema/template.go index 28d43b2e..d547e3ae 100644 --- a/metaschema/template.go +++ b/metaschema/template.go @@ -90,8 +90,8 @@ func parseDatatype(datatype string, packageName string) string { return datatypes[Datatype(datatype)] } -func commentFlag(flagName string, flagDefs []DefineFlag) []string { - for _, df := range flagDefs { +func commentFlag(flagName string, metaschema Metaschema) []string { + for _, df := range metaschema.DefineFlag { if flagName == df.Name { return wrapString(df.Description) } diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index cb421cb3..ace1422d 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -19,7 +19,7 @@ type {{toCamel .Name}} struct { Title string `xml:"title,omitempty" json:"title,omitempty"` {{- end}} {{- range .Flags}} - {{- $cf := commentFlag .Name $m.DefineFlag}} + {{- $cf := commentFlag .Name $m}} {{- range $cf}} // {{ . }} {{- end}} @@ -85,7 +85,7 @@ type {{toCamel .Name}} struct { {{- end}} type {{toCamel .Name}} struct { {{- range .Flags}} - {{- $cf := commentFlag .Name $m.DefineFlag -}} + {{- $cf := commentFlag .Name $m -}} {{range $cf}} // {{ . }} {{end -}} From 425cdd888b055c243b2863ebfedf582fc9aef5e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 14:31:18 +0100 Subject: [PATCH 021/110] Refactor: Extract method: GetDefineFlag --- metaschema/metaschema.go | 9 +++++++++ metaschema/template.go | 8 +++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index a31df56c..6b2261d5 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -83,6 +83,15 @@ func (metaschema *Metaschema) GetDefineAssembly(name string) (*DefineAssembly, e return nil, fmt.Errorf("Could not find define-assembly element with name='%s'.", name) } +func (Metaschema *Metaschema) GetDefineFlag(name string) (*DefineFlag, error) { + for _, v := range Metaschema.DefineFlag { + if name == v.Name { + return &v, nil + } + } + return nil, fmt.Errorf("Could not find define-flag element with name='%s'.", name) +} + func (Metaschema *Metaschema) ContainsRootElement() bool { for _, v := range Metaschema.DefineAssembly { if v.RepresentsRootElement() { diff --git a/metaschema/template.go b/metaschema/template.go index d547e3ae..5661f95d 100644 --- a/metaschema/template.go +++ b/metaschema/template.go @@ -91,12 +91,10 @@ func parseDatatype(datatype string, packageName string) string { } func commentFlag(flagName string, metaschema Metaschema) []string { - for _, df := range metaschema.DefineFlag { - if flagName == df.Name { - return wrapString(df.Description) - } + df, err := metaschema.GetDefineFlag(flagName) + if err == nil { + return wrapString(df.Description) } - return nil } From bfd0453d096a98d10b1e1701eb3c89a8b1d7c883 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 17:20:07 +0100 Subject: [PATCH 022/110] Fill in metaschema model tree with references to the particular element definitions This will surely end-up less tedious than getting Def in template. --- metaschema/generate.go | 1 + metaschema/metaschema.go | 52 ++++++++++++++++++++++++++++++++++++++++ metaschema/types.tmpl | 8 +++---- 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/metaschema/generate.go b/metaschema/generate.go index 2b122ddc..95eaf0a1 100644 --- a/metaschema/generate.go +++ b/metaschema/generate.go @@ -93,6 +93,7 @@ func decode(r io.Reader) (*metaschema.Metaschema, error) { meta.ImportedMetaschema = append(meta.ImportedMetaschema, *importedMeta) } + meta.LinkDefinitions() return &meta, nil } diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 6b2261d5..e98612b0 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -65,6 +65,54 @@ type Metaschema struct { ImportedMetaschema []Metaschema } +func (metaschema *Metaschema) LinkDefinitions() error { + var err error + for _, da := range metaschema.DefineAssembly { + for i, f := range da.Flags { + if f.Ref != "" { + f.Def, err = metaschema.GetDefineFlag(f.Ref) + if err != nil { + return err + } + da.Flags[i] = f + } + + } + for i, a := range da.Model.Assembly { + if a.Ref != "" { + a.Def, err = metaschema.GetDefineAssembly(a.Ref) + if err != nil { + return err + } + da.Model.Assembly[i] = a + } + } + for i, f := range da.Model.Field { + if f.Ref != "" { + f.Def, err = metaschema.GetDefineField(f.Ref) + if err != nil { + return err + } + da.Model.Field[i] = f + + } + } + } + + for _, df := range metaschema.DefineField { + for i, f := range df.Flags { + if f.Ref != "" { + f.Def, err = metaschema.GetDefineFlag(f.Ref) + if err != nil { + return err + } + df.Flags[i] = f + } + } + } + return nil +} + func (metaschema *Metaschema) GetDefineField(name string) (*DefineField, error) { for _, v := range metaschema.DefineField { if name == v.Name { @@ -164,6 +212,7 @@ type Assembly struct { Remarks *Remarks `xml:"remarks"` Ref string `xml:"ref,attr"` GroupAs *GroupAs `xml:"group-as"` + Def *DefineAssembly } type Field struct { @@ -174,6 +223,7 @@ type Field struct { Remarks *Remarks `xml:"remarks"` Ref string `xml:"ref,attr"` GroupAs *GroupAs `xml:"group-as"` + Def *DefineField } type Flag struct { @@ -184,6 +234,8 @@ type Flag struct { Description string `xml:"description"` Remarks *Remarks `xml:"remarks"` Values []Value `xml:"value"` + Ref string `xml:"ref,attr"` + Def *DefineFlag } type Choice struct { diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index ace1422d..f91f918c 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -32,9 +32,9 @@ type {{toCamel .Name}} struct { {{- end}} {{if .Model}} {{ range .Model.Field}} - {{- if .Ref }} + {{- if .Def }} {{- $groupAs := .GroupAs }} - {{- with $m.GetDefineField .Ref }} + {{- with .Def }} {{ toCamel .Name}} {{if $groupAs}}[]{{else}}{{if .RequiresPointer}}*{{end}}{{end}}{{packageImport .Name $m}}{{toCamel .Name}} `xml:"{{ if $groupAs}}{{ $groupAs.Name }}{{else}}{{ .Name }}{{end}},omitempty" json:"{{toLowerCamel .Name}},omitempty"` {{- end }} {{- else }} @@ -43,9 +43,9 @@ type {{toCamel .Name}} struct { {{- end}} {{- range .Model.Assembly}} - {{- if .Ref}} + {{- if .Def}} {{- $groupAs := .GroupAs }} - {{- with $m.GetDefineAssembly .Ref }} + {{- with .Def }} {{ toCamel .Name}} {{if $groupAs}}[]{{else}}*{{end}}{{packageImport .Name $m}}{{toCamel .Name}} `xml:"{{ if $groupAs }}{{$groupAs.Name}}{{else}}{{ .Name }}{{end}},omitempty" json:"{{toLowerCamel .Name}},omitempty"` {{- end}} {{- else }} From def7ed2951cb46884aecc4340263cc006292eaea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 18:33:35 +0100 Subject: [PATCH 023/110] Fix broken comments for flag values Previously, for some reason, this was not returning any comments on latest OSCAL --- metaschema/metaschema.go | 7 +++++++ metaschema/template.go | 9 --------- metaschema/types.tmpl | 10 ++-------- 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index e98612b0..5044f023 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -238,6 +238,13 @@ type Flag struct { Def *DefineFlag } +func (f *Flag) GoComment() string { + if f.Description != "" { + return f.Description + } + return f.Def.Description +} + type Choice struct { Field []Field `xml:"field"` Assembly []Assembly `xml:"assembly"` diff --git a/metaschema/template.go b/metaschema/template.go index 5661f95d..34ee606a 100644 --- a/metaschema/template.go +++ b/metaschema/template.go @@ -42,7 +42,6 @@ func GenerateTypes(metaschema *Metaschema) error { "plural": inflection.Plural, "wrapString": wrapString, "parseDatatype": parseDatatype, - "commentFlag": commentFlag, "packageImport": packageImport, "getImports": getImports, "requiresPointer": requiresPointer, @@ -90,14 +89,6 @@ func parseDatatype(datatype string, packageName string) string { return datatypes[Datatype(datatype)] } -func commentFlag(flagName string, metaschema Metaschema) []string { - df, err := metaschema.GetDefineFlag(flagName) - if err == nil { - return wrapString(df.Description) - } - return nil -} - func packageImport(named string, metaschema Metaschema) string { for _, df := range metaschema.DefineFlag { if df.Name == named { diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index f91f918c..a3f7431a 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -19,10 +19,7 @@ type {{toCamel .Name}} struct { Title string `xml:"title,omitempty" json:"title,omitempty"` {{- end}} {{- range .Flags}} - {{- $cf := commentFlag .Name $m}} - {{- range $cf}} - // {{ . }} - {{- end}} + // {{ .GoComment }} {{- $dt := parseDatatype .Datatype $packageName}} {{- if and (eq "id" .Name) (eq "profile" $packageName)}} Id string `xml:"param-id,attr,omitempty" json:"id,omitempty"` @@ -85,10 +82,7 @@ type {{toCamel .Name}} struct { {{- end}} type {{toCamel .Name}} struct { {{- range .Flags}} - {{- $cf := commentFlag .Name $m -}} - {{range $cf}} - // {{ . }} - {{end -}} + // {{ .GoComment }} {{- $dt := parseDatatype .Datatype $packageName -}} {{toCamel .Name}} {{if eq "" $dt}}string{{else}}{{$dt}}{{end}} `xml:"{{ .Name }},attr,omitempty" json:"{{toLowerCamel .Name}},omitempty"` {{end -}} From 7643bb4fb9e17d4055c016eb423ef31221ca522e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 18:47:59 +0100 Subject: [PATCH 024/110] Provide go comments also for field and assembly elements --- metaschema/metaschema.go | 14 ++++++++++++++ metaschema/types.tmpl | 2 ++ 2 files changed, 16 insertions(+) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 5044f023..825a7b70 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -215,6 +215,13 @@ type Assembly struct { Def *DefineAssembly } +func (a *Assembly) GoComment() string { + if a.Description != "" { + return a.Description + } + return a.Def.Description +} + type Field struct { Named string `xml:"named,attr"` Required string `xml:"required,attr"` @@ -226,6 +233,13 @@ type Field struct { Def *DefineField } +func (f *Field) GoComment() string { + if f.Description != "" { + return f.Description + } + return f.Def.Description +} + type Flag struct { Name string `xml:"name,attr"` Datatype string `xml:"datatype,attr"` diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index a3f7431a..f5431fdd 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -29,6 +29,7 @@ type {{toCamel .Name}} struct { {{- end}} {{if .Model}} {{ range .Model.Field}} + // {{ .GoComment }} {{- if .Def }} {{- $groupAs := .GroupAs }} {{- with .Def }} @@ -40,6 +41,7 @@ type {{toCamel .Name}} struct { {{- end}} {{- range .Model.Assembly}} + // {{ .GoComment }} {{- if .Def}} {{- $groupAs := .GroupAs }} {{- with .Def }} From a83d9d38e89518f0ee4555e842590654016780b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 18:59:51 +0100 Subject: [PATCH 025/110] Remove unnecessary complexity around go comments --- metaschema/template.go | 8 -------- metaschema/types.tmpl | 14 ++------------ 2 files changed, 2 insertions(+), 20 deletions(-) diff --git a/metaschema/template.go b/metaschema/template.go index 34ee606a..f5d7e1fe 100644 --- a/metaschema/template.go +++ b/metaschema/template.go @@ -11,7 +11,6 @@ import ( "github.com/iancoleman/strcase" "github.com/jinzhu/inflection" - wordwrap "github.com/mitchellh/go-wordwrap" ) const ( @@ -40,7 +39,6 @@ func GenerateTypes(metaschema *Metaschema) error { "toCamel": strcase.ToCamel, "toLowerCamel": strcase.ToLowerCamel, "plural": inflection.Plural, - "wrapString": wrapString, "parseDatatype": parseDatatype, "packageImport": packageImport, "getImports": getImports, @@ -74,12 +72,6 @@ func GenerateTypes(metaschema *Metaschema) error { return nil } -func wrapString(text string) []string { - text = strings.Join(strings.Fields(text), " ") - - return strings.Split(wordwrap.WrapString(text, 80), "\n") -} - func parseDatatype(datatype string, packageName string) string { if packageName != "catalog" { if dt, ok := datatypes[Datatype(datatype)]; ok && dt != "string" { diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index f5431fdd..93b59fa9 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -6,10 +6,7 @@ package {{ $packageName }} {{$m := . -}} {{range .DefineAssembly}} -{{$x := wrapString .Description -}} -{{- range $x -}} -// {{ . }} -{{end -}} + // {{ .Description }} type {{toCamel .Name}} struct { {{if .RepresentsRootElement }} XMLName xml.Name `xml:"http://csrc.nist.gov/ns/oscal/1.0 {{ .Name }}" json:"-"` @@ -76,12 +73,9 @@ type {{toCamel .Name}} struct { {{end}} {{range .DefineField}} + // {{ .Description }} {{$l := len .Flags -}} {{if gt $l 0 -}} -{{$x := wrapString .Description -}} -{{- range $x -}} -// {{ . }} -{{- end}} type {{toCamel .Name}} struct { {{- range .Flags}} // {{ .GoComment }} @@ -92,10 +86,6 @@ type {{toCamel .Name}} struct { Value string `xml:",chardata" json:"value,omitempty"` } {{- else}} -{{$x := wrapString .Description -}} -{{- range $x -}} -// {{ . }} -{{end -}} type {{toCamel .Name}} string {{end -}} {{end}} From df0cacc44022b0915deb156c2543f02ec48c803b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 19:04:47 +0100 Subject: [PATCH 026/110] Drop dependency on github.com/mitchellh/go-wordwrap no longer needed --- go.mod | 1 - go.sum | 2 - .../mitchellh/go-wordwrap/LICENSE.md | 21 ------ .../mitchellh/go-wordwrap/README.md | 39 ---------- .../github.com/mitchellh/go-wordwrap/go.mod | 1 - .../mitchellh/go-wordwrap/wordwrap.go | 73 ------------------- vendor/modules.txt | 2 - 7 files changed, 139 deletions(-) delete mode 100644 vendor/github.com/mitchellh/go-wordwrap/LICENSE.md delete mode 100644 vendor/github.com/mitchellh/go-wordwrap/README.md delete mode 100644 vendor/github.com/mitchellh/go-wordwrap/go.mod delete mode 100644 vendor/github.com/mitchellh/go-wordwrap/wordwrap.go diff --git a/go.mod b/go.mod index 795f68c3..7a5258e6 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,6 @@ require ( github.com/iancoleman/strcase v0.0.0-20180726023541-3605ed457bf7 github.com/mattn/go-colorable v0.0.9 // indirect github.com/mattn/go-isatty v0.0.4 // indirect - github.com/mitchellh/go-wordwrap v1.0.0 github.com/santhosh-tekuri/jsonschema v0.0.0-20181206154329-5d49c9dfc783 github.com/satori/go.uuid v1.2.0 github.com/sirupsen/logrus v1.3.0 diff --git a/go.sum b/go.sum index 179655a8..2d602977 100644 --- a/go.sum +++ b/go.sum @@ -9,8 +9,6 @@ github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRU github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/santhosh-tekuri/jsonschema v0.0.0-20181206154329-5d49c9dfc783 h1:OR+Kamj42IgYXAJDh+6Dthdf0DKzqJvtvswnnGENJDg= github.com/santhosh-tekuri/jsonschema v0.0.0-20181206154329-5d49c9dfc783/go.mod h1:TEAUOeZSmIxTTuHatJzrvARHiuO9LYd+cIxzgEHCQI4= diff --git a/vendor/github.com/mitchellh/go-wordwrap/LICENSE.md b/vendor/github.com/mitchellh/go-wordwrap/LICENSE.md deleted file mode 100644 index 22985159..00000000 --- a/vendor/github.com/mitchellh/go-wordwrap/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Mitchell Hashimoto - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/mitchellh/go-wordwrap/README.md b/vendor/github.com/mitchellh/go-wordwrap/README.md deleted file mode 100644 index 60ae3117..00000000 --- a/vendor/github.com/mitchellh/go-wordwrap/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# go-wordwrap - -`go-wordwrap` (Golang package: `wordwrap`) is a package for Go that -automatically wraps words into multiple lines. The primary use case for this -is in formatting CLI output, but of course word wrapping is a generally useful -thing to do. - -## Installation and Usage - -Install using `go get github.com/mitchellh/go-wordwrap`. - -Full documentation is available at -http://godoc.org/github.com/mitchellh/go-wordwrap - -Below is an example of its usage ignoring errors: - -```go -wrapped := wordwrap.WrapString("foo bar baz", 3) -fmt.Println(wrapped) -``` - -Would output: - -``` -foo -bar -baz -``` - -## Word Wrap Algorithm - -This library doesn't use any clever algorithm for word wrapping. The wrapping -is actually very naive: whenever there is whitespace or an explicit linebreak. -The goal of this library is for word wrapping CLI output, so the input is -typically pretty well controlled human language. Because of this, the naive -approach typically works just fine. - -In the future, we'd like to make the algorithm more advanced. We would do -so without breaking the API. diff --git a/vendor/github.com/mitchellh/go-wordwrap/go.mod b/vendor/github.com/mitchellh/go-wordwrap/go.mod deleted file mode 100644 index 2ae411b2..00000000 --- a/vendor/github.com/mitchellh/go-wordwrap/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/mitchellh/go-wordwrap diff --git a/vendor/github.com/mitchellh/go-wordwrap/wordwrap.go b/vendor/github.com/mitchellh/go-wordwrap/wordwrap.go deleted file mode 100644 index ac67205b..00000000 --- a/vendor/github.com/mitchellh/go-wordwrap/wordwrap.go +++ /dev/null @@ -1,73 +0,0 @@ -package wordwrap - -import ( - "bytes" - "unicode" -) - -// WrapString wraps the given string within lim width in characters. -// -// Wrapping is currently naive and only happens at white-space. A future -// version of the library will implement smarter wrapping. This means that -// pathological cases can dramatically reach past the limit, such as a very -// long word. -func WrapString(s string, lim uint) string { - // Initialize a buffer with a slightly larger size to account for breaks - init := make([]byte, 0, len(s)) - buf := bytes.NewBuffer(init) - - var current uint - var wordBuf, spaceBuf bytes.Buffer - - for _, char := range s { - if char == '\n' { - if wordBuf.Len() == 0 { - if current+uint(spaceBuf.Len()) > lim { - current = 0 - } else { - current += uint(spaceBuf.Len()) - spaceBuf.WriteTo(buf) - } - spaceBuf.Reset() - } else { - current += uint(spaceBuf.Len() + wordBuf.Len()) - spaceBuf.WriteTo(buf) - spaceBuf.Reset() - wordBuf.WriteTo(buf) - wordBuf.Reset() - } - buf.WriteRune(char) - current = 0 - } else if unicode.IsSpace(char) { - if spaceBuf.Len() == 0 || wordBuf.Len() > 0 { - current += uint(spaceBuf.Len() + wordBuf.Len()) - spaceBuf.WriteTo(buf) - spaceBuf.Reset() - wordBuf.WriteTo(buf) - wordBuf.Reset() - } - - spaceBuf.WriteRune(char) - } else { - - wordBuf.WriteRune(char) - - if current+uint(spaceBuf.Len()+wordBuf.Len()) > lim && uint(wordBuf.Len()) < lim { - buf.WriteRune('\n') - current = 0 - spaceBuf.Reset() - } - } - } - - if wordBuf.Len() == 0 { - if current+uint(spaceBuf.Len()) <= lim { - spaceBuf.WriteTo(buf) - } - } else { - spaceBuf.WriteTo(buf) - wordBuf.WriteTo(buf) - } - - return buf.String() -} diff --git a/vendor/modules.txt b/vendor/modules.txt index 055d734c..f9b05a4d 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -8,8 +8,6 @@ github.com/konsorten/go-windows-terminal-sequences github.com/mattn/go-colorable # github.com/mattn/go-isatty v0.0.4 github.com/mattn/go-isatty -# github.com/mitchellh/go-wordwrap v1.0.0 -github.com/mitchellh/go-wordwrap # github.com/santhosh-tekuri/jsonschema v0.0.0-20181206154329-5d49c9dfc783 github.com/santhosh-tekuri/jsonschema github.com/santhosh-tekuri/jsonschema/loader From b236af2fd4317d9355ec63c9932d244b097ff77d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 19:41:30 +0100 Subject: [PATCH 027/110] Fix, simplify and make more rubust datatype handling --- metaschema/metaschema.go | 41 ++++++++++++++++++++++++++++++++++++---- metaschema/template.go | 30 ----------------------------- metaschema/types.tmpl | 6 ++---- 3 files changed, 39 insertions(+), 38 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 825a7b70..f972bb28 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -188,7 +188,7 @@ func (df *DefineField) RequiresPointer() bool { type DefineFlag struct { Name string `xml:"name,attr"` - Datatype string `xml:"datatype,attr"` + AsType datatype `xml:"as-type,attr"` ShowDocs ShowDocs `xml:"show-docs,attr"` FormalName string `xml:"formal-name"` @@ -241,9 +241,9 @@ func (f *Field) GoComment() string { } type Flag struct { - Name string `xml:"name,attr"` - Datatype string `xml:"datatype,attr"` - Required string `xml:"required,attr"` + Name string `xml:"name,attr"` + AsType datatype `xml:"as-type,attr"` + Required string `xml:"required,attr"` Description string `xml:"description"` Remarks *Remarks `xml:"remarks"` @@ -259,6 +259,18 @@ func (f *Flag) GoComment() string { return f.Def.Description } +func (f *Flag) GoDatatype() (string, error) { + dt := f.AsType + if dt == "" { + dt = f.Def.AsType + } + + if goDatatypeMap[dt] == "" { + return "", fmt.Errorf("Unknown as-type='%s' found.", dt) + } + return goDatatypeMap[dt], nil +} + type Choice struct { Field []Field `xml:"field"` Assembly []Assembly `xml:"assembly"` @@ -401,3 +413,24 @@ func (sd ShowDocs) UnmarshalXMLAttr(attr xml.Attr) error { return fmt.Errorf("Show docs option \"%s\" is not a valid option", attr.Value) } + +type datatype string + +const ( + datatypeString datatype = "string" + datatypeIDRef datatype = "IDREF" + datatypeNCName datatype = "NCName" + datatypeNMToken datatype = "NMTOKEN" + datatypeID datatype = "ID" + datatypeAnyURI datatype = "anyURI" + datatypeURIRef datatype = "uri-reference" +) + +var goDatatypeMap = map[datatype]string{ + datatypeString: "string", + datatypeIDRef: "string", + datatypeNCName: "string", + datatypeNMToken: "string", + datatypeID: "string", + datatypeURIRef: "string", +} diff --git a/metaschema/template.go b/metaschema/template.go index f5d7e1fe..5a7e99e7 100644 --- a/metaschema/template.go +++ b/metaschema/template.go @@ -13,33 +13,12 @@ import ( "github.com/jinzhu/inflection" ) -const ( - DatatypeString Datatype = "string" - DatatypeIDRef Datatype = "IDREF" - DatatypeNCName Datatype = "NCName" - DatatypeNMToken Datatype = "NMTOKEN" - DatatypeID Datatype = "ID" - DatatypeAnyURI Datatype = "anyURI" -) - -type Datatype string - -var datatypes = map[Datatype]string{ - DatatypeString: "string", - DatatypeIDRef: "string", - DatatypeNCName: "string", - DatatypeNMToken: "string", - DatatypeID: "string", - DatatypeAnyURI: "Href", -} - func GenerateTypes(metaschema *Metaschema) error { t, err := template.New("types.tmpl").Funcs(template.FuncMap{ "toLower": strings.ToLower, "toCamel": strcase.ToCamel, "toLowerCamel": strcase.ToLowerCamel, "plural": inflection.Plural, - "parseDatatype": parseDatatype, "packageImport": packageImport, "getImports": getImports, "requiresPointer": requiresPointer, @@ -72,15 +51,6 @@ func GenerateTypes(metaschema *Metaschema) error { return nil } -func parseDatatype(datatype string, packageName string) string { - if packageName != "catalog" { - if dt, ok := datatypes[Datatype(datatype)]; ok && dt != "string" { - return fmt.Sprintf("*catalog.%s", dt) - } - } - return datatypes[Datatype(datatype)] -} - func packageImport(named string, metaschema Metaschema) string { for _, df := range metaschema.DefineFlag { if df.Name == named { diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index 93b59fa9..82cc2cbc 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -17,11 +17,10 @@ type {{toCamel .Name}} struct { {{- end}} {{- range .Flags}} // {{ .GoComment }} - {{- $dt := parseDatatype .Datatype $packageName}} {{- if and (eq "id" .Name) (eq "profile" $packageName)}} Id string `xml:"param-id,attr,omitempty" json:"id,omitempty"` {{- else}} - {{toCamel .Name}} {{if eq "" $dt}}string{{else}}{{$dt}}{{end}} `xml:"{{ .Name }},attr,omitempty" json:"{{toLowerCamel .Name}},omitempty"` + {{toCamel .Name}} {{.GoDatatype}} `xml:"{{ .Name }},attr,omitempty" json:"{{toLowerCamel .Name}},omitempty"` {{- end}} {{- end}} {{if .Model}} @@ -79,8 +78,7 @@ type {{toCamel .Name}} struct { type {{toCamel .Name}} struct { {{- range .Flags}} // {{ .GoComment }} - {{- $dt := parseDatatype .Datatype $packageName -}} - {{toCamel .Name}} {{if eq "" $dt}}string{{else}}{{$dt}}{{end}} `xml:"{{ .Name }},attr,omitempty" json:"{{toLowerCamel .Name}},omitempty"` + {{toCamel .Name}} {{.GoDatatype}} `xml:"{{ .Name }},attr,omitempty" json:"{{toLowerCamel .Name}},omitempty"` {{end -}} Value string `xml:",chardata" json:"value,omitempty"` From a227c8e6eb38bd56b6429e429efb3326d54b6345 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 21:01:13 +0100 Subject: [PATCH 028/110] Fix missing flag name --- metaschema/metaschema.go | 8 ++++++++ metaschema/types.tmpl | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index f972bb28..c6640512 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -3,6 +3,7 @@ package metaschema import ( "encoding/xml" "fmt" + "github.com/iancoleman/strcase" "net/url" ) @@ -271,6 +272,13 @@ func (f *Flag) GoDatatype() (string, error) { return goDatatypeMap[dt], nil } +func (f *Flag) GoName() string { + if f.Name != "" { + return strcase.ToCamel(f.Name) + } + return strcase.ToCamel(f.Def.Name) +} + type Choice struct { Field []Field `xml:"field"` Assembly []Assembly `xml:"assembly"` diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index 82cc2cbc..b87dd55c 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -20,7 +20,7 @@ type {{toCamel .Name}} struct { {{- if and (eq "id" .Name) (eq "profile" $packageName)}} Id string `xml:"param-id,attr,omitempty" json:"id,omitempty"` {{- else}} - {{toCamel .Name}} {{.GoDatatype}} `xml:"{{ .Name }},attr,omitempty" json:"{{toLowerCamel .Name}},omitempty"` + {{.GoName}} {{.GoDatatype}} `xml:"{{ .Name }},attr,omitempty" json:"{{toLowerCamel .Name}},omitempty"` {{- end}} {{- end}} {{if .Model}} @@ -78,7 +78,7 @@ type {{toCamel .Name}} struct { type {{toCamel .Name}} struct { {{- range .Flags}} // {{ .GoComment }} - {{toCamel .Name}} {{.GoDatatype}} `xml:"{{ .Name }},attr,omitempty" json:"{{toLowerCamel .Name}},omitempty"` + {{.GoName}} {{.GoDatatype}} `xml:"{{ .Name }},attr,omitempty" json:"{{toLowerCamel .Name}},omitempty"` {{end -}} Value string `xml:",chardata" json:"value,omitempty"` From 12e1ae8c5f9a1bd3f269739cf7f4ddc0a8eb6a36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 21:08:55 +0100 Subject: [PATCH 029/110] Formatting --- metaschema/types.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index b87dd55c..dfe2c73f 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -74,7 +74,7 @@ type {{toCamel .Name}} struct { {{range .DefineField}} // {{ .Description }} {{$l := len .Flags -}} -{{if gt $l 0 -}} +{{- if gt $l 0 -}} type {{toCamel .Name}} struct { {{- range .Flags}} // {{ .GoComment }} From 83b6eaa19f063154984142bf9cb098c2d97263b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 21:10:04 +0100 Subject: [PATCH 030/110] Generate go code for oscal_metadata_metaschema.xml --- .../oscal/validation_root/validation_root.go | 415 ++++++++++++++++++ 1 file changed, 415 insertions(+) create mode 100644 types/oscal/validation_root/validation_root.go diff --git a/types/oscal/validation_root/validation_root.go b/types/oscal/validation_root/validation_root.go new file mode 100644 index 00000000..f528e064 --- /dev/null +++ b/types/oscal/validation_root/validation_root.go @@ -0,0 +1,415 @@ +// Code generated by go generate; DO NOT EDIT. +package validation_root + +import () + +// NOT TO BE USED IN A METASCHEMA +type VALIDATIONRoot struct { + + // A description supporting the parent item. + Description Description `xml:"description,omitempty" json:"description,omitempty"` + // Additional commentary on the parent item. + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // References a defined in . + PartyId PartyId `xml:"party-id,omitempty" json:"partyId,omitempty"` + // Provides information about the publication and availability of the containing document. + Metadata *Metadata `xml:"metadata,omitempty" json:"metadata,omitempty"` + // A collection of citations and resource references. + BackMatter *BackMatter `xml:"back-matter,omitempty" json:"backMatter,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation *Annotation `xml:"annotation,omitempty" json:"annotation,omitempty"` + // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. + ResponsibleParty []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParty,omitempty"` +} + +// Provides information about the publication and availability of the containing document. +type Metadata struct { + + // A title for display and navigation + Title Title `xml:"title,omitempty" json:"title,omitempty"` + // The date and time this document was published. + Published Published `xml:"published,omitempty" json:"published,omitempty"` + // Date and time of last modification. + LastModified LastModified `xml:"last-modified,omitempty" json:"lastModified,omitempty"` + // The version of the document content. + Version Version `xml:"version,omitempty" json:"version,omitempty"` + // OSCAL model version. + OscalVersion OscalVersion `xml:"oscal-version,omitempty" json:"oscalVersion,omitempty"` + // A document identifier qualified by an identifier . + DocId []DocId `xml:"document-ids,omitempty" json:"docId,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []Prop `xml:"properties,omitempty" json:"prop,omitempty"` + // A reference to a local or remote resource + Link []Link `xml:"links,omitempty" json:"link,omitempty"` + // Additional commentary on the parent item. + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // Defining a role to be assigned to a party + Role []Role `xml:"roles,omitempty" json:"role,omitempty"` + // A responsible entity, either singular (an organization or person) or collective (multiple persons) + Party []Party `xml:"parties,omitempty" json:"party,omitempty"` + // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. + ResponsibleParty []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParty,omitempty"` +} + +// A collection of citations and resource references. +type BackMatter struct { + + // A citation to resources, either external or internal (by means of internal cross-reference). + Citation []Citation `xml:"citations,omitempty" json:"citation,omitempty"` + // A resource associated with the present document. + Resource []Resource `xml:"resources,omitempty" json:"resource,omitempty"` +} + +// A name/value pair with optional explanatory remarks. +type Annotation struct { + + // Identifying the purpose and intended use of the property, part or other object. + Name string `xml:",attr,omitempty" json:",omitempty"` + // Unique identifier of the containing object + Id string `xml:",attr,omitempty" json:",omitempty"` + // A namespace qualifying the name. + Ns string `xml:",attr,omitempty" json:",omitempty"` + // Indicates the value of the characteristic. + Value string `xml:"value,attr,omitempty" json:"value,omitempty"` + + // Additional commentary on the parent item. + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` +} + +// A responsible entity, either singular (an organization or person) or collective (multiple persons) +type Party struct { + + // Unique identifier of the containing object + Id string `xml:",attr,omitempty" json:",omitempty"` + + // A value with a name, attributed to the containing control, part, or group. + Prop []Prop `xml:"properties,omitempty" json:"prop,omitempty"` + // A reference to a local or remote resource + Link []Link `xml:"links,omitempty" json:"link,omitempty"` + // Additional commentary on the parent item. + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A person, with contact information + Person []Person `xml:"persons,omitempty" json:"person,omitempty"` + // An organization or legal entity (not a person), with contact information + Org *Org `xml:"org,omitempty" json:"org,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []Annotation `xml:"annotations,omitempty" json:"annotation,omitempty"` +} + +// A person, with contact information +type Person struct { + + // Full (legal) name of an individual + PersonName PersonName `xml:"person-name,omitempty" json:"personName,omitempty"` + // A common name, short name or acronym + ShortName ShortName `xml:"short-name,omitempty" json:"shortName,omitempty"` + // Affiliated organization + OrgName OrgName `xml:"org-name,omitempty" json:"orgName,omitempty"` + // An identifier for a person (such as an ORCID) using a designated scheme. + PersonId []PersonId `xml:"person-ids,omitempty" json:"personId,omitempty"` + // An identifier for an organization using a designated scheme. + OrgId []OrgId `xml:"organization-ids,omitempty" json:"orgId,omitempty"` + // Email address + Email []Email `xml:"email-addresses,omitempty" json:"email,omitempty"` + // Contact number by telephone + Phone []Phone `xml:"telephone-numbers,omitempty" json:"phone,omitempty"` + // URL for web site or Internet presence + Url []Url `xml:"URLs,omitempty" json:"url,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []Prop `xml:"properties,omitempty" json:"prop,omitempty"` + // A reference to a local or remote resource + Link []Link `xml:"links,omitempty" json:"link,omitempty"` + // Additional commentary on the parent item. + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A postal address. + Address []Address `xml:"addresses,omitempty" json:"address,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []Annotation `xml:"annotations,omitempty" json:"annotation,omitempty"` +} + +// An organization or legal entity (not a person), with contact information +type Org struct { + + // Full (legal) name of an organization + OrgName OrgName `xml:"org-name,omitempty" json:"orgName,omitempty"` + // A common name, short name or acronym + ShortName ShortName `xml:"short-name,omitempty" json:"shortName,omitempty"` + // An identifier for an organization using a designated scheme. + OrgId []OrgId `xml:"organization-ids,omitempty" json:"orgId,omitempty"` + // Email address + Email []Email `xml:"email-addresses,omitempty" json:"email,omitempty"` + // Contact number by telephone + Phone []Phone `xml:"telephone-numbers,omitempty" json:"phone,omitempty"` + // URL for web site or Internet presence + Url []Url `xml:"URLs,omitempty" json:"url,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []Prop `xml:"properties,omitempty" json:"prop,omitempty"` + // A reference to a local or remote resource + Link []Link `xml:"links,omitempty" json:"link,omitempty"` + // Additional commentary on the parent item. + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A postal address. + Address []Address `xml:"addresses,omitempty" json:"address,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []Annotation `xml:"annotations,omitempty" json:"annotation,omitempty"` +} + +// A pointer to an external copy of a document with optional hash for verification +type Rlink struct { + + // A link to a document or document fragment (actual, nominal or projected) + Href string `xml:",attr,omitempty" json:",omitempty"` + // Describes the media type of the linked resource + MediaType string `xml:",attr,omitempty" json:",omitempty"` + + // A representation of a cryptographic digest generated over a resource using a hash algorithm. + Hash []Hash `xml:"hashes,omitempty" json:"hash,omitempty"` +} + +// A postal address. +type Address struct { + + // Indicates the type of address. + Type string `xml:",attr,omitempty" json:",omitempty"` + + // A single line of an address. + AddrLine []AddrLine `xml:"postal-address,omitempty" json:"addrLine,omitempty"` + // City, town or geographical region for mailing address + City City `xml:"city,omitempty" json:"city,omitempty"` + // State, province or analogous geographical region for mailing address + State State `xml:"state,omitempty" json:"state,omitempty"` + // Postal or ZIP code for mailing address + PostalCode PostalCode `xml:"postal-code,omitempty" json:"postalCode,omitempty"` + // Country for mailing address + Country Country `xml:"country,omitempty" json:"country,omitempty"` +} + +// A resource associated with the present document. +type Resource struct { + + // Unique identifier of the containing object + Id string `xml:",attr,omitempty" json:",omitempty"` + + // A short textual description + Desc Desc `xml:"desc,omitempty" json:"desc,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []Prop `xml:"properties,omitempty" json:"prop,omitempty"` + // + Base64 *Base64 `xml:"base64,omitempty" json:"base64,omitempty"` + // Additional commentary on the parent item. + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A pointer to an external copy of a document with optional hash for verification + Rlink []Rlink `xml:"rlinks,omitempty" json:"rlink,omitempty"` +} + +// Defining a role to be assigned to a party +type Role struct { + + // Unique identifier of the containing object + Id string `xml:",attr,omitempty" json:",omitempty"` + + // A title for display and navigation + Title Title `xml:"title,omitempty" json:"title,omitempty"` + // A common name, short name or acronym + ShortName ShortName `xml:"short-name,omitempty" json:"shortName,omitempty"` + // A short textual description + Desc Desc `xml:"desc,omitempty" json:"desc,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []Prop `xml:"properties,omitempty" json:"prop,omitempty"` + // A reference to a local or remote resource + Link []Link `xml:"links,omitempty" json:"link,omitempty"` + // Additional commentary on the parent item. + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []Annotation `xml:"annotations,omitempty" json:"annotation,omitempty"` +} + +// A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. +type ResponsibleParty struct { + + // The role that the party is responsible for. + RoleId string `xml:"role-id,attr,omitempty" json:"roleId,omitempty"` + + // References a defined in . + PartyId []PartyId `xml:"party-ids,omitempty" json:"partyId,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []Prop `xml:"properties,omitempty" json:"prop,omitempty"` + // A reference to a local or remote resource + Link []Link `xml:"links,omitempty" json:"link,omitempty"` + // Additional commentary on the parent item. + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []Annotation `xml:"annotations,omitempty" json:"annotation,omitempty"` +} + +// A citation to resources, either external or internal (by means of internal cross-reference). +type Citation struct { + + // Unique identifier of the containing object + Id string `xml:",attr,omitempty" json:",omitempty"` + + // An address for retrieval of a citation + Target []Target `xml:"targets,omitempty" json:"target,omitempty"` + // A title for display and navigation + Title Title `xml:"title,omitempty" json:"title,omitempty"` + // A short textual description + Desc Desc `xml:"desc,omitempty" json:"desc,omitempty"` + // A document identifier qualified by an identifier . + DocId []DocId `xml:"document-ids,omitempty" json:"docId,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []Prop `xml:"properties,omitempty" json:"prop,omitempty"` +} + +// A reference to a local or remote resource +type Link struct { + // A link to a document or document fragment (actual, nominal or projected) + Href string `xml:",attr,omitempty" json:",omitempty"` + + // Describes the type of relationship provided by the link. This can be an indicator of the link's purpose. + Rel string `xml:",attr,omitempty" json:",omitempty"` + + // Describes the media type of the linked resource + MediaType string `xml:",attr,omitempty" json:",omitempty"` + Value string `xml:",chardata" json:"value,omitempty"` +} + +// The date and time this document was published. + +type Published string + +// Date and time of last modification. + +type LastModified string + +// The version of the document content. + +type Version string + +// OSCAL model version. + +type OscalVersion string + +// A document identifier qualified by an identifier . +type DocId struct { + // Qualifies the kind of document identifier. + Type string `xml:",attr,omitempty" json:",omitempty"` + Value string `xml:",chardata" json:"value,omitempty"` +} + +// A value with a name, attributed to the containing control, part, or group. +type Prop struct { + // Identifying the purpose and intended use of the property, part or other object. + Name string `xml:",attr,omitempty" json:",omitempty"` + + // Unique identifier of the containing object + Id string `xml:",attr,omitempty" json:",omitempty"` + + // A namespace qualifying the name. + Ns string `xml:",attr,omitempty" json:",omitempty"` + + // Indicating the type or classification of the containing object + Class string `xml:",attr,omitempty" json:",omitempty"` + Value string `xml:",chardata" json:"value,omitempty"` +} + +// References a defined in . + +type PartyId string + +// An identifier for a person (such as an ORCID) using a designated scheme. +type PersonId struct { + // Indicating the type of identifier, address, email or other data item. + Type string `xml:",attr,omitempty" json:",omitempty"` + Value string `xml:",chardata" json:"value,omitempty"` +} + +// An identifier for an organization using a designated scheme. +type OrgId struct { + // Indicating the type of identifier, address, email or other data item. + Type string `xml:",attr,omitempty" json:",omitempty"` + Value string `xml:",chardata" json:"value,omitempty"` +} + +// Full (legal) name of an individual + +type PersonName string + +// Full (legal) name of an organization + +type OrgName string + +// A common name, short name or acronym + +type ShortName string + +// A single line of an address. + +type AddrLine string + +// City, town or geographical region for mailing address + +type City string + +// State, province or analogous geographical region for mailing address + +type State string + +// Postal or ZIP code for mailing address + +type PostalCode string + +// Country for mailing address + +type Country string + +// Email address + +type Email string + +// Contact number by telephone +type Phone struct { + // Indicates the type of phone number. + Type string `xml:",attr,omitempty" json:",omitempty"` + Value string `xml:",chardata" json:"value,omitempty"` +} + +// URL for web site or Internet presence + +type Url string + +// A short textual description + +type Desc string + +// A representation of a cryptographic digest generated over a resource using a hash algorithm. +type Hash struct { + // Method by which a hash is derived + Algorithm string `xml:",attr,omitempty" json:",omitempty"` + Value string `xml:",chardata" json:"value,omitempty"` +} + +// A title for display and navigation + +type Title string + +// +type Base64 struct { + // Name of the file before it was encoded as Base64 to be embedded in a . This is the name that will be assigned to the file when the file is decoded. + Filename string `xml:",attr,omitempty" json:",omitempty"` + + // Describes the media type of the linked resource + MediaType string `xml:",attr,omitempty" json:",omitempty"` + Value string `xml:",chardata" json:"value,omitempty"` +} + +// An address for retrieval of a citation + +type Target string + +// A description supporting the parent item. + +type Description string + +// Additional commentary on the parent item. + +type Remarks string From b74fb7af81def5677f1678398123042a3ea4d6a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 21:15:26 +0100 Subject: [PATCH 031/110] Publish up errors that occurred during document linking --- metaschema/generate.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/metaschema/generate.go b/metaschema/generate.go index 95eaf0a1..ffdc5493 100644 --- a/metaschema/generate.go +++ b/metaschema/generate.go @@ -93,7 +93,7 @@ func decode(r io.Reader) (*metaschema.Metaschema, error) { meta.ImportedMetaschema = append(meta.ImportedMetaschema, *importedMeta) } - meta.LinkDefinitions() + err := meta.LinkDefinitions() - return &meta, nil + return &meta, err } From 54a373e417a69856a5915438fe2577f519a38e43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 21:20:03 +0100 Subject: [PATCH 032/110] Recurse into imported metaschemas when seeing unresolved reference. --- metaschema/metaschema.go | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index c6640512..11e194c0 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -120,6 +120,12 @@ func (metaschema *Metaschema) GetDefineField(name string) (*DefineField, error) return &v, nil } } + for _, m := range metaschema.ImportedMetaschema { + f, err := m.GetDefineField(name) + if err == nil { + return f, err + } + } return nil, fmt.Errorf("Could not find define-field element with name='%s'.", name) } @@ -129,15 +135,27 @@ func (metaschema *Metaschema) GetDefineAssembly(name string) (*DefineAssembly, e return &v, nil } } + for _, m := range metaschema.ImportedMetaschema { + a, err := m.GetDefineAssembly(name) + if err == nil { + return a, err + } + } return nil, fmt.Errorf("Could not find define-assembly element with name='%s'.", name) } -func (Metaschema *Metaschema) GetDefineFlag(name string) (*DefineFlag, error) { - for _, v := range Metaschema.DefineFlag { +func (metaschema *Metaschema) GetDefineFlag(name string) (*DefineFlag, error) { + for _, v := range metaschema.DefineFlag { if name == v.Name { return &v, nil } } + for _, m := range metaschema.ImportedMetaschema { + f, err := m.GetDefineFlag(name) + if err == nil { + return f, err + } + } return nil, fmt.Errorf("Could not find define-flag element with name='%s'.", name) } From 0ce377d965eecbeb5b3278c59309427bad07130b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 22:15:59 +0100 Subject: [PATCH 033/110] Get a rid of requiresPointer method --- metaschema/metaschema.go | 30 ++++++++++++++++++++++++++++++ metaschema/template.go | 21 ++++++--------------- metaschema/types.tmpl | 4 ++-- 3 files changed, 38 insertions(+), 17 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 11e194c0..a2409b4a 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -98,6 +98,28 @@ func (metaschema *Metaschema) LinkDefinitions() error { } } + for _, c := range da.Model.Choice { + for i, a := range c.Assembly { + if a.Ref != "" { + a.Def, err = metaschema.GetDefineAssembly(a.Ref) + if err != nil { + return err + } + c.Assembly[i] = a + } + } + for i, f := range c.Field { + if f.Ref != "" { + f.Def, err = metaschema.GetDefineField(f.Ref) + if err != nil { + return err + } + c.Field[i] = f + + } + } + + } } for _, df := range metaschema.DefineField { @@ -259,6 +281,14 @@ func (f *Field) GoComment() string { return f.Def.Description } +func (f *Field) RequiresPointer() bool { + if f.Def == nil { + fmt.Println(f.Ref) + panic(f) + } + return f.Def.RequiresPointer() +} + type Flag struct { Name string `xml:"name,attr"` AsType datatype `xml:"as-type,attr"` diff --git a/metaschema/template.go b/metaschema/template.go index 5a7e99e7..fb282a43 100644 --- a/metaschema/template.go +++ b/metaschema/template.go @@ -15,13 +15,12 @@ import ( func GenerateTypes(metaschema *Metaschema) error { t, err := template.New("types.tmpl").Funcs(template.FuncMap{ - "toLower": strings.ToLower, - "toCamel": strcase.ToCamel, - "toLowerCamel": strcase.ToLowerCamel, - "plural": inflection.Plural, - "packageImport": packageImport, - "getImports": getImports, - "requiresPointer": requiresPointer, + "toLower": strings.ToLower, + "toCamel": strcase.ToCamel, + "toLowerCamel": strcase.ToLowerCamel, + "plural": inflection.Plural, + "packageImport": packageImport, + "getImports": getImports, }).ParseFiles("types.tmpl") if err != nil { return err @@ -92,11 +91,3 @@ func getImports(metaschema Metaschema) string { return imports.String() } - -func requiresPointer(fieldName string, metaschema Metaschema) bool { - df, err := metaschema.GetDefineField(fieldName) - if err == nil { - return df.RequiresPointer() - } - return false -} diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index dfe2c73f..a5c01773 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -32,7 +32,7 @@ type {{toCamel .Name}} struct { {{ toCamel .Name}} {{if $groupAs}}[]{{else}}{{if .RequiresPointer}}*{{end}}{{end}}{{packageImport .Name $m}}{{toCamel .Name}} `xml:"{{ if $groupAs}}{{ $groupAs.Name }}{{else}}{{ .Name }}{{end}},omitempty" json:"{{toLowerCamel .Name}},omitempty"` {{- end }} {{- else }} - {{ toCamel .Named}} {{if requiresPointer .Named $m}}*{{end}}{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` + {{ toCamel .Named}} {{if .RequiresPointer}}*{{end}}{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` {{- end}} {{- end}} @@ -50,7 +50,7 @@ type {{toCamel .Name}} struct { {{- range .Model.Choice}} {{- range .Field}} - {{toCamel .Named}} {{if requiresPointer .Named $m}}*{{end}}{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` + {{toCamel .Named}} {{if .RequiresPointer}}*{{end}}{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` {{- end}} {{- range .Assembly}} From dc398b82d06c9811821ecc2f7577ece998f38bde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 22:32:50 +0100 Subject: [PATCH 034/110] Implement model/choice/field processing + fix & refactor along the way --- metaschema/metaschema.go | 26 +++++++++ metaschema/types.tmpl | 12 +--- .../oscal/validation_root/validation_root.go | 58 +++++++++---------- 3 files changed, 58 insertions(+), 38 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index a2409b4a..f2acdbae 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -289,6 +289,32 @@ func (f *Field) RequiresPointer() bool { return f.Def.RequiresPointer() } +func (f *Field) GoName() string { + if f.Named != "" { + return strcase.ToCamel(f.Named) + } + return strcase.ToCamel(f.Def.Name) +} + +func (f *Field) GoMemLayout() string { + if f.GroupAs != nil { + return "[]" + } else if f.RequiresPointer() { + return "*" + } + return "" +} + +func (f *Field) XmlName() string { + if f.GroupAs != nil { + return f.GroupAs.Name + } else if f.Named != "" { + return f.Named + } else { + return f.Def.Name + } +} + type Flag struct { Name string `xml:"name,attr"` AsType datatype `xml:"as-type,attr"` diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index a5c01773..ae1fc7e8 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -26,14 +26,7 @@ type {{toCamel .Name}} struct { {{if .Model}} {{ range .Model.Field}} // {{ .GoComment }} - {{- if .Def }} - {{- $groupAs := .GroupAs }} - {{- with .Def }} - {{ toCamel .Name}} {{if $groupAs}}[]{{else}}{{if .RequiresPointer}}*{{end}}{{end}}{{packageImport .Name $m}}{{toCamel .Name}} `xml:"{{ if $groupAs}}{{ $groupAs.Name }}{{else}}{{ .Name }}{{end}},omitempty" json:"{{toLowerCamel .Name}},omitempty"` - {{- end }} - {{- else }} - {{ toCamel .Named}} {{if .RequiresPointer}}*{{end}}{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` - {{- end}} + {{.GoName}} {{.GoMemLayout}}{{packageImport .Named $m}}{{.GoName}} `xml:"{{ .XmlName }},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{- end}} {{- range .Model.Assembly}} @@ -50,7 +43,8 @@ type {{toCamel .Name}} struct { {{- range .Model.Choice}} {{- range .Field}} - {{toCamel .Named}} {{if .RequiresPointer}}*{{end}}{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` + // {{ .GoComment }} + {{.GoName}} {{.GoMemLayout}}{{packageImport .Named $m}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{- end}} {{- range .Assembly}} diff --git a/types/oscal/validation_root/validation_root.go b/types/oscal/validation_root/validation_root.go index f528e064..8a2a2185 100644 --- a/types/oscal/validation_root/validation_root.go +++ b/types/oscal/validation_root/validation_root.go @@ -36,11 +36,11 @@ type Metadata struct { // OSCAL model version. OscalVersion OscalVersion `xml:"oscal-version,omitempty" json:"oscalVersion,omitempty"` // A document identifier qualified by an identifier . - DocId []DocId `xml:"document-ids,omitempty" json:"docId,omitempty"` + DocId []DocId `xml:"document-ids,omitempty" json:"documentIds,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []Prop `xml:"properties,omitempty" json:"prop,omitempty"` + Prop []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []Link `xml:"links,omitempty" json:"link,omitempty"` + Link []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // Defining a role to be assigned to a party @@ -83,9 +83,9 @@ type Party struct { Id string `xml:",attr,omitempty" json:",omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []Prop `xml:"properties,omitempty" json:"prop,omitempty"` + Prop []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []Link `xml:"links,omitempty" json:"link,omitempty"` + Link []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A person, with contact information @@ -106,19 +106,19 @@ type Person struct { // Affiliated organization OrgName OrgName `xml:"org-name,omitempty" json:"orgName,omitempty"` // An identifier for a person (such as an ORCID) using a designated scheme. - PersonId []PersonId `xml:"person-ids,omitempty" json:"personId,omitempty"` + PersonId []PersonId `xml:"person-ids,omitempty" json:"personIds,omitempty"` // An identifier for an organization using a designated scheme. - OrgId []OrgId `xml:"organization-ids,omitempty" json:"orgId,omitempty"` + OrgId []OrgId `xml:"organization-ids,omitempty" json:"organizationIds,omitempty"` // Email address - Email []Email `xml:"email-addresses,omitempty" json:"email,omitempty"` + Email []Email `xml:"email-addresses,omitempty" json:"emailAddresses,omitempty"` // Contact number by telephone - Phone []Phone `xml:"telephone-numbers,omitempty" json:"phone,omitempty"` + Phone []Phone `xml:"telephone-numbers,omitempty" json:"telephoneNumbers,omitempty"` // URL for web site or Internet presence - Url []Url `xml:"URLs,omitempty" json:"url,omitempty"` + Url []Url `xml:"URLs,omitempty" json:"uRLs,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []Prop `xml:"properties,omitempty" json:"prop,omitempty"` + Prop []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []Link `xml:"links,omitempty" json:"link,omitempty"` + Link []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A postal address. @@ -135,17 +135,17 @@ type Org struct { // A common name, short name or acronym ShortName ShortName `xml:"short-name,omitempty" json:"shortName,omitempty"` // An identifier for an organization using a designated scheme. - OrgId []OrgId `xml:"organization-ids,omitempty" json:"orgId,omitempty"` + OrgId []OrgId `xml:"organization-ids,omitempty" json:"organizationIds,omitempty"` // Email address - Email []Email `xml:"email-addresses,omitempty" json:"email,omitempty"` + Email []Email `xml:"email-addresses,omitempty" json:"emailAddresses,omitempty"` // Contact number by telephone - Phone []Phone `xml:"telephone-numbers,omitempty" json:"phone,omitempty"` + Phone []Phone `xml:"telephone-numbers,omitempty" json:"telephoneNumbers,omitempty"` // URL for web site or Internet presence - Url []Url `xml:"URLs,omitempty" json:"url,omitempty"` + Url []Url `xml:"URLs,omitempty" json:"uRLs,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []Prop `xml:"properties,omitempty" json:"prop,omitempty"` + Prop []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []Link `xml:"links,omitempty" json:"link,omitempty"` + Link []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A postal address. @@ -163,7 +163,7 @@ type Rlink struct { MediaType string `xml:",attr,omitempty" json:",omitempty"` // A representation of a cryptographic digest generated over a resource using a hash algorithm. - Hash []Hash `xml:"hashes,omitempty" json:"hash,omitempty"` + Hash []Hash `xml:"hashes,omitempty" json:"hashes,omitempty"` } // A postal address. @@ -173,7 +173,7 @@ type Address struct { Type string `xml:",attr,omitempty" json:",omitempty"` // A single line of an address. - AddrLine []AddrLine `xml:"postal-address,omitempty" json:"addrLine,omitempty"` + AddrLine []AddrLine `xml:"postal-address,omitempty" json:"postalAddress,omitempty"` // City, town or geographical region for mailing address City City `xml:"city,omitempty" json:"city,omitempty"` // State, province or analogous geographical region for mailing address @@ -193,7 +193,7 @@ type Resource struct { // A short textual description Desc Desc `xml:"desc,omitempty" json:"desc,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []Prop `xml:"properties,omitempty" json:"prop,omitempty"` + Prop []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // Base64 *Base64 `xml:"base64,omitempty" json:"base64,omitempty"` // Additional commentary on the parent item. @@ -215,9 +215,9 @@ type Role struct { // A short textual description Desc Desc `xml:"desc,omitempty" json:"desc,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []Prop `xml:"properties,omitempty" json:"prop,omitempty"` + Prop []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []Link `xml:"links,omitempty" json:"link,omitempty"` + Link []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. @@ -231,11 +231,11 @@ type ResponsibleParty struct { RoleId string `xml:"role-id,attr,omitempty" json:"roleId,omitempty"` // References a defined in . - PartyId []PartyId `xml:"party-ids,omitempty" json:"partyId,omitempty"` + PartyId []PartyId `xml:"party-ids,omitempty" json:"partyIds,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []Prop `xml:"properties,omitempty" json:"prop,omitempty"` + Prop []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []Link `xml:"links,omitempty" json:"link,omitempty"` + Link []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. @@ -249,15 +249,15 @@ type Citation struct { Id string `xml:",attr,omitempty" json:",omitempty"` // An address for retrieval of a citation - Target []Target `xml:"targets,omitempty" json:"target,omitempty"` + Target []Target `xml:"targets,omitempty" json:"targets,omitempty"` // A title for display and navigation Title Title `xml:"title,omitempty" json:"title,omitempty"` // A short textual description Desc Desc `xml:"desc,omitempty" json:"desc,omitempty"` // A document identifier qualified by an identifier . - DocId []DocId `xml:"document-ids,omitempty" json:"docId,omitempty"` + DocId []DocId `xml:"document-ids,omitempty" json:"documentIds,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []Prop `xml:"properties,omitempty" json:"prop,omitempty"` + Prop []Prop `xml:"properties,omitempty" json:"properties,omitempty"` } // A reference to a local or remote resource From 55ea4bde12af7107a3c64a5c93383750630e5569 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 18 Dec 2019 22:46:46 +0100 Subject: [PATCH 035/110] Implement model/choice/assembly processing + fix & refactor along the way --- metaschema/metaschema.go | 24 +++++++++++++++ metaschema/types.tmpl | 12 ++------ .../oscal/validation_root/validation_root.go | 30 +++++++++---------- 3 files changed, 42 insertions(+), 24 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index f2acdbae..ab0b36eb 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -263,6 +263,30 @@ func (a *Assembly) GoComment() string { return a.Def.Description } +func (a *Assembly) GoName() string { + if a.Named != "" { + return strcase.ToCamel(a.Named) + } + return strcase.ToCamel(a.Def.Name) +} + +func (a *Assembly) GoMemLayout() string { + if a.GroupAs != nil { + return "[]" + } + return "*" +} + +func (a *Assembly) XmlName() string { + if a.GroupAs != nil { + return a.GroupAs.Name + } else if a.Named != "" { + return a.Named + } else { + return a.Def.Name + } +} + type Field struct { Named string `xml:"named,attr"` Required string `xml:"required,attr"` diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index ae1fc7e8..f248c2b8 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -31,14 +31,7 @@ type {{toCamel .Name}} struct { {{- range .Model.Assembly}} // {{ .GoComment }} - {{- if .Def}} - {{- $groupAs := .GroupAs }} - {{- with .Def }} - {{ toCamel .Name}} {{if $groupAs}}[]{{else}}*{{end}}{{packageImport .Name $m}}{{toCamel .Name}} `xml:"{{ if $groupAs }}{{$groupAs.Name}}{{else}}{{ .Name }}{{end}},omitempty" json:"{{toLowerCamel .Name}},omitempty"` - {{- end}} - {{- else }} - {{toCamel .Named}} *{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` - {{- end}} + {{.GoName}} {{.GoMemLayout}}{{packageImport .Named $m}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{- end}} {{- range .Model.Choice}} @@ -48,7 +41,8 @@ type {{toCamel .Name}} struct { {{- end}} {{- range .Assembly}} - {{toCamel .Named}} *{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"` + // {{ .GoComment }} + {{.GoName}} {{.GoMemLayout}}{{packageImport .Named $m}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{- end}} {{- end}} diff --git a/types/oscal/validation_root/validation_root.go b/types/oscal/validation_root/validation_root.go index 8a2a2185..98dff1ce 100644 --- a/types/oscal/validation_root/validation_root.go +++ b/types/oscal/validation_root/validation_root.go @@ -19,7 +19,7 @@ type VALIDATIONRoot struct { // A name/value pair with optional explanatory remarks. Annotation *Annotation `xml:"annotation,omitempty" json:"annotation,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. - ResponsibleParty []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParty,omitempty"` + ResponsibleParty []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` } // Provides information about the publication and availability of the containing document. @@ -44,20 +44,20 @@ type Metadata struct { // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // Defining a role to be assigned to a party - Role []Role `xml:"roles,omitempty" json:"role,omitempty"` + Role []Role `xml:"roles,omitempty" json:"roles,omitempty"` // A responsible entity, either singular (an organization or person) or collective (multiple persons) - Party []Party `xml:"parties,omitempty" json:"party,omitempty"` + Party []Party `xml:"parties,omitempty" json:"parties,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. - ResponsibleParty []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParty,omitempty"` + ResponsibleParty []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` } // A collection of citations and resource references. type BackMatter struct { // A citation to resources, either external or internal (by means of internal cross-reference). - Citation []Citation `xml:"citations,omitempty" json:"citation,omitempty"` + Citation []Citation `xml:"citations,omitempty" json:"citations,omitempty"` // A resource associated with the present document. - Resource []Resource `xml:"resources,omitempty" json:"resource,omitempty"` + Resource []Resource `xml:"resources,omitempty" json:"resources,omitempty"` } // A name/value pair with optional explanatory remarks. @@ -89,11 +89,11 @@ type Party struct { // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A person, with contact information - Person []Person `xml:"persons,omitempty" json:"person,omitempty"` + Person []Person `xml:"persons,omitempty" json:"persons,omitempty"` // An organization or legal entity (not a person), with contact information Org *Org `xml:"org,omitempty" json:"org,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []Annotation `xml:"annotations,omitempty" json:"annotation,omitempty"` + Annotation []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` } // A person, with contact information @@ -122,9 +122,9 @@ type Person struct { // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A postal address. - Address []Address `xml:"addresses,omitempty" json:"address,omitempty"` + Address []Address `xml:"addresses,omitempty" json:"addresses,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []Annotation `xml:"annotations,omitempty" json:"annotation,omitempty"` + Annotation []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` } // An organization or legal entity (not a person), with contact information @@ -149,9 +149,9 @@ type Org struct { // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A postal address. - Address []Address `xml:"addresses,omitempty" json:"address,omitempty"` + Address []Address `xml:"addresses,omitempty" json:"addresses,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []Annotation `xml:"annotations,omitempty" json:"annotation,omitempty"` + Annotation []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` } // A pointer to an external copy of a document with optional hash for verification @@ -199,7 +199,7 @@ type Resource struct { // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A pointer to an external copy of a document with optional hash for verification - Rlink []Rlink `xml:"rlinks,omitempty" json:"rlink,omitempty"` + Rlink []Rlink `xml:"rlinks,omitempty" json:"rlinks,omitempty"` } // Defining a role to be assigned to a party @@ -221,7 +221,7 @@ type Role struct { // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []Annotation `xml:"annotations,omitempty" json:"annotation,omitempty"` + Annotation []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` } // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. @@ -239,7 +239,7 @@ type ResponsibleParty struct { // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []Annotation `xml:"annotations,omitempty" json:"annotation,omitempty"` + Annotation []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` } // A citation to resources, either external or internal (by means of internal cross-reference). From a5bdb6691513e7a7915e39a5dca2e7f95fafd767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 19 Dec 2019 10:30:27 +0100 Subject: [PATCH 036/110] Refactor: Extract method: GoPackageName --- metaschema/metaschema.go | 5 +++++ metaschema/template.go | 5 ++--- metaschema/types.tmpl | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index ab0b36eb..60e6007a 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/iancoleman/strcase" "net/url" + "strings" ) //go:generate go run generate.go @@ -181,6 +182,10 @@ func (metaschema *Metaschema) GetDefineFlag(name string) (*DefineFlag, error) { return nil, fmt.Errorf("Could not find define-flag element with name='%s'.", name) } +func (metaschema *Metaschema) GoPackageName() string { + return strings.ToLower(metaschema.Root) +} + func (Metaschema *Metaschema) ContainsRootElement() bool { for _, v := range Metaschema.DefineAssembly { if v.RepresentsRootElement() { diff --git a/metaschema/template.go b/metaschema/template.go index fb282a43..32fdeed5 100644 --- a/metaschema/template.go +++ b/metaschema/template.go @@ -15,7 +15,6 @@ import ( func GenerateTypes(metaschema *Metaschema) error { t, err := template.New("types.tmpl").Funcs(template.FuncMap{ - "toLower": strings.ToLower, "toCamel": strcase.ToCamel, "toLowerCamel": strcase.ToLowerCamel, "plural": inflection.Plural, @@ -26,7 +25,7 @@ func GenerateTypes(metaschema *Metaschema) error { return err } - packageName := strings.ToLower(metaschema.Root) + packageName := metaschema.GoPackageName() f, err := os.Create(fmt.Sprintf("../types/oscal/%s/%s.go", packageName, packageName)) if err != nil { return err @@ -84,7 +83,7 @@ func getImports(metaschema Metaschema) string { } for _, im := range metaschema.ImportedMetaschema { - imports.WriteString(fmt.Sprintf("\n\t\"github.com/docker/oscalkit/types/oscal/%s\"\n", strings.ReplaceAll(strings.ToLower(im.Root), "-", "_"))) + imports.WriteString(fmt.Sprintf("\n\t\"github.com/docker/oscalkit/types/oscal/%s\"\n", im.GoPackageName())) } imports.WriteString(")") diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index f248c2b8..3b0f287d 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -1,5 +1,5 @@ // Code generated by go generate; DO NOT EDIT. -{{$packageName := toLower .Root -}} +{{$packageName := .GoPackageName -}} package {{ $packageName }} {{getImports .}} From 0c051fdc4116c4cd0dee04c431bfd8b6f149e868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 19 Dec 2019 10:50:28 +0100 Subject: [PATCH 037/110] Make PackageName resolution more robust To work well with multiple imports at the same time. --- metaschema/metaschema.go | 43 +++++++++++++++++++++++++++++++++++++--- metaschema/template.go | 35 ++++---------------------------- metaschema/types.tmpl | 8 ++++---- 3 files changed, 48 insertions(+), 38 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 60e6007a..2f6e109d 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -76,9 +76,9 @@ func (metaschema *Metaschema) LinkDefinitions() error { if err != nil { return err } + f.Metaschema = metaschema da.Flags[i] = f } - } for i, a := range da.Model.Assembly { if a.Ref != "" { @@ -86,6 +86,7 @@ func (metaschema *Metaschema) LinkDefinitions() error { if err != nil { return err } + a.Metaschema = metaschema da.Model.Assembly[i] = a } } @@ -95,8 +96,8 @@ func (metaschema *Metaschema) LinkDefinitions() error { if err != nil { return err } + f.Metaschema = metaschema da.Model.Field[i] = f - } } for _, c := range da.Model.Choice { @@ -106,6 +107,7 @@ func (metaschema *Metaschema) LinkDefinitions() error { if err != nil { return err } + a.Metaschema = metaschema c.Assembly[i] = a } } @@ -115,8 +117,8 @@ func (metaschema *Metaschema) LinkDefinitions() error { if err != nil { return err } + f.Metaschema = metaschema c.Field[i] = f - } } @@ -140,6 +142,9 @@ func (metaschema *Metaschema) LinkDefinitions() error { func (metaschema *Metaschema) GetDefineField(name string) (*DefineField, error) { for _, v := range metaschema.DefineField { if name == v.Name { + if v.Metaschema == nil { + v.Metaschema = metaschema + } return &v, nil } } @@ -155,6 +160,9 @@ func (metaschema *Metaschema) GetDefineField(name string) (*DefineField, error) func (metaschema *Metaschema) GetDefineAssembly(name string) (*DefineAssembly, error) { for _, v := range metaschema.DefineAssembly { if name == v.Name { + if v.Metaschema == nil { + v.Metaschema = metaschema + } return &v, nil } } @@ -170,6 +178,9 @@ func (metaschema *Metaschema) GetDefineAssembly(name string) (*DefineAssembly, e func (metaschema *Metaschema) GetDefineFlag(name string) (*DefineFlag, error) { for _, v := range metaschema.DefineFlag { if name == v.Name { + if v.Metaschema == nil { + v.Metaschema = metaschema + } return &v, nil } } @@ -209,6 +220,7 @@ type DefineAssembly struct { Remarks *Remarks `xml:"remarks"` Model *Model `xml:"model"` Examples []Example `xml:"example"` + Metaschema *Metaschema } func (da *DefineAssembly) RepresentsRootElement() bool { @@ -226,6 +238,7 @@ type DefineField struct { Remarks *Remarks `xml:"remarks"` Examples []Example `xml:"example"` As As `xml:"as"` + Metaschema *Metaschema } func (df *DefineField) RequiresPointer() bool { @@ -241,6 +254,7 @@ type DefineFlag struct { Description string `xml:"description"` Remarks *Remarks `xml:"remarks"` Examples []Example `xml:"example"` + Metaschema *Metaschema } type Model struct { @@ -259,6 +273,7 @@ type Assembly struct { Ref string `xml:"ref,attr"` GroupAs *GroupAs `xml:"group-as"` Def *DefineAssembly + Metaschema *Metaschema } func (a *Assembly) GoComment() string { @@ -292,6 +307,16 @@ func (a *Assembly) XmlName() string { } } +func (a *Assembly) GoPackageName() string { + if a.Ref == "" { + return "" + } else if a.Def.Metaschema == a.Metaschema { + return "" + } else { + return a.Def.Metaschema.GoPackageName() + "." + } +} + type Field struct { Named string `xml:"named,attr"` Required string `xml:"required,attr"` @@ -301,6 +326,7 @@ type Field struct { Ref string `xml:"ref,attr"` GroupAs *GroupAs `xml:"group-as"` Def *DefineField + Metaschema *Metaschema } func (f *Field) GoComment() string { @@ -325,6 +351,16 @@ func (f *Field) GoName() string { return strcase.ToCamel(f.Def.Name) } +func (f *Field) GoPackageName() string { + if f.Ref == "" { + return "" + } else if f.Def.Metaschema == f.Metaschema { + return "" + } else { + return f.Def.Metaschema.GoPackageName() + "." + } +} + func (f *Field) GoMemLayout() string { if f.GroupAs != nil { return "[]" @@ -354,6 +390,7 @@ type Flag struct { Values []Value `xml:"value"` Ref string `xml:"ref,attr"` Def *DefineFlag + Metaschema *Metaschema } func (f *Flag) GoComment() string { diff --git a/metaschema/template.go b/metaschema/template.go index 32fdeed5..c16dc01f 100644 --- a/metaschema/template.go +++ b/metaschema/template.go @@ -15,11 +15,10 @@ import ( func GenerateTypes(metaschema *Metaschema) error { t, err := template.New("types.tmpl").Funcs(template.FuncMap{ - "toCamel": strcase.ToCamel, - "toLowerCamel": strcase.ToLowerCamel, - "plural": inflection.Plural, - "packageImport": packageImport, - "getImports": getImports, + "toCamel": strcase.ToCamel, + "toLowerCamel": strcase.ToLowerCamel, + "plural": inflection.Plural, + "getImports": getImports, }).ParseFiles("types.tmpl") if err != nil { return err @@ -49,32 +48,6 @@ func GenerateTypes(metaschema *Metaschema) error { return nil } -func packageImport(named string, metaschema Metaschema) string { - for _, df := range metaschema.DefineFlag { - if df.Name == named { - return "" - } - } - - for _, da := range metaschema.DefineAssembly { - if da.Name == named { - return "" - } - } - - for _, df := range metaschema.DefineField { - if df.Name == named { - return "" - } - } - - for _, im := range metaschema.ImportedMetaschema { - return im.Root + "." - } - - return "" -} - func getImports(metaschema Metaschema) string { var imports strings.Builder imports.WriteString("import (\n") diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index 3b0f287d..7b5f7053 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -26,23 +26,23 @@ type {{toCamel .Name}} struct { {{if .Model}} {{ range .Model.Field}} // {{ .GoComment }} - {{.GoName}} {{.GoMemLayout}}{{packageImport .Named $m}}{{.GoName}} `xml:"{{ .XmlName }},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{.GoName}} {{.GoMemLayout}}{{.GoPackageName}}{{.GoName}} `xml:"{{ .XmlName }},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{- end}} {{- range .Model.Assembly}} // {{ .GoComment }} - {{.GoName}} {{.GoMemLayout}}{{packageImport .Named $m}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{.GoName}} {{.GoMemLayout}}{{.GoPackageName}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{- end}} {{- range .Model.Choice}} {{- range .Field}} // {{ .GoComment }} - {{.GoName}} {{.GoMemLayout}}{{packageImport .Named $m}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{.GoName}} {{.GoMemLayout}}{{.GoPackageName}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{- end}} {{- range .Assembly}} // {{ .GoComment }} - {{.GoName}} {{.GoMemLayout}}{{packageImport .Named $m}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{.GoName}} {{.GoMemLayout}}{{.GoPackageName}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{- end}} {{- end}} From 917b56b4d1f467f002113d62b0d57ce46c58b90a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 19 Dec 2019 12:24:42 +0100 Subject: [PATCH 038/110] Generate nominal_catalog codebase from oscal_control-common_metaschema.xml --- .../oscal/nominal_catalog/nominal_catalog.go | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 types/oscal/nominal_catalog/nominal_catalog.go diff --git a/types/oscal/nominal_catalog/nominal_catalog.go b/types/oscal/nominal_catalog/nominal_catalog.go new file mode 100644 index 00000000..0015aa06 --- /dev/null +++ b/types/oscal/nominal_catalog/nominal_catalog.go @@ -0,0 +1,112 @@ +// Code generated by go generate; DO NOT EDIT. +package nominal_catalog + +import ( + "github.com/docker/oscalkit/types/oscal/validation_root" +) + +// NOT TO BE USED FOR A BASE METASCHEMA ONLY FOR A MODULE +type NominalCatalog struct { + + // Parameters provide a mechanism for the dynamic assignment of value(s) in a control. + Param *Param `xml:"param,omitempty" json:"param,omitempty"` + // A partition or component of a control or part + Part *Part `xml:"part,omitempty" json:"part,omitempty"` +} + +// Parameters provide a mechanism for the dynamic assignment of value(s) in a control. +type Param struct { + + // Unique identifier of the containing object + Id string `xml:",attr,omitempty" json:",omitempty"` + // Indicating the type or classification of the containing object + Class string `xml:",attr,omitempty" json:",omitempty"` + // Another parameter invoking this one + DependsOn string `xml:",attr,omitempty" json:",omitempty"` + + // A short name for the parameter. + Label Label `xml:"label,omitempty" json:"label,omitempty"` + // Indicates and explains the purpose and use of a parameter + Usage []Usage `xml:"descriptions,omitempty" json:"descriptions,omitempty"` + // A formal or informal expression of a constraint or test + Constraint []Constraint `xml:"constraints,omitempty" json:"constraints,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // A prose statement that provides a recommendation for the use of a parameter. + Guideline []Guideline `xml:"guidance,omitempty" json:"guidance,omitempty"` + // A recommended parameter value or set of values. + Value Value `xml:"value,omitempty" json:"value,omitempty"` + // A set of parameter value choices, that may be picked from to set the parameter value. + Select *Select `xml:"select,omitempty" json:"select,omitempty"` +} + +// A prose statement that provides a recommendation for the use of a parameter. +type Guideline struct { + + // Prose permits multiple paragraphs, lists, tables etc. + Prose Prose `xml:"prose,omitempty" json:"prose,omitempty"` +} + +// Presenting a choice among alternatives +type Select struct { + + // When selecting, a requirement such as one or more + HowMany string `xml:",attr,omitempty" json:",omitempty"` + + // A value selection among several such options + Choice []Choice `xml:"alternatives,omitempty" json:"alternatives,omitempty"` +} + +// A partition or component of a control or part +type Part struct { + + // Unique identifier of the containing object + Id string `xml:",attr,omitempty" json:",omitempty"` + // Identifying the purpose and intended use of the property, part or other object. + Name string `xml:",attr,omitempty" json:",omitempty"` + // A namespace qualifying the name. + Ns string `xml:",attr,omitempty" json:",omitempty"` + // Indicating the type or classification of the containing object + Class string `xml:",attr,omitempty" json:",omitempty"` + + // A title for display and navigation + Title validation_root.Title `xml:"title,omitempty" json:"title,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // Prose permits multiple paragraphs, lists, tables etc. + Prose Prose `xml:"prose,omitempty" json:"prose,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // A partition or component of a control or part + Part []Part `xml:"parts,omitempty" json:"parts,omitempty"` +} + +// A placeholder for a missing value, in display. + +type Label string + +// Indicates and explains the purpose and use of a parameter +type Usage struct { + // Unique identifier of the containing object + Id string `xml:",attr,omitempty" json:",omitempty"` + Value string `xml:",chardata" json:"value,omitempty"` +} + +// A formal or informal expression of a constraint or test +type Constraint struct { + // A formal (executable) expression of a constraint + Test string `xml:",attr,omitempty" json:",omitempty"` + Value string `xml:",chardata" json:"value,omitempty"` +} + +// Indicates a permissible value for a parameter or property + +type Value string + +// A value selection among several such options + +type Choice string + +// Prose permits multiple paragraphs, lists, tables etc. + +type Prose string From 613a6fb3dcbc75192727a21839f241c18b25a6a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 19 Dec 2019 12:41:14 +0100 Subject: [PATCH 039/110] Fix missing xmlName in case of indirection --- metaschema/metaschema.go | 7 +++ metaschema/types.tmpl | 4 +- .../oscal/nominal_catalog/nominal_catalog.go | 20 ++++---- .../oscal/validation_root/validation_root.go | 48 +++++++++---------- 4 files changed, 43 insertions(+), 36 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 2f6e109d..8f26dd98 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -419,6 +419,13 @@ func (f *Flag) GoName() string { return strcase.ToCamel(f.Def.Name) } +func (f *Flag) XmlName() string { + if f.Name != "" { + return f.Name + } + return f.Def.Name +} + type Choice struct { Field []Field `xml:"field"` Assembly []Assembly `xml:"assembly"` diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index 7b5f7053..c00ba987 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -20,7 +20,7 @@ type {{toCamel .Name}} struct { {{- if and (eq "id" .Name) (eq "profile" $packageName)}} Id string `xml:"param-id,attr,omitempty" json:"id,omitempty"` {{- else}} - {{.GoName}} {{.GoDatatype}} `xml:"{{ .Name }},attr,omitempty" json:"{{toLowerCamel .Name}},omitempty"` + {{.GoName}} {{.GoDatatype}} `xml:"{{.XmlName}},attr,omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{- end}} {{- end}} {{if .Model}} @@ -66,7 +66,7 @@ type {{toCamel .Name}} struct { type {{toCamel .Name}} struct { {{- range .Flags}} // {{ .GoComment }} - {{.GoName}} {{.GoDatatype}} `xml:"{{ .Name }},attr,omitempty" json:"{{toLowerCamel .Name}},omitempty"` + {{.GoName}} {{.GoDatatype}} `xml:"{{.XmlName}},attr,omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{end -}} Value string `xml:",chardata" json:"value,omitempty"` diff --git a/types/oscal/nominal_catalog/nominal_catalog.go b/types/oscal/nominal_catalog/nominal_catalog.go index 0015aa06..014115a3 100644 --- a/types/oscal/nominal_catalog/nominal_catalog.go +++ b/types/oscal/nominal_catalog/nominal_catalog.go @@ -18,11 +18,11 @@ type NominalCatalog struct { type Param struct { // Unique identifier of the containing object - Id string `xml:",attr,omitempty" json:",omitempty"` + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` // Indicating the type or classification of the containing object - Class string `xml:",attr,omitempty" json:",omitempty"` + Class string `xml:"class,attr,omitempty" json:"class,omitempty"` // Another parameter invoking this one - DependsOn string `xml:",attr,omitempty" json:",omitempty"` + DependsOn string `xml:"depends-on,attr,omitempty" json:"dependsOn,omitempty"` // A short name for the parameter. Label Label `xml:"label,omitempty" json:"label,omitempty"` @@ -51,7 +51,7 @@ type Guideline struct { type Select struct { // When selecting, a requirement such as one or more - HowMany string `xml:",attr,omitempty" json:",omitempty"` + HowMany string `xml:"how-many,attr,omitempty" json:"howMany,omitempty"` // A value selection among several such options Choice []Choice `xml:"alternatives,omitempty" json:"alternatives,omitempty"` @@ -61,13 +61,13 @@ type Select struct { type Part struct { // Unique identifier of the containing object - Id string `xml:",attr,omitempty" json:",omitempty"` + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` // Identifying the purpose and intended use of the property, part or other object. - Name string `xml:",attr,omitempty" json:",omitempty"` + Name string `xml:"name,attr,omitempty" json:"name,omitempty"` // A namespace qualifying the name. - Ns string `xml:",attr,omitempty" json:",omitempty"` + Ns string `xml:"ns,attr,omitempty" json:"ns,omitempty"` // Indicating the type or classification of the containing object - Class string `xml:",attr,omitempty" json:",omitempty"` + Class string `xml:"class,attr,omitempty" json:"class,omitempty"` // A title for display and navigation Title validation_root.Title `xml:"title,omitempty" json:"title,omitempty"` @@ -88,14 +88,14 @@ type Label string // Indicates and explains the purpose and use of a parameter type Usage struct { // Unique identifier of the containing object - Id string `xml:",attr,omitempty" json:",omitempty"` + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` Value string `xml:",chardata" json:"value,omitempty"` } // A formal or informal expression of a constraint or test type Constraint struct { // A formal (executable) expression of a constraint - Test string `xml:",attr,omitempty" json:",omitempty"` + Test string `xml:"test,attr,omitempty" json:"test,omitempty"` Value string `xml:",chardata" json:"value,omitempty"` } diff --git a/types/oscal/validation_root/validation_root.go b/types/oscal/validation_root/validation_root.go index 98dff1ce..6358e630 100644 --- a/types/oscal/validation_root/validation_root.go +++ b/types/oscal/validation_root/validation_root.go @@ -64,11 +64,11 @@ type BackMatter struct { type Annotation struct { // Identifying the purpose and intended use of the property, part or other object. - Name string `xml:",attr,omitempty" json:",omitempty"` + Name string `xml:"name,attr,omitempty" json:"name,omitempty"` // Unique identifier of the containing object - Id string `xml:",attr,omitempty" json:",omitempty"` + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` // A namespace qualifying the name. - Ns string `xml:",attr,omitempty" json:",omitempty"` + Ns string `xml:"ns,attr,omitempty" json:"ns,omitempty"` // Indicates the value of the characteristic. Value string `xml:"value,attr,omitempty" json:"value,omitempty"` @@ -80,7 +80,7 @@ type Annotation struct { type Party struct { // Unique identifier of the containing object - Id string `xml:",attr,omitempty" json:",omitempty"` + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` // A value with a name, attributed to the containing control, part, or group. Prop []Prop `xml:"properties,omitempty" json:"properties,omitempty"` @@ -158,9 +158,9 @@ type Org struct { type Rlink struct { // A link to a document or document fragment (actual, nominal or projected) - Href string `xml:",attr,omitempty" json:",omitempty"` + Href string `xml:"href,attr,omitempty" json:"href,omitempty"` // Describes the media type of the linked resource - MediaType string `xml:",attr,omitempty" json:",omitempty"` + MediaType string `xml:"media-type,attr,omitempty" json:"mediaType,omitempty"` // A representation of a cryptographic digest generated over a resource using a hash algorithm. Hash []Hash `xml:"hashes,omitempty" json:"hashes,omitempty"` @@ -170,7 +170,7 @@ type Rlink struct { type Address struct { // Indicates the type of address. - Type string `xml:",attr,omitempty" json:",omitempty"` + Type string `xml:"type,attr,omitempty" json:"type,omitempty"` // A single line of an address. AddrLine []AddrLine `xml:"postal-address,omitempty" json:"postalAddress,omitempty"` @@ -188,7 +188,7 @@ type Address struct { type Resource struct { // Unique identifier of the containing object - Id string `xml:",attr,omitempty" json:",omitempty"` + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` // A short textual description Desc Desc `xml:"desc,omitempty" json:"desc,omitempty"` @@ -206,7 +206,7 @@ type Resource struct { type Role struct { // Unique identifier of the containing object - Id string `xml:",attr,omitempty" json:",omitempty"` + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` // A title for display and navigation Title Title `xml:"title,omitempty" json:"title,omitempty"` @@ -246,7 +246,7 @@ type ResponsibleParty struct { type Citation struct { // Unique identifier of the containing object - Id string `xml:",attr,omitempty" json:",omitempty"` + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` // An address for retrieval of a citation Target []Target `xml:"targets,omitempty" json:"targets,omitempty"` @@ -263,13 +263,13 @@ type Citation struct { // A reference to a local or remote resource type Link struct { // A link to a document or document fragment (actual, nominal or projected) - Href string `xml:",attr,omitempty" json:",omitempty"` + Href string `xml:"href,attr,omitempty" json:"href,omitempty"` // Describes the type of relationship provided by the link. This can be an indicator of the link's purpose. - Rel string `xml:",attr,omitempty" json:",omitempty"` + Rel string `xml:"rel,attr,omitempty" json:"rel,omitempty"` // Describes the media type of the linked resource - MediaType string `xml:",attr,omitempty" json:",omitempty"` + MediaType string `xml:"media-type,attr,omitempty" json:"mediaType,omitempty"` Value string `xml:",chardata" json:"value,omitempty"` } @@ -292,23 +292,23 @@ type OscalVersion string // A document identifier qualified by an identifier . type DocId struct { // Qualifies the kind of document identifier. - Type string `xml:",attr,omitempty" json:",omitempty"` + Type string `xml:"type,attr,omitempty" json:"type,omitempty"` Value string `xml:",chardata" json:"value,omitempty"` } // A value with a name, attributed to the containing control, part, or group. type Prop struct { // Identifying the purpose and intended use of the property, part or other object. - Name string `xml:",attr,omitempty" json:",omitempty"` + Name string `xml:"name,attr,omitempty" json:"name,omitempty"` // Unique identifier of the containing object - Id string `xml:",attr,omitempty" json:",omitempty"` + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` // A namespace qualifying the name. - Ns string `xml:",attr,omitempty" json:",omitempty"` + Ns string `xml:"ns,attr,omitempty" json:"ns,omitempty"` // Indicating the type or classification of the containing object - Class string `xml:",attr,omitempty" json:",omitempty"` + Class string `xml:"class,attr,omitempty" json:"class,omitempty"` Value string `xml:",chardata" json:"value,omitempty"` } @@ -319,14 +319,14 @@ type PartyId string // An identifier for a person (such as an ORCID) using a designated scheme. type PersonId struct { // Indicating the type of identifier, address, email or other data item. - Type string `xml:",attr,omitempty" json:",omitempty"` + Type string `xml:"type,attr,omitempty" json:"type,omitempty"` Value string `xml:",chardata" json:"value,omitempty"` } // An identifier for an organization using a designated scheme. type OrgId struct { // Indicating the type of identifier, address, email or other data item. - Type string `xml:",attr,omitempty" json:",omitempty"` + Type string `xml:"type,attr,omitempty" json:"type,omitempty"` Value string `xml:",chardata" json:"value,omitempty"` } @@ -369,7 +369,7 @@ type Email string // Contact number by telephone type Phone struct { // Indicates the type of phone number. - Type string `xml:",attr,omitempty" json:",omitempty"` + Type string `xml:"type,attr,omitempty" json:"type,omitempty"` Value string `xml:",chardata" json:"value,omitempty"` } @@ -384,7 +384,7 @@ type Desc string // A representation of a cryptographic digest generated over a resource using a hash algorithm. type Hash struct { // Method by which a hash is derived - Algorithm string `xml:",attr,omitempty" json:",omitempty"` + Algorithm string `xml:"algorithm,attr,omitempty" json:"algorithm,omitempty"` Value string `xml:",chardata" json:"value,omitempty"` } @@ -395,10 +395,10 @@ type Title string // type Base64 struct { // Name of the file before it was encoded as Base64 to be embedded in a . This is the name that will be assigned to the file when the file is decoded. - Filename string `xml:",attr,omitempty" json:",omitempty"` + Filename string `xml:"filename,attr,omitempty" json:"filename,omitempty"` // Describes the media type of the linked resource - MediaType string `xml:",attr,omitempty" json:",omitempty"` + MediaType string `xml:"media-type,attr,omitempty" json:"mediaType,omitempty"` Value string `xml:",chardata" json:"value,omitempty"` } From 2489e95c58c1485066bf121162ba6c694f757cfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 19 Dec 2019 12:46:37 +0100 Subject: [PATCH 040/110] Do not override xml root Learn how to handle special characters consistently, instead. --- metaschema/generate.go | 3 +-- metaschema/metaschema.go | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/metaschema/generate.go b/metaschema/generate.go index ffdc5493..4e4fb390 100644 --- a/metaschema/generate.go +++ b/metaschema/generate.go @@ -43,7 +43,7 @@ func main() { "ssp": "oscal_ssp_metaschema.xml", } - for pkg, metaschemaPath := range metaschemaPaths { + for _, metaschemaPath := range metaschemaPaths { f, err := os.Open(fmt.Sprintf(metaschemaBaseDir, metaschemaPath)) if err != nil { log.Fatal(err) @@ -54,7 +54,6 @@ func main() { if err != nil { log.Fatal(err) } - meta.Root = pkg if err := metaschema.GenerateTypes(meta); err != nil { log.Fatalf("Error generating go types for metaschema: %s", err) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 8f26dd98..b02d5ba3 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -194,7 +194,7 @@ func (metaschema *Metaschema) GetDefineFlag(name string) (*DefineFlag, error) { } func (metaschema *Metaschema) GoPackageName() string { - return strings.ToLower(metaschema.Root) + return strings.ReplaceAll(strings.ToLower(metaschema.Root), "-", "_") } func (Metaschema *Metaschema) ContainsRootElement() bool { From b0a71f73fcbb927c4a898c3e9214e9aac590cf34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 19 Dec 2019 12:50:34 +0100 Subject: [PATCH 041/110] Re-generate catalog.go based on latest OSCAL --- types/oscal/catalog/catalog.go | 351 +++++---------------------------- 1 file changed, 47 insertions(+), 304 deletions(-) diff --git a/types/oscal/catalog/catalog.go b/types/oscal/catalog/catalog.go index 34afb186..d0c4338e 100644 --- a/types/oscal/catalog/catalog.go +++ b/types/oscal/catalog/catalog.go @@ -3,327 +3,70 @@ package catalog import ( "encoding/xml" + + "github.com/docker/oscalkit/types/oscal/nominal_catalog" + + "github.com/docker/oscalkit/types/oscal/validation_root" ) -// A collection of controls +// A collection of controls. type Catalog struct { XMLName xml.Name `xml:"http://csrc.nist.gov/ns/oscal/1.0 catalog" json:"-"` - // Unique identifier - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - // Declares a major/minor version for this metaschema - ModelVersion string `xml:"model-version,attr,omitempty" json:"modelVersion,omitempty"` - - Title Title `xml:"title,omitempty" json:"title,omitempty"` - Declarations *Declarations `xml:"declarations,omitempty" json:"declarations,omitempty"` - Metadata *Metadata `xml:"metadata,omitempty" json:"metadata,omitempty"` - References *References `xml:"references,omitempty" json:"references,omitempty"` - Sections []Section `xml:"section,omitempty" json:"sections,omitempty"` - Groups []Group `xml:"group,omitempty" json:"groups,omitempty"` - Controls []Control `xml:"control,omitempty" json:"controls,omitempty"` -} - -// Allows the inclusion of prose content within a Catalog. -type Section struct { - - // Unique identifier + // Unique identifier of the containing object Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - // Identifies the property or object within the control; a semantic hint - Class string `xml:"class,attr,omitempty" json:"class,omitempty"` - - Title Title `xml:"title,omitempty" json:"title,omitempty"` - References *References `xml:"references,omitempty" json:"references,omitempty"` - Sections []Section `xml:"section,omitempty" json:"sections,omitempty"` - Prose *Prose `xml:",any" json:"prose,omitempty"` + // Provides information about the publication and availability of the containing document. + Metadata *validation_root.Metadata `xml:"metadata,omitempty" json:"metadata,omitempty"` + // Back matter including references and resources. + BackMatter *validation_root.BackMatter `xml:"back-matter,omitempty" json:"backMatter,omitempty"` + // A group of controls, or of groups of controls. + Group []Group `xml:"groups,omitempty" json:"groups,omitempty"` + // A structured information object representing a security or privacy control. Each security or privacy control within the Catalog is defined by a distinct control instance. + Control []Control `xml:"controls,omitempty" json:"controls,omitempty"` } // A group of controls, or of groups of controls. type Group struct { - // Unique identifier + // Unique identifier of the containing object Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - // Identifies the property or object within the control; a semantic hint + // Indicating the type or classification of the containing object Class string `xml:"class,attr,omitempty" json:"class,omitempty"` - Title Title `xml:"title,omitempty" json:"title,omitempty"` - Props []Prop `xml:"prop,omitempty" json:"props,omitempty"` - References *References `xml:"references,omitempty" json:"references,omitempty"` - Parameters []Param `xml:"param,omitempty" json:"params,omitempty"` - Parts []Part `xml:"part,omitempty" json:"parts,omitempty"` - Groups []Group `xml:"group,omitempty" json:"groups,omitempty"` - Controls []Control `xml:"control,omitempty" json:"controls,omitempty"` -} - -// A structured information object representing a security or privacy control. Each -// security or privacy control within the Catalog is defined by a distinct control -// instance. + // A title for display and navigation + Title validation_root.Title `xml:"title,omitempty" json:"title,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // Parameters provide a mechanism for the dynamic assignment of value(s) in a control. + Param []nominal_catalog.Param `xml:"parameters,omitempty" json:"parameters,omitempty"` + // A partition or component of a control or part + Part []nominal_catalog.Part `xml:"parts,omitempty" json:"parts,omitempty"` + // A group of controls, or of groups of controls. + Group []Group `xml:"groups,omitempty" json:"groups,omitempty"` + // A structured information object representing a security or privacy control. Each security or privacy control within the Catalog is defined by a distinct control instance. + Control []Control `xml:"controls,omitempty" json:"controls,omitempty"` +} + +// A structured information object representing a security or privacy control. Each security or privacy control within the Catalog is defined by a distinct control instance. type Control struct { - // Unique identifier - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - // Identifies the property or object within the control; a semantic hint - Class string `xml:"class,attr,omitempty" json:"class,omitempty"` - - Title Title `xml:"title,omitempty" json:"title,omitempty"` - Props []Prop `xml:"prop,omitempty" json:"props,omitempty"` - Links []Link `xml:"link,omitempty" json:"links,omitempty"` - References *References `xml:"references,omitempty" json:"references,omitempty"` - Parameters []Param `xml:"param,omitempty" json:"params,omitempty"` - Parts []Part `xml:"part,omitempty" json:"parts,omitempty"` - Subcontrols []Subcontrol `xml:"subcontrol,omitempty" json:"subcontrols,omitempty"` -} - -// A control extension or enhancement -type Subcontrol struct { - - // Unique identifier - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - // Identifies the property or object within the control; a semantic hint - Class string `xml:"class,attr,omitempty" json:"class,omitempty"` - - Title Title `xml:"title,omitempty" json:"title,omitempty"` - Props []Prop `xml:"prop,omitempty" json:"props,omitempty"` - Links []Link `xml:"link,omitempty" json:"links,omitempty"` - References *References `xml:"references,omitempty" json:"references,omitempty"` - Parameters []Param `xml:"param,omitempty" json:"params,omitempty"` - Parts []Part `xml:"part,omitempty" json:"parts,omitempty"` -} - -// Parameters provide a mechanism for the dynamic assignment of value(s) in a -// control. -type Param struct { - - // Unique identifier - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - // Identifies the property or object within the control; a semantic hint - Class string `xml:"class,attr,omitempty" json:"class,omitempty"` - // Another parameter invoking this one - DependsOn string `xml:"depends-on,attr,omitempty" json:"dependsOn,omitempty"` - - Label Label `xml:"label,omitempty" json:"label,omitempty"` - Descriptions []Desc `xml:"desc,omitempty" json:"descs,omitempty"` - Constraints []Constraint `xml:"constraint,omitempty" json:"constraints,omitempty"` - Links []Link `xml:"link,omitempty" json:"links,omitempty"` - Guidance []Guideline `xml:"guideline,omitempty" json:"guidelines,omitempty"` - Value Value `xml:"value,omitempty" json:"value,omitempty"` - Select *Select `xml:"select,omitempty" json:"select,omitempty"` -} - -// A prose statement that provides a recommendation for the use of a parameter. -type Guideline struct { - Prose *Prose `xml:",any" json:"prose,omitempty"` -} - -// Presenting a choice among alternatives -type Select struct { - - // When selecting, a requirement such as one or more - HowMany string `xml:"how-many,attr,omitempty" json:"howMany,omitempty"` - - Alternatives []Choice `xml:"choice,omitempty" json:"choices,omitempty"` -} - -// A partition or component of a control, subcontrol or part -type Part struct { - - // Unique identifier + // Unique identifier of the containing object Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - // Identifies the property or object within the control; a semantic hint + // Indicating the type or classification of the containing object Class string `xml:"class,attr,omitempty" json:"class,omitempty"` - Title Title `xml:"title,omitempty" json:"title,omitempty"` - Props []Prop `xml:"prop,omitempty" json:"props,omitempty"` - Links []Link `xml:"link,omitempty" json:"links,omitempty"` - Parts []Part `xml:"part,omitempty" json:"parts,omitempty"` - - Prose *Prose `xml:",any" json:"prose,omitempty"` -} - -// A group of reference descriptions -type References struct { - - // Unique identifier - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - - Links []Link `xml:"link,omitempty" json:"links,omitempty"` - Refs []Ref `xml:"ref,omitempty" json:"refs,omitempty"` -} - -// A reference, with one or more citations to standards, related documents, or -// other resources -type Ref struct { - - // Unique identifier - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - - Citations []Citation `xml:"citation,omitempty" json:"citations,omitempty"` - - Prose *Prose `xml:",any" json:"prose,omitempty"` -} - -// -type Metadata struct { + // A title for display and navigation + Title validation_root.Title `xml:"title,omitempty" json:"title,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // Parameters provide a mechanism for the dynamic assignment of value(s) in a control. + Param []nominal_catalog.Param `xml:"parameters,omitempty" json:"parameters,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + // A partition or component of a control or part + Part []nominal_catalog.Part `xml:"parts,omitempty" json:"parts,omitempty"` + // A structured information object representing a security or privacy control. Each security or privacy control within the Catalog is defined by a distinct control instance. + Control []Control `xml:"controls,omitempty" json:"controls,omitempty"` } - -// -type Party struct { -} - -// -type Person struct { -} - -// -type Org struct { -} - -// -type Hlink struct { -} - -// -type Address struct { -} - -// -type Notes struct { -} - -// -type Resource struct { -} - -// -type Role struct { -} - -// -type ExtraMeta struct { -} - -// -type MetaGroup struct { -} - -// Either a reference to a declarations file, or a set of declarations -type Declarations struct { - // A link to a document or document fragment (actual, nominal or projected) - Href Href `xml:"href,attr,omitempty" json:"href,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// A title for display and navigation, exclusive of more specific properties -type Title string - -// A value with a name, attributed to the containing control, subcontrol, part, or// group. -type Prop struct { - // Unique identifier - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - - // Identifies the property or object within the control; a semantic hint - Class string `xml:"class,attr,omitempty" json:"class,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// A placeholder for a missing value, in display. -type Label string - -// Indicates and explains the purpose and use of a parameter -type Desc struct { - // Unique identifier - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// A formal or informal expression of a constraint or test -type Constraint struct { - // A formal (executable) expression of a constraint - Test string `xml:"test,attr,omitempty" json:"test,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// Indicates a permissible value for a parameter or property -type Value string - -// A value selection among several such options -type Choice string - -// A line or paragraph with a hypertext link -type Link struct { - // A link to a document or document fragment (actual, nominal or projected) - Href Href `xml:"href,attr,omitempty" json:"href,omitempty"` - - // Purpose of the link - Rel string `xml:"rel,attr,omitempty" json:"rel,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// Citation of a resource -type Citation struct { - // Unique identifier - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - - // A link to a document or document fragment (actual, nominal or projected) - Href Href `xml:"href,attr,omitempty" json:"href,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// -type Author string - -// -type PublicationDate string - -// -type Version string - -// -type DocId string - -// -type PersonId string - -// -type OrgId string - -// -type PersonName string - -// -type OrgName string - -// -type FullName string - -// -type ShortName string - -// -type AddrLine string - -// -type City string - -// -type State string - -// -type PostalCode string - -// -type Country string - -// -type Email string - -// -type Phone string - -// -type Url string - -// -type Hash string - -// -type Meta string From fa035b2f8e04a1fdfe81f1a25b8466ba5f985416 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 19 Dec 2019 15:40:52 +0100 Subject: [PATCH 042/110] Handle multi-line comments well --- metaschema/metaschema.go | 28 ++++++++++++++++++++++------ metaschema/types.tmpl | 4 ++-- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index b02d5ba3..49de45fa 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -227,6 +227,10 @@ func (da *DefineAssembly) RepresentsRootElement() bool { return da.Name == "catalog" || da.Name == "profile" || da.Name == "declarations" } +func (a *DefineAssembly) GoComment() string { + return handleMultiline(a.Description) +} + type DefineField struct { Name string `xml:"name,attr"` GroupAs string `xml:"group-as,attr"` @@ -245,6 +249,10 @@ func (df *DefineField) RequiresPointer() bool { return len(df.Flags) > 0 } +func (f *DefineField) GoComment() string { + return handleMultiline(f.Description) +} + type DefineFlag struct { Name string `xml:"name,attr"` AsType datatype `xml:"as-type,attr"` @@ -278,9 +286,9 @@ type Assembly struct { func (a *Assembly) GoComment() string { if a.Description != "" { - return a.Description + return handleMultiline(a.Description) } - return a.Def.Description + return a.Def.GoComment() } func (a *Assembly) GoName() string { @@ -331,9 +339,9 @@ type Field struct { func (f *Field) GoComment() string { if f.Description != "" { - return f.Description + return handleMultiline(f.Description) } - return f.Def.Description + return f.Def.GoComment() } func (f *Field) RequiresPointer() bool { @@ -395,14 +403,18 @@ type Flag struct { func (f *Flag) GoComment() string { if f.Description != "" { - return f.Description + return handleMultiline(f.Description) } - return f.Def.Description + return handleMultiline(f.Def.Description) } func (f *Flag) GoDatatype() (string, error) { dt := f.AsType if dt == "" { + if f.Ref == "" && f.Name == "position" { + // workaround bug: inline definition without type hint https://github.com/usnistgov/OSCAL/pull/570 + return "string", nil + } dt = f.Def.AsType } @@ -589,3 +601,7 @@ var goDatatypeMap = map[datatype]string{ datatypeID: "string", datatypeURIRef: "string", } + +func handleMultiline(comment string) string { + return strings.ReplaceAll(comment, "\n", "\n // ") +} diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index c00ba987..7ffed248 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -6,7 +6,7 @@ package {{ $packageName }} {{$m := . -}} {{range .DefineAssembly}} - // {{ .Description }} + // {{ .GoComment }} type {{toCamel .Name}} struct { {{if .RepresentsRootElement }} XMLName xml.Name `xml:"http://csrc.nist.gov/ns/oscal/1.0 {{ .Name }}" json:"-"` @@ -60,7 +60,7 @@ type {{toCamel .Name}} struct { {{end}} {{range .DefineField}} - // {{ .Description }} + // {{ .GoComment }} {{$l := len .Flags -}} {{- if gt $l 0 -}} type {{toCamel .Name}} struct { From 9486666354f6bbe47191a2aa0a800dc7a5a4652e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 19 Dec 2019 15:41:23 +0100 Subject: [PATCH 043/110] Regenerate profile.go based on latest oscal_profile_metaschema.xml --- types/oscal/profile/profile.go | 253 +++++++++++++++++++++------------ 1 file changed, 160 insertions(+), 93 deletions(-) diff --git a/types/oscal/profile/profile.go b/types/oscal/profile/profile.go index c53a2c2c..937279f4 100644 --- a/types/oscal/profile/profile.go +++ b/types/oscal/profile/profile.go @@ -4,7 +4,9 @@ package profile import ( "encoding/xml" - "github.com/docker/oscalkit/types/oscal/catalog" + "github.com/docker/oscalkit/types/oscal/validation_root" + + "github.com/docker/oscalkit/types/oscal/nominal_catalog" ) // Each OSCAL profile is defined by a Profile element @@ -12,166 +14,231 @@ type Profile struct { XMLName xml.Name `xml:"http://csrc.nist.gov/ns/oscal/1.0 profile" json:"-"` ID string `xml:"id,attr,omitempty" json:"id,omitempty"` Title string `xml:"title,omitempty" json:"title,omitempty"` - Merge *Merge `xml:"merge,omitempty" json:"merge,omitempty"` - Modify *Modify `xml:"modify,omitempty" json:"modify,omitempty"` - Imports []Import `xml:"import,omitempty" json:"imports,omitempty"` + // Unique identifier of the containing object + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` + + // Provides information about the publication and availability of the containing document. + Metadata *validation_root.Metadata `xml:"metadata,omitempty" json:"metadata,omitempty"` + // An Import element designates a catalog, profile, or other resource to be + // included (referenced and potentially modified) by this profile. + Import []Import `xml:"imports,omitempty" json:"imports,omitempty"` + // A Merge element merges controls in resolution. + Merge *Merge `xml:"merge,omitempty" json:"merge,omitempty"` + // Set parameters or amend controls in resolution + Modify *Modify `xml:"modify,omitempty" json:"modify,omitempty"` + // A collection of citations and resource references. + BackMatter *validation_root.BackMatter `xml:"back-matter,omitempty" json:"backMatter,omitempty"` } // An Import element designates a catalog, profile, or other resource to be -// included (referenced and potentially modified) by this profile. +// included (referenced and potentially modified) by this profile. type Import struct { - Href *catalog.Href `xml:"href,attr,omitempty" json:"href,omitempty"` - Include *Include `xml:"include,omitempty" json:"include,omitempty"` - Exclude *Exclude `xml:"exclude,omitempty" json:"exclude,omitempty"` + + // A link to a document or document fragment (actual, nominal or projected) + Href string `xml:"href,attr,omitempty" json:"href,omitempty"` + + // Specifies which controls to include from the resource (source catalog) being + // imported + Include *Include `xml:"include,omitempty" json:"include,omitempty"` + // Which controls to exclude from the resource (source catalog) being + // imported + Exclude *Exclude `xml:"exclude,omitempty" json:"exclude,omitempty"` } // A Merge element merges controls in resolution. type Merge struct { + + // A Combine element defines whether and how to combine multiple (competing) + // versions of the same control Combine *Combine `xml:"combine,omitempty" json:"combine,omitempty"` - AsIs AsIs `xml:"as-is,omitempty" json:"asIs,omitempty"` - Custom *Custom `xml:"custom,omitempty" json:"custom,omitempty"` + // An As-is element indicates that the controls should be structured in resolution as they are + // structured in their source catalogs. It does not contain any elements or attributes. + AsIs AsIs `xml:"as-is,omitempty" json:"asIs,omitempty"` + // A Custom element frames a structure for embedding represented controls in resolution. + Custom *Custom `xml:"custom,omitempty" json:"custom,omitempty"` } -// A Custom element frames a structure for embedding represented controls in -// resolution. +// A Custom element frames a structure for embedding represented controls in resolution. type Custom struct { - IdSelectors []Call `xml:"call,omitempty" json:"calls,omitempty"` - PatternSelectors []Match `xml:"match,omitempty" json:"matches,omitempty"` - Groups []Group `xml:"group,omitempty" json:"groups,omitempty"` + + // Call a control by its ID + Call []Call `xml:"id-selectors,omitempty" json:"idSelectors,omitempty"` + // Select controls by (regular expression) match on ID + Match []Match `xml:"pattern-selectors,omitempty" json:"patternSelectors,omitempty"` + // As in catalogs, a group of (selected) controls or of groups of controls + Group []Group `xml:"groups,omitempty" json:"groups,omitempty"` } // As in catalogs, a group of (selected) controls or of groups of controls type Group struct { - Groups []Group `xml:"group,omitempty" json:"groups,omitempty"` - IdSelectors []Call `xml:"call,omitempty" json:"calls,omitempty"` - PatternSelectors []Match `xml:"match,omitempty" json:"matches,omitempty"` + + // Unique identifier of the containing object + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` + // Indicating the type or classification of the containing object + Class string `xml:"class,attr,omitempty" json:"class,omitempty"` + + // A title for display and navigation + Title validation_root.Title `xml:"title,omitempty" json:"title,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // Parameters provide a mechanism for the dynamic assignment of value(s) in a control. + Param []nominal_catalog.Param `xml:"parameters,omitempty" json:"parameters,omitempty"` + // A partition or component of a control or part + Part []nominal_catalog.Part `xml:"parts,omitempty" json:"parts,omitempty"` + // Call a control by its ID + Call []Call `xml:"id-selectors,omitempty" json:"idSelectors,omitempty"` + // Select controls by (regular expression) match on ID + Match []Match `xml:"pattern-selectors,omitempty" json:"patternSelectors,omitempty"` + // As in catalogs, a group of (selected) controls or of groups of controls + Group []Group `xml:"groups,omitempty" json:"groups,omitempty"` } // Set parameters or amend controls in resolution type Modify struct { - ParamSettings []SetParam `xml:"set-param,omitempty" json:"set-params,omitempty"` - Alterations []Alter `xml:"alter,omitempty" json:"alters,omitempty"` + + // A parameter setting, to be propagated to points of insertion + Set []Set `xml:"settings,omitempty" json:"settings,omitempty"` + // An Alter element specifies changes to be made to an included control when a profile is resolved. + Alter []Alter `xml:"alterations,omitempty" json:"alterations,omitempty"` } -// Specifies which controls and subcontrols to include from the resource (source -// catalog) being imported +// Specifies which controls to include from the resource (source catalog) being +// imported type Include struct { - All *All `xml:"all,omitempty" json:"all,omitempty"` - IdSelectors []Call `xml:"call,omitempty" json:"calls,omitempty"` - PatternSelectors []Match `xml:"match,omitempty" json:"matches,omitempty"` + + // Include all controls from the imported resource (catalog) + All *All `xml:"all,omitempty" json:"all,omitempty"` + // Call a control by its ID + Call []Call `xml:"id-selectors,omitempty" json:"idSelectors,omitempty"` + // Select controls by (regular expression) match on ID + Match []Match `xml:"pattern-selectors,omitempty" json:"patternSelectors,omitempty"` } -// Which controls and subcontrols to exclude from the resource (source catalog) -// being imported +// Which controls to exclude from the resource (source catalog) being +// imported type Exclude struct { - IdSelectors []Call `xml:"call,omitempty" json:"calls,omitempty"` - PatternSelectors []Match `xml:"match,omitempty" json:"matches,omitempty"` + + // Call a control by its ID + Call []Call `xml:"id-selectors,omitempty" json:"idSelectors,omitempty"` + // Select controls by (regular expression) match on ID + Match []Match `xml:"pattern-selectors,omitempty" json:"patternSelectors,omitempty"` } // A parameter setting, to be propagated to points of insertion -type SetParam struct { - Id string `xml:"param-id,attr,omitempty" json:"id,omitempty"` - Class string `xml:"class,attr,omitempty" json:"class,omitempty"` - DependsOn string `xml:"depends-on,attr,omitempty" json:"dependsOn,omitempty"` - Label catalog.Label `xml:"label,omitempty" json:"label,omitempty"` - Descriptions []catalog.Desc `xml:"desc,omitempty" json:"descs,omitempty"` - Constraints []catalog.Constraint `xml:"constraint,omitempty" json:"constraints,omitempty"` - Links []catalog.Link `xml:"link,omitempty" json:"links,omitempty"` - Parts []catalog.Part `xml:"part,omitempty" json:"parts,omitempty"` - Value catalog.Value `xml:"value,omitempty" json:"value,omitempty"` - Select *catalog.Select `xml:"select,omitempty" json:"select,omitempty"` -} - -// An Alter element specifies changes to be made to an included control or -// subcontrol when a profile is resolved. +type Set struct { + + // Indicates the value of the 'id' flag on a target parameter; i.e. which parameter to set + ParamId string `xml:"param-id,attr,omitempty" json:"paramId,omitempty"` + // Indicating the type or classification of the containing object + Class string `xml:"class,attr,omitempty" json:"class,omitempty"` + // Another parameter invoking this one + DependsOn string `xml:"depends-on,attr,omitempty" json:"dependsOn,omitempty"` + + // A placeholder for a missing value, in display. + Label nominal_catalog.Label `xml:"label,omitempty" json:"label,omitempty"` + // Indicates and explains the purpose and use of a parameter + Usage []nominal_catalog.Usage `xml:"descriptions,omitempty" json:"descriptions,omitempty"` + // A formal or informal expression of a constraint or test + Constraint []nominal_catalog.Constraint `xml:"constraints,omitempty" json:"constraints,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // A prose statement that provides a recommendation for the use of a parameter. + Guideline []nominal_catalog.Guideline `xml:"guidance,omitempty" json:"guidance,omitempty"` + // Indicates a permissible value for a parameter or property + Value nominal_catalog.Value `xml:"value,omitempty" json:"value,omitempty"` + // Presenting a choice among alternatives + Select *nominal_catalog.Select `xml:"select,omitempty" json:"select,omitempty"` +} + +// An Alter element specifies changes to be made to an included control when a profile is resolved. type Alter struct { // Value of the 'id' flag on a target control ControlId string `xml:"control-id,attr,omitempty" json:"controlId,omitempty"` - // Value of the 'id' flag on a target subcontrol - SubcontrolId string `xml:"subcontrol-id,attr,omitempty" json:"subcontrolId,omitempty"` - Removals []Remove `xml:"remove,omitempty" json:"removes,omitempty"` - Additions []Add `xml:"add,omitempty" json:"adds,omitempty"` + + // Specifies elements to be removed from a control, in resolution + Remove []Remove `xml:"removals,omitempty" json:"removals,omitempty"` + // Specifies contents to be added into controls, in resolution + Add []Add `xml:"additions,omitempty" json:"additions,omitempty"` } -// Specifies contents to be added into controls or subcontrols, in resolution +// Specifies contents to be added into controls, in resolution type Add struct { - // Where to add the new content with respect to the targeted element (beside it or - // inside it) - Position string `xml:"position,attr,omitempty" json:"position,omitempty"` - Title catalog.Title `xml:"title,omitempty" json:"title,omitempty"` - Props []catalog.Prop `xml:"prop,omitempty" json:"props,omitempty"` - Links []catalog.Link `xml:"link,omitempty" json:"links,omitempty"` - References *catalog.References `xml:"references,omitempty" json:"references,omitempty"` - Params []catalog.Param `xml:"param,omitempty" json:"params,omitempty"` - Parts []catalog.Part `xml:"part,omitempty" json:"parts,omitempty"` -} + // Where to add the new content with respect to the targeted element (beside it or inside it) + Position string `xml:"position,attr,omitempty" json:"position,omitempty"` + // Target location of the addition. + IdRef string `xml:"id-ref,attr,omitempty" json:"idRef,omitempty"` -// A Combine element defines whether and how to combine multiple (competing)// versions of the same control + // A title for display and navigation + Title validation_root.Title `xml:"title,omitempty" json:"title,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // Parameters provide a mechanism for the dynamic assignment of value(s) in a control. + Param []nominal_catalog.Param `xml:"parameters,omitempty" json:"parameters,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + // A partition or component of a control or part + Part []nominal_catalog.Part `xml:"parts,omitempty" json:"parts,omitempty"` +} + +// A Combine element defines whether and how to combine multiple (competing) +// versions of the same control type Combine struct { - // How clashing controls and subcontrols should be handled + // How clashing controls should be handled Method string `xml:"method,attr,omitempty" json:"method,omitempty"` Value string `xml:",chardata" json:"value,omitempty"` } -// An As-is element indicates that the controls should be structured in resolution -// as they are structured in their source catalogs. It does not contain any -// elements or attributes. +// An As-is element indicates that the controls should be structured in resolution as they are +// structured in their source catalogs. It does not contain any elements or attributes. + type AsIs string // Include all controls from the imported resource (catalog) type All struct { - // Whether subcontrols should be implicitly included, if not called. - WithSubcontrols string `xml:"with-subcontrols,attr,omitempty" json:"withSubcontrols,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` + // When a control is included, whether its child (dependent) controls are also included. + WithChildControls string `xml:"with-child-controls,attr,omitempty" json:"withChildControls,omitempty"` + Value string `xml:",chardata" json:"value,omitempty"` } -// Call a control or subcontrol by its ID +// Call a control by its ID type Call struct { // Value of the 'id' flag on a target control ControlId string `xml:"control-id,attr,omitempty" json:"controlId,omitempty"` - // Value of the 'id' flag on a target subcontrol - SubcontrolId string `xml:"subcontrol-id,attr,omitempty" json:"subcontrolId,omitempty"` - - // Whether a control should be implicitly included, if not called. - WithControl string `xml:"with-control,attr,omitempty" json:"withControl,omitempty"` - - // Whether subcontrols should be implicitly included, if not called. - WithSubcontrols string `xml:"with-subcontrols,attr,omitempty" json:"withSubcontrols,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` + // When a control is included, whether its child (dependent) controls are also included. + WithChildControls string `xml:"with-child-controls,attr,omitempty" json:"withChildControls,omitempty"` + Value string `xml:",chardata" json:"value,omitempty"` } // Select controls by (regular expression) match on ID type Match struct { - // A regular expression matching the IDs of one or more controls or subcontrols to - - // be selected + // A regular expression matching the IDs of one or more controls to be selected Pattern string `xml:"pattern,attr,omitempty" json:"pattern,omitempty"` - // A regular expression matching the IDs of one or more controls or subcontrols to - - // be selected + // A designation of how a selection of controls in a profile is to be ordered. Order string `xml:"order,attr,omitempty" json:"order,omitempty"` - // Whether a control should be implicitly included, if not called. - WithControl string `xml:"with-control,attr,omitempty" json:"withControl,omitempty"` - - // Whether subcontrols should be implicitly included, if not called. - WithSubcontrols string `xml:"with-subcontrols,attr,omitempty" json:"withSubcontrols,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` + // When a control is included, whether its child (dependent) controls are also included. + WithChildControls string `xml:"with-child-controls,attr,omitempty" json:"withChildControls,omitempty"` + Value string `xml:",chardata" json:"value,omitempty"` } -// Specifies elements to be removed from a control or subcontrol, in resolution +// Specifies elements to be removed from a control, in resolution type Remove struct { - // Items to remove, by class + // Items to remove, by assigned name + NameRef string `xml:"name-ref,attr,omitempty" json:"nameRef,omitempty"` + + // Items to remove, by class. A token match. ClassRef string `xml:"class-ref,attr,omitempty" json:"classRef,omitempty"` - // Items to remove, by ID + // Items to remove, indicated by their IDs IdRef string `xml:"id-ref,attr,omitempty" json:"idRef,omitempty"` - // Items to remove, by item type (name), e.g. title or prop + // Items to remove, by the name of the item's type, or generic identifier, e.g. or ItemName string `xml:"item-name,attr,omitempty" json:"itemName,omitempty"` Value string `xml:",chardata" json:"value,omitempty"` } From 4e245775b1ebd9148779d96a014feed9f40e6ab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 19 Dec 2019 17:45:28 +0100 Subject: [PATCH 044/110] Fix things for SSP oscal handling (oscal_ssp_metaschema.xml) --- metaschema/metaschema.go | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 49de45fa..b06dbdf9 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -345,10 +345,6 @@ func (f *Field) GoComment() string { } func (f *Field) RequiresPointer() bool { - if f.Def == nil { - fmt.Println(f.Ref) - panic(f) - } return f.Def.RequiresPointer() } @@ -411,7 +407,7 @@ func (f *Flag) GoComment() string { func (f *Flag) GoDatatype() (string, error) { dt := f.AsType if dt == "" { - if f.Ref == "" && f.Name == "position" { + if f.Ref == "" && (f.Name == "position" || f.Name == "asset-id" || f.Name == "use" || f.Name == "system") { // workaround bug: inline definition without type hint https://github.com/usnistgov/OSCAL/pull/570 return "string", nil } @@ -584,22 +580,26 @@ func (sd ShowDocs) UnmarshalXMLAttr(attr xml.Attr) error { type datatype string const ( - datatypeString datatype = "string" - datatypeIDRef datatype = "IDREF" - datatypeNCName datatype = "NCName" - datatypeNMToken datatype = "NMTOKEN" - datatypeID datatype = "ID" - datatypeAnyURI datatype = "anyURI" - datatypeURIRef datatype = "uri-reference" + datatypeString datatype = "string" + datatypeIDRef datatype = "IDREF" + datatypeNCName datatype = "NCName" + datatypeNMToken datatype = "NMTOKEN" + datatypeID datatype = "ID" + datatypeAnyURI datatype = "anyURI" + datatypeURIRef datatype = "uri-reference" + datatypeURI datatype = "uri" + datatypeNonNegativeInteger datatype = "nonNegativeInteger" ) var goDatatypeMap = map[datatype]string{ - datatypeString: "string", - datatypeIDRef: "string", - datatypeNCName: "string", - datatypeNMToken: "string", - datatypeID: "string", - datatypeURIRef: "string", + datatypeString: "string", + datatypeIDRef: "string", + datatypeNCName: "string", + datatypeNMToken: "string", + datatypeID: "string", + datatypeURIRef: "string", + datatypeURI: "string", + datatypeNonNegativeInteger: "uint64", } func handleMultiline(comment string) string { From c826450331ca7604914fbd972e176676a97e2abb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 19 Dec 2019 17:53:05 +0100 Subject: [PATCH 045/110] Generate SSP go types out of OSCAL/src/metaschema/oscal_ssp_metaschema.xml --- metaschema/generate.go | 8 +- metaschema/template.go | 4 +- .../system_security_plan.go | 653 ++++++++++++++++++ 3 files changed, 661 insertions(+), 4 deletions(-) create mode 100644 types/oscal/system_security_plan/system_security_plan.go diff --git a/metaschema/generate.go b/metaschema/generate.go index 4e4fb390..b40700db 100644 --- a/metaschema/generate.go +++ b/metaschema/generate.go @@ -38,9 +38,11 @@ func main() { } metaschemaPaths := map[string]string{ - "catalog": "oscal_catalog_metaschema.xml", - "profile": "oscal_profile_metaschema.xml", - "ssp": "oscal_ssp_metaschema.xml", + "validation_root": "oscal_metadata_metaschema.xml", + "nominal_catalog": "oscal_control-common_metaschema.xml", + "catalog": "oscal_catalog_metaschema.xml", + "profile": "oscal_profile_metaschema.xml", + "ssp": "oscal_ssp_metaschema.xml", } for _, metaschemaPath := range metaschemaPaths { diff --git a/metaschema/template.go b/metaschema/template.go index c16dc01f..b18bfc86 100644 --- a/metaschema/template.go +++ b/metaschema/template.go @@ -56,7 +56,9 @@ func getImports(metaschema Metaschema) string { } for _, im := range metaschema.ImportedMetaschema { - imports.WriteString(fmt.Sprintf("\n\t\"github.com/docker/oscalkit/types/oscal/%s\"\n", im.GoPackageName())) + if im.GoPackageName() != "validation_common_root" { + imports.WriteString(fmt.Sprintf("\n\t\"github.com/docker/oscalkit/types/oscal/%s\"\n", im.GoPackageName())) + } } imports.WriteString(")") diff --git a/types/oscal/system_security_plan/system_security_plan.go b/types/oscal/system_security_plan/system_security_plan.go new file mode 100644 index 00000000..a562fd8c --- /dev/null +++ b/types/oscal/system_security_plan/system_security_plan.go @@ -0,0 +1,653 @@ +// Code generated by go generate; DO NOT EDIT. +package system_security_plan + +import ( + "github.com/docker/oscalkit/types/oscal/validation_root" +) + +// A system security plan, such as those described in NIST SP 800-18 +type SystemSecurityPlan struct { + + // Unique identifier of the containing object + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` + + // Provides information about the publication and availability of the containing document. + Metadata *validation_root.Metadata `xml:"metadata,omitempty" json:"metadata,omitempty"` + // Used to import the OSCAL profile representing the system's control baseline. + ImportProfile *ImportProfile `xml:"import-profile,omitempty" json:"importProfile,omitempty"` + // Contains the characteristics of the system, such as its name, purpose, and security impact level. + SystemCharacteristics *SystemCharacteristics `xml:"system-characteristics,omitempty" json:"systemCharacteristics,omitempty"` + // Provides information as to how the system is implemented. + SystemImplementation *SystemImplementation `xml:"system-implementation,omitempty" json:"systemImplementation,omitempty"` + // Describes how the system satisfies a set of controls. + ControlImplementation *ControlImplementation `xml:"control-implementation,omitempty" json:"controlImplementation,omitempty"` + // A collection of citations and resource references. + BackMatter *validation_root.BackMatter `xml:"back-matter,omitempty" json:"backMatter,omitempty"` +} + +// Used to import the OSCAL profile representing the system's control baseline. +type ImportProfile struct { + + // A link to a document or document fragment (actual, nominal or projected) + Href string `xml:"href,attr,omitempty" json:"href,omitempty"` + + // Additional commentary on the parent item. + Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` +} + +// Contains the characteristics of the system, such as its name, purpose, and security impact level. +type SystemCharacteristics struct { + + // A unique identifier for the system described by this system security plan. + SystemId []SystemId `xml:"system-ids,omitempty" json:"systemIds,omitempty"` + // The full name of the system. + SystemName SystemName `xml:"system-name,omitempty" json:"systemName,omitempty"` + // A short name for the system, such as an acronym, that is suitable for display in a data table or summary list. + SystemNameShort SystemNameShort `xml:"system-name-short,omitempty" json:"systemNameShort,omitempty"` + // A free-text description of the system. + Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // The date this system received its authorization. + DateAuthorized DateAuthorized `xml:"date-authorized,omitempty" json:"dateAuthorized,omitempty"` + // The overall information system sensitivity categorization, such as defined by . + SecuritySensitivityLevel SecuritySensitivityLevel `xml:"security-sensitivity-level,omitempty" json:"securitySensitivityLevel,omitempty"` + // Additional commentary on the parent item. + Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + // Contains details about all information types that are stored, processed, or transmitted by the system, such as privacy information, and those defined in . + SystemInformation *SystemInformation `xml:"system-information,omitempty" json:"systemInformation,omitempty"` + // The overall level of expected impact resulting from unauthorized disclosure, modification, or loss of access to information. + SecurityImpactLevel *SecurityImpactLevel `xml:"security-impact-level,omitempty" json:"securityImpactLevel,omitempty"` + // Describes the operational status of the system. + Status *Status `xml:"status,omitempty" json:"status,omitempty"` + // A description of another authorized system from which this system inherits capabilities that satisfy security requirements. Another term for this concept is a . + LeveragedAuthorization []LeveragedAuthorization `xml:"leveraged-authorizations,omitempty" json:"leveragedAuthorizations,omitempty"` + // A description of this system's authorization boundary, optionally supplemented by diagrams that illustrate the authorization boundary. + AuthorizationBoundary *AuthorizationBoundary `xml:"authorization-boundary,omitempty" json:"authorizationBoundary,omitempty"` + // A description of the system's network architecture, optionally supplemented by diagrams that illustrate the network architecture. + NetworkArchitecture *NetworkArchitecture `xml:"network-architecture,omitempty" json:"networkArchitecture,omitempty"` + // A description of the logical flow of information within the system and across its boundaries, optionally supplemented by diagrams that illustrate these flows. + DataFlow *DataFlow `xml:"data-flow,omitempty" json:"dataFlow,omitempty"` + // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. + ResponsibleParty []validation_root.ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` +} + +// Contains details about all information types that are stored, processed, or transmitted by the system, such as privacy information, and those defined in . +type SystemInformation struct { + + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + // Contains details about one information type that is stored, processed, or transmitted by the system, such as privacy information, and those defined in . + InformationType []InformationType `xml:"information-types,omitempty" json:"informationTypes,omitempty"` +} + +// Contains details about one information type that is stored, processed, or transmitted by the system, such as privacy information, and those defined in . +type InformationType struct { + + // Unique identifier of the containing object + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` + // The name of the information type. + Name string `xml:"name,attr,omitempty" json:"name,omitempty"` + + // A description supporting the parent item. + Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + // An identifier qualified by the given identification used, such as NIST SP 800-60. + InformationTypeId []InformationTypeId `xml:"information-type-ids,omitempty" json:"informationTypeIds,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // The expected level of impact resulting from the unauthorized disclosure of information. + ConfidentialityImpact *ConfidentialityImpact `xml:"confidentiality-impact,omitempty" json:"confidentialityImpact,omitempty"` + // The expected level of impact resulting from the unauthorized modification of information. + IntegrityImpact *IntegrityImpact `xml:"integrity-impact,omitempty" json:"integrityImpact,omitempty"` + // The expected level of impact resulting from the disruption of access to or use of information or the information system. + AvailabilityImpact *AvailabilityImpact `xml:"availability-impact,omitempty" json:"availabilityImpact,omitempty"` +} + +// The expected level of impact resulting from the unauthorized disclosure of information. +type ConfidentialityImpact struct { + + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // The prescribed base (Confidentiality, Integrity, or Availability) security impact level. + Base Base `xml:"base,omitempty" json:"base,omitempty"` + // The selected (Confidentiality, Integrity, or Availability) security impact level. + Selected Selected `xml:"selected,omitempty" json:"selected,omitempty"` + // If the selected security level is different from the base security level, this contains the justification for the change. + AdjustmentJustification AdjustmentJustification `xml:"adjustment-justification,omitempty" json:"adjustmentJustification,omitempty"` +} + +// The expected level of impact resulting from the unauthorized modification of information. +type IntegrityImpact struct { + + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // The prescribed base (Confidentiality, Integrity, or Availability) security impact level. + Base Base `xml:"base,omitempty" json:"base,omitempty"` + // The selected (Confidentiality, Integrity, or Availability) security impact level. + Selected Selected `xml:"selected,omitempty" json:"selected,omitempty"` + // If the selected security level is different from the base security level, this contains the justification for the change. + AdjustmentJustification AdjustmentJustification `xml:"adjustment-justification,omitempty" json:"adjustmentJustification,omitempty"` +} + +// The expected level of impact resulting from the disruption of access to or use of information or the information system. +type AvailabilityImpact struct { + + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // The prescribed base (Confidentiality, Integrity, or Availability) security impact level. + Base Base `xml:"base,omitempty" json:"base,omitempty"` + // The selected (Confidentiality, Integrity, or Availability) security impact level. + Selected Selected `xml:"selected,omitempty" json:"selected,omitempty"` + // If the selected security level is different from the base security level, this contains the justification for the change. + AdjustmentJustification AdjustmentJustification `xml:"adjustment-justification,omitempty" json:"adjustmentJustification,omitempty"` +} + +// The overall level of expected impact resulting from unauthorized disclosure, modification, or loss of access to information. +type SecurityImpactLevel struct { + + // A target-level of confidentiality for the system, based on the sensitivity of information within the system. + SecurityObjectiveConfidentiality SecurityObjectiveConfidentiality `xml:"security-objective-confidentiality,omitempty" json:"securityObjectiveConfidentiality,omitempty"` + // A target-level of integrity for the system, based on the sensitivity of information within the system. + SecurityObjectiveIntegrity SecurityObjectiveIntegrity `xml:"security-objective-integrity,omitempty" json:"securityObjectiveIntegrity,omitempty"` + // A target-level of availability for the system, based on the sensitivity of information within the system. + SecurityObjectiveAvailability SecurityObjectiveAvailability `xml:"security-objective-availability,omitempty" json:"securityObjectiveAvailability,omitempty"` +} + +// Describes the operational status of the system. +type Status struct { + + // The current operating status. + State string `xml:"state,attr,omitempty" json:"state,omitempty"` + + // Additional commentary on the parent item. + Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` +} + +// A description of another authorized system from which this system inherits capabilities that satisfy security requirements. Another term for this concept is a . +type LeveragedAuthorization struct { + + // Unique identifier of the containing object + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` + // Identifying the purpose and intended use of the property, part or other object. + Name string `xml:"name,attr,omitempty" json:"name,omitempty"` + + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // A reference to the party that manages the leveraged system. + PartyId validation_root.PartyId `xml:"party-id,omitempty" json:"partyId,omitempty"` + // The date this system received its authorization. + DateAuthorized DateAuthorized `xml:"date-authorized,omitempty" json:"dateAuthorized,omitempty"` + // Additional commentary on the parent item. + Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` +} + +// A description of this system's authorization boundary, optionally supplemented by diagrams that illustrate the authorization boundary. +type AuthorizationBoundary struct { + + // A description supporting the parent item. + Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // Commentary about the system's authorization boundary that enhances the diagram. + Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + // A visual depiction of the system's authorization boundary. + Diagram []Diagram `xml:"diagrams,omitempty" json:"diagrams,omitempty"` +} + +// A graphic that provides a visual representation the system, or some aspect of it. +type Diagram struct { + + // An identifier for this diagram. + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` + + // A description of the diagram (e.g., alternate text). This can be used to support compliance with requirements from Section 508 of the United States Workforce Rehabilitation Act of 1973. + Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // A brief caption to annotate the diagram. + Caption Caption `xml:"caption,omitempty" json:"caption,omitempty"` + // Commentary about the diagram that enhances it. + Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` +} + +// A description of the system's network architecture, optionally supplemented by diagrams that illustrate the network architecture. +type NetworkArchitecture struct { + + // A description supporting the parent item. + Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // Additional commentary on the parent item. + Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + // A graphic that provides a visual representation the system, or some aspect of it. + Diagram []Diagram `xml:"diagrams,omitempty" json:"diagrams,omitempty"` +} + +// A description of the logical flow of information within the system and across its boundaries, optionally supplemented by diagrams that illustrate these flows. +type DataFlow struct { + + // A description supporting the parent item. + Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // Additional commentary on the parent item. + Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + // A graphic that provides a visual representation the system, or some aspect of it. + Diagram []Diagram `xml:"diagrams,omitempty" json:"diagrams,omitempty"` +} + +// Provides information as to how the system is implemented. +type SystemImplementation struct { + + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // Additional commentary on the parent item. + Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + // A type of user that interacts with the system based on an associated role. + User []User `xml:"users,omitempty" json:"users,omitempty"` + // A defined component that can be part of an implemented system. + Component []Component `xml:"components,omitempty" json:"components,omitempty"` + // A collection of the ports, protocols, and services used within the system. + Service []Service `xml:"services,omitempty" json:"services,omitempty"` + // Details on an individual system interconnection. + Interconnection []Interconnection `xml:"ssp-interconnection,omitempty" json:"sspInterconnection,omitempty"` + // A set of entries that represent the managed inventory instances of the system. + SystemInventory *SystemInventory `xml:"system-inventory,omitempty" json:"systemInventory,omitempty"` +} + +// A type of user that interacts with the system based on an associated role. +type User struct { + + // A unique identifier that references this user class. + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` + + // A title for display and navigation + Title validation_root.Title `xml:"title,omitempty" json:"title,omitempty"` + // A common name, short name or acronym + ShortName validation_root.ShortName `xml:"short-name,omitempty" json:"shortName,omitempty"` + // A description supporting the parent item. + Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // A reference to the roles served by the user. + RoleId []RoleId `xml:"role-ids,omitempty" json:"roleIds,omitempty"` + // Additional commentary on the parent item. + Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + // Identifies a specific system privilege held by the user, along with an associated description and/or rationale for the privilege. + AuthorizedPrivilege []AuthorizedPrivilege `xml:"authorized-privileges,omitempty" json:"authorizedPrivileges,omitempty"` +} + +// Identifies a specific system privilege held by the user, along with an associated description and/or rationale for the privilege. +type AuthorizedPrivilege struct { + + // The name of the identified privilege. + Name string `xml:"name,attr,omitempty" json:"name,omitempty"` + + // A description supporting the parent item. + Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + // Describes a function performed for a given authorized privilege by this user class. + FunctionPerformed []FunctionPerformed `xml:"functions-performed,omitempty" json:"functionsPerformed,omitempty"` +} + +// A defined component that can be part of an implemented system. +type Component struct { + + // A unique identifier for a component. + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` + // The component's human-readable name. + Name string `xml:"name,attr,omitempty" json:"name,omitempty"` + // A category describing the purpose of the component. + ComponentType string `xml:"component-type,attr,omitempty" json:"componentType,omitempty"` + + // A description of the component, including information about its function. + Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // Additional commentary on the parent item. + Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + // Describes the operational status of the system. + Status *Status `xml:"status,omitempty" json:"status,omitempty"` + // Defines a role that has responsibility for the component. + ResponsibleRole []ResponsibleRole `xml:"responsible-roles,omitempty" json:"responsibleRoles,omitempty"` +} + +// Information about an individual service within the system. +type Service struct { + + // Unique identifier of the containing object + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` + // Identifying the purpose and intended use of the property, part or other object. + Name string `xml:"name,attr,omitempty" json:"name,omitempty"` + + // A description of what the service provides. + Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // A summary of the technological or business purpose of the service. + Purpose Purpose `xml:"purpose,omitempty" json:"purpose,omitempty"` + // Additional commentary on the parent item. + Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + // Information about the protocol used to provide a service. + Protocol []Protocol `xml:"ssp-protocol,omitempty" json:"sspProtocol,omitempty"` +} + +// Information about the protocol used to provide a service. +type Protocol struct { + + // Identifying the purpose and intended use of the property, part or other object. + Name string `xml:"name,attr,omitempty" json:"name,omitempty"` + + // Where applicable this is the IPv4 port range on which the service operates. + PortRange []PortRange `xml:"port-ranges,omitempty" json:"portRanges,omitempty"` +} + +// Details on an individual system interconnection. +type Interconnection struct { + + // Unique identifier of the containing object + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` + + // The name of the remote interconnected system. + RemoteSystemName RemoteSystemName `xml:"remote-system-name,omitempty" json:"remoteSystemName,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // Additional commentary on the parent item. + Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. + ResponsibleParty []validation_root.ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` +} + +// A set of entries that represent the managed inventory instances of the system. +type SystemInventory struct { + + // Additional commentary on the parent item. + Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A single managed inventory item within the system. + InventoryItem []InventoryItem `xml:"inventory-items,omitempty" json:"inventoryItems,omitempty"` +} + +// A single managed inventory item within the system. +type InventoryItem struct { + + // Unique identifier of the containing object + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` + // Organizational asset identifier that is unique in the context of the system. This may be a reference to the identifier used in an asset tracking system or a vulnerability scanning tool. + AssetId string `xml:"asset-id,attr,omitempty" json:"assetId,omitempty"` + + // A description supporting the parent item. + Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // Additional commentary on the parent item. + Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. + ResponsibleParty []validation_root.ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` + // The set of componenets that are implemented in a given system inventory item. + ImplementedComponent []ImplementedComponent `xml:"implemented-components,omitempty" json:"implementedComponents,omitempty"` +} + +// The set of componenets that are implemented in a given system inventory item. +type ImplementedComponent struct { + + // A reference to a component that is implemented as part of an inventory item. + ComponentId string `xml:"component-id,attr,omitempty" json:"componentId,omitempty"` + // The type of implementation + Use string `xml:"use,attr,omitempty" json:"use,omitempty"` + + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // Additional commentary on the parent item. + Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. + ResponsibleParty []validation_root.ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` +} + +// Describes how the system satisfies a set of controls. +type ControlImplementation struct { + + // A description supporting the parent item. + Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + // Describes how the system satisfies an individual control. + ImplementedRequirement []ImplementedRequirement `xml:"implemented-requirements,omitempty" json:"implementedRequirements,omitempty"` +} + +// Describes how the system satisfies an individual control. +type ImplementedRequirement struct { + + // Unique identifier of the containing object + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` + // A reference to a control identifier. + ControlId string `xml:"control-id,attr,omitempty" json:"controlId,omitempty"` + + // A description supporting the parent item. + Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // Additional commentary on the parent item. + Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + // Defines how the referenced component implements a set of controls. + ByComponent []ByComponent `xml:"by-components,omitempty" json:"byComponents,omitempty"` + // A reference to one or more roles with responsibility for performing a function relative to the control. + ResponsibleRole []ResponsibleRole `xml:"responsible-roles,omitempty" json:"responsibleRoles,omitempty"` + // Identifies the parameter that will be filled in by the enclosed value element. + SetParam []SetParam `xml:"set-params,omitempty" json:"setParams,omitempty"` + // Identifies which statements within a control are addressed. + Statement []Statement `xml:"statements,omitempty" json:"statements,omitempty"` +} + +// Identifies which statements within a control are addressed. +type Statement struct { + + // A reference to the specific implemented statement associated with a control. + StatementId string `xml:"statement-id,attr,omitempty" json:"statementId,omitempty"` + + // A description supporting the parent item. + Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // Additional commentary on the parent item. + Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A reference to one or more roles with responsibility for performing a function relative to the control. + ResponsibleRole []ResponsibleRole `xml:"responsible-roles,omitempty" json:"responsibleRoles,omitempty"` + // Defines how the referenced component implements a set of controls. + ByComponent []ByComponent `xml:"by-components,omitempty" json:"byComponents,omitempty"` +} + +// A reference to one or more roles with responsibility for performing a function relative to the control. +type ResponsibleRole struct { + + // The role that is responsible for the business function. + RoleId string `xml:"role-id,attr,omitempty" json:"roleId,omitempty"` + + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // References a defined in . + PartyId []validation_root.PartyId `xml:"party-ids,omitempty" json:"partyIds,omitempty"` + // Additional commentary on the parent item. + Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` +} + +// Defines how the referenced component implements a set of controls. +type ByComponent struct { + + // A reference to the component that is implementing a given control or control statement. + ComponentId string `xml:"component-id,attr,omitempty" json:"componentId,omitempty"` + + // A description supporting the parent item. + Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + // A name/value pair with optional explanatory remarks. + Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + // A reference to one or more roles with responsibility for performing a function relative to the control. + ResponsibleRole []ResponsibleRole `xml:"responsible-roles,omitempty" json:"responsibleRoles,omitempty"` + // Identifies the parameter that will be filled in by the enclosed value element. + SetParam []SetParam `xml:"set-params,omitempty" json:"setParams,omitempty"` +} + +// Identifies the parameter that will be filled in by the enclosed value element. +type SetParam struct { + + // Points to a parameter within a control, to which the contained value will be assigned. + ParamId string `xml:"param-id,attr,omitempty" json:"paramId,omitempty"` + + // The phrase or string that fills-in the parameter and completes the requirement statement. + Value Value `xml:"value,omitempty" json:"value,omitempty"` +} + +// A unique identifier for the system described by this system security plan. +type SystemId struct { + // Identifies the identification system from which the provided identifier was assigned. + IdentifierType string `xml:"identifier-type,attr,omitempty" json:"identifierType,omitempty"` + Value string `xml:",chardata" json:"value,omitempty"` +} + +// The full name of the system. + +type SystemName string + +// A short name for the system, such as an acronym, that is suitable for display in a data table or summary list. + +type SystemNameShort string + +// The overall information system sensitivity categorization, such as defined by . + +type SecuritySensitivityLevel string + +// An identifier qualified by the given identification used, such as NIST SP 800-60. +type InformationTypeId struct { + // Specifies the information type identification system used. + System string `xml:"system,attr,omitempty" json:"system,omitempty"` + Value string `xml:",chardata" json:"value,omitempty"` +} + +// The prescribed base (Confidentiality, Integrity, or Availability) security impact level. + +type Base string + +// The selected (Confidentiality, Integrity, or Availability) security impact level. + +type Selected string + +// If the selected security level is different from the base security level, this contains the justification for the change. + +type AdjustmentJustification string + +// A target-level of confidentiality for the system, based on the sensitivity of information within the system. + +type SecurityObjectiveConfidentiality string + +// A target-level of integrity for the system, based on the sensitivity of information within the system. + +type SecurityObjectiveIntegrity string + +// A target-level of availability for the system, based on the sensitivity of information within the system. + +type SecurityObjectiveAvailability string + +// The date this system received its authorization. + +type DateAuthorized string + +// A brief caption to annotate the diagram. + +type Caption string + +// A reference to the roles served by the user. + +type RoleId string + +// Describes a function performed for a given authorized privilege by this user class. + +type FunctionPerformed string + +// Where applicable this is the IPv4 port range on which the service operates. +type PortRange struct { + // Indicates the starting port number in a port range + Start uint64 `xml:"start,attr,omitempty" json:"start,omitempty"` + + // Indicates the ending port number in a port range + End uint64 `xml:"end,attr,omitempty" json:"end,omitempty"` + + // Indicates the transport type. + Transport string `xml:"transport,attr,omitempty" json:"transport,omitempty"` + Value string `xml:",chardata" json:"value,omitempty"` +} + +// Describes the purpose for the service within the system. + +type Purpose string + +// The name of the remote interconnected system. + +type RemoteSystemName string + +// The phrase or string that fills-in the parameter and completes the requirement statement. + +type Value string From 8afa5f7085a1e1edd6590be6a7d4ee682cb1316b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 19 Dec 2019 17:58:17 +0100 Subject: [PATCH 046/110] Remove previous ssp go files Previously, it was generated by different name. --- types/oscal/ssp/ssp.go | 1072 ---------------------------------------- 1 file changed, 1072 deletions(-) delete mode 100644 types/oscal/ssp/ssp.go diff --git a/types/oscal/ssp/ssp.go b/types/oscal/ssp/ssp.go deleted file mode 100644 index aad0453b..00000000 --- a/types/oscal/ssp/ssp.go +++ /dev/null @@ -1,1072 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ssp - -import ( - "github.com/docker/oscalkit/types/oscal/catalog" -) - -// -type SystemSecurityPlan struct { - - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - - Metadata *Metadata `xml:"metadata,omitempty" json:"metadata,omitempty"` - SystemCharacteristics *SystemCharacteristics `xml:"system-characteristics,omitempty" json:"systemCharacteristics,omitempty"` - SystemImplementation *SystemImplementation `xml:"system-implementation,omitempty" json:"systemImplementation,omitempty"` - ControlImplementation *ControlImplementation `xml:"control-implementation,omitempty" json:"controlImplementation,omitempty"` - References *References `xml:"references,omitempty" json:"references,omitempty"` - Attachment *Attachment `xml:"attachment,omitempty" json:"attachment,omitempty"` - Imports []Import `xml:"import,omitempty" json:"imports,omitempty"` -} - -// Contains the characteristics of the system, such as its name, purpose, and -// security impact level. -type SystemCharacteristics struct { - SystemId *SystemId `xml:"system-id,omitempty" json:"systemId,omitempty"` - SystemName SystemName `xml:"system-name,omitempty" json:"systemName,omitempty"` - SystemNameShort SystemNameShort `xml:"system-name-short,omitempty" json:"systemNameShort,omitempty"` - SecuritySensitivityLevel SecuritySensitivityLevel `xml:"security-sensitivity-level,omitempty" json:"securitySensitivityLevel,omitempty"` - Status Status `xml:"status,omitempty" json:"status,omitempty"` - StatusOtherDescription StatusOtherDescription `xml:"status-other-description,omitempty" json:"statusOtherDescription,omitempty"` - DeploymentModel DeploymentModel `xml:"deployment-model,omitempty" json:"deploymentModel,omitempty"` - DeploymentModelOtherDescription DeploymentModelOtherDescription `xml:"deployment-model-other-description,omitempty" json:"deploymentModelOtherDescription,omitempty"` - ServiceModels []ServiceModel `xml:"service-model,omitempty" json:"service-models,omitempty"` - ServiceModelDescriptions []ServiceModelOtherDescription `xml:"service-model-other-description,omitempty" json:"service-model-other-descriptions,omitempty"` - Description *Description `xml:"description,omitempty" json:"description,omitempty"` - SystemInformation *SystemInformation `xml:"system-information,omitempty" json:"systemInformation,omitempty"` - SecurityImpactLevel *SecurityImpactLevel `xml:"security-impact-level,omitempty" json:"securityImpactLevel,omitempty"` - SecurityEauth *SecurityEauth `xml:"security-eauth,omitempty" json:"securityEauth,omitempty"` - LeveragedAuthorizations *LeveragedAuthorizations `xml:"leveraged-authorizations,omitempty" json:"leveragedAuthorizations,omitempty"` - AuthorizationBoundary *AuthorizationBoundary `xml:"authorization-boundary,omitempty" json:"authorizationBoundary,omitempty"` - NetworkArchitecture *NetworkArchitecture `xml:"network-architecture,omitempty" json:"networkArchitecture,omitempty"` - DataFlow *DataFlow `xml:"data-flow,omitempty" json:"dataFlow,omitempty"` - Users *Users `xml:"users,omitempty" json:"users,omitempty"` -} - -// A free-text description of the system. -type Description struct { - Prose *catalog.Prose `xml:",any" json:"prose,omitempty"` -} - -// Contains details about all types of information stored, processed, or -// transmitted by the system, such as privacy information, and NIST 800-60 -// information types. -type SystemInformation struct { - SspInformationType []InformationType `xml:"information-type,omitempty" json:"information-types,omitempty"` - SspDesignations []Designations `xml:"designations,omitempty" json:"designations,omitempty"` -} - -// Used to enumerate all special information type designations that may be required -// by a specific organization or compliance regiem, such as privacy impact -// information (PII), or payment card information (PCI). -type Designations struct { - SspDesignation []Designation `xml:"designation,omitempty" json:"designations,omitempty"` -} - -// Used when a specific organization or compliance regiem requires certain -// information types to be explicitly cited, such as privacy impact information -// (PII), or payment card information (PCI). -type Designation struct { - - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - - Title Title `xml:"title,omitempty" json:"title,omitempty"` - Declaration Declaration `xml:"declaration,omitempty" json:"declaration,omitempty"` - SspQualifiers []Qualifiers `xml:"qualifiers,omitempty" json:"qualifiers,omitempty"` -} - -// A list of questions about the system that contribute to the establishment of a -// designation, such as the FedRAMP privacy threshold analysis questions. -type Qualifiers struct { - SspQualifiers []Qualifier `xml:"qualifier,omitempty" json:"qualifiers,omitempty"` -} - -// An individual questions about the system that contributes to the establishment -// of a designation, such as a FedRAMP privacy threshold analysis question. -type Qualifier struct { - - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - - QualQuestion QualQuestion `xml:"qual-question,omitempty" json:"qualQuestion,omitempty"` - QualResponse QualResponse `xml:"qual-response,omitempty" json:"qualResponse,omitempty"` - QualNotes QualNotes `xml:"qual-notes,omitempty" json:"qualNotes,omitempty"` -} - -// Contains details about one type of information stored, processed, or transmitted -// by the system, such as privacy information, and NIST 800-60 information types. -type InformationType struct { - - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - // Pointer to the information type in NIST SP 800-60. - NistId string `xml:"nist-id,attr,omitempty" json:"nistId,omitempty"` - - Description *Description `xml:"description,omitempty" json:"description,omitempty"` - ConfidentialityImpact *ConfidentialityImpact `xml:"confidentiality-impact,omitempty" json:"confidentialityImpact,omitempty"` - IntegrityImpact *IntegrityImpact `xml:"integrity-impact,omitempty" json:"integrityImpact,omitempty"` - AvailabilityImpact *AvailabilityImpact `xml:"availability-impact,omitempty" json:"availabilityImpact,omitempty"` -} - -// -type ConfidentialityImpact struct { - Base Base `xml:"base,omitempty" json:"base,omitempty"` - Selected Selected `xml:"selected,omitempty" json:"selected,omitempty"` - AdjustmentJustification AdjustmentJustification `xml:"adjustment-justification,omitempty" json:"adjustmentJustification,omitempty"` -} - -// -type IntegrityImpact struct { - Base Base `xml:"base,omitempty" json:"base,omitempty"` - Selected Selected `xml:"selected,omitempty" json:"selected,omitempty"` - AdjustmentJustification AdjustmentJustification `xml:"adjustment-justification,omitempty" json:"adjustmentJustification,omitempty"` -} - -// -type AvailabilityImpact struct { - Base Base `xml:"base,omitempty" json:"base,omitempty"` - Selected Selected `xml:"selected,omitempty" json:"selected,omitempty"` - AdjustmentJustification AdjustmentJustification `xml:"adjustment-justification,omitempty" json:"adjustmentJustification,omitempty"` -} - -// -type SecurityImpactLevel struct { - SecurityObjectiveConfidentiality SecurityObjectiveConfidentiality `xml:"security-objective-confidentiality,omitempty" json:"securityObjectiveConfidentiality,omitempty"` - SecurityObjectiveIntegrity SecurityObjectiveIntegrity `xml:"security-objective-integrity,omitempty" json:"securityObjectiveIntegrity,omitempty"` - SecurityObjectiveAvailability SecurityObjectiveAvailability `xml:"security-objective-availability,omitempty" json:"securityObjectiveAvailability,omitempty"` -} - -// -type SecurityEauth struct { - SecurityAuthIal SecurityAuthIal `xml:"security-auth-ial,omitempty" json:"securityAuthIal,omitempty"` - SecurityAuthAal SecurityAuthAal `xml:"security-auth-aal,omitempty" json:"securityAuthAal,omitempty"` - SecurityAuthFal SecurityAuthFal `xml:"security-auth-fal,omitempty" json:"securityAuthFal,omitempty"` - SecurityEauthLevel SecurityEauthLevel `xml:"security-eauth-level,omitempty" json:"securityEauthLevel,omitempty"` -} - -// All leveraged authorizations for this system. -type LeveragedAuthorizations struct { - SspLeveragedAuthorization []LeveragedAuthorization `xml:"leveraged-authorization,omitempty" json:"leveraged-authorizations,omitempty"` -} - -// The details for a single leveraged authorization -type LeveragedAuthorization struct { - - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - - LeveragedAuthorizationName LeveragedAuthorizationName `xml:"leveraged-authorization-name,omitempty" json:"leveragedAuthorizationName,omitempty"` - LeveragedAuthorizationServiceProvider LeveragedAuthorizationServiceProvider `xml:"leveraged-authorization-service-provider,omitempty" json:"leveragedAuthorizationServiceProvider,omitempty"` - LeveragedAuthorizationDateGranted LeveragedAuthorizationDateGranted `xml:"leveraged-authorization-date-granted,omitempty" json:"leveragedAuthorizationDateGranted,omitempty"` -} - -// -type AuthorizationBoundary struct { - SspBoundaryDiagram []BoundaryDiagram `xml:"boundary-diagram,omitempty" json:"boundary-diagrams,omitempty"` -} - -// -type BoundaryDiagram struct { - - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - // Unique attachment identifier. - AttachmentId string `xml:"attachment-id,attr,omitempty" json:"attachmentId,omitempty"` - - BoundaryDescription *BoundaryDescription `xml:"boundary-description,omitempty" json:"boundaryDescription,omitempty"` -} - -// -type BoundaryDescription struct { - Prose *catalog.Prose `xml:",any" json:"prose,omitempty"` -} - -// -type NetworkArchitecture struct { - SspNetworkBoundary []NetworkDiagram `xml:"network-diagram,omitempty" json:"network-diagrams,omitempty"` -} - -// -type NetworkDiagram struct { - - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - // Unique attachment identifier. - AttachmentId string `xml:"attachment-id,attr,omitempty" json:"attachmentId,omitempty"` - - NetworkDescription *NetworkDescription `xml:"network-description,omitempty" json:"networkDescription,omitempty"` -} - -// -type NetworkDescription struct { - Prose *catalog.Prose `xml:",any" json:"prose,omitempty"` -} - -// -type DataFlow struct { - SspDataFlowDiagram []DataFlowDiagram `xml:"data-flow-diagram,omitempty" json:"data-flow-diagrams,omitempty"` -} - -// -type DataFlowDiagram struct { - - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - // Unique attachment identifier. - AttachmentId string `xml:"attachment-id,attr,omitempty" json:"attachmentId,omitempty"` - - DataFlowDescription *DataFlowDescription `xml:"data-flow-description,omitempty" json:"dataFlowDescription,omitempty"` -} - -// -type DataFlowDescription struct { - Prose *catalog.Prose `xml:",any" json:"prose,omitempty"` -} - -// Provides all user roles. -type Users struct { - Statistics *Statistics `xml:"statistics,omitempty" json:"statistics,omitempty"` - Roles []Role `xml:"role,omitempty" json:"roles,omitempty"` -} - -// Defining a role to be assigned to a party or agent -type Role struct { - - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - // Name allows the information to be named. - Name string `xml:"name,attr,omitempty" json:"name,omitempty"` - // . - External string `xml:"external,attr,omitempty" json:"external,omitempty"` - // . - Access string `xml:"access,attr,omitempty" json:"access,omitempty"` - // . - SensitivityLevel string `xml:"sensitivity-level,attr,omitempty" json:"sensitivityLevel,omitempty"` - - Title Title `xml:"title,omitempty" json:"title,omitempty"` - ShortName ShortName `xml:"short-name,omitempty" json:"shortName,omitempty"` - Desc Desc `xml:"desc,omitempty" json:"desc,omitempty"` - Privileges []Privilege `xml:"privilege,omitempty" json:"privileges,omitempty"` - Responsibilities []Responsibility `xml:"responsibility,omitempty" json:"responsibilities,omitempty"` -} - -// Provides a collection of statistics about users of the system. -type Statistics struct { - InternalUserTotalCurrent InternalUserTotalCurrent `xml:"internal-user-total-current,omitempty" json:"internalUserTotalCurrent,omitempty"` - InternalUserTotalFuture InternalUserTotalFuture `xml:"internal-user-total-future,omitempty" json:"internalUserTotalFuture,omitempty"` - ExternalUserTotalCurrent ExternalUserTotalCurrent `xml:"external-user-total-current,omitempty" json:"externalUserTotalCurrent,omitempty"` - ExternalUserTotalFuture ExternalUserTotalFuture `xml:"external-user-total-future,omitempty" json:"externalUserTotalFuture,omitempty"` -} - -// Provides information as to how the system is implemented. -type SystemImplementation struct { - - // Are their system interconnections? (Yes/No) - Interconnected string `xml:"interconnected,attr,omitempty" json:"interconnected,omitempty"` - - PortsProtocolsServices *PortsProtocolsServices `xml:"ports-protocols-services,omitempty" json:"portsProtocolsServices,omitempty"` - SystemInventory *SystemInventory `xml:"system-inventory,omitempty" json:"systemInventory,omitempty"` - SspInterconnection []Interconnection `xml:"interconnection,omitempty" json:"interconnections,omitempty"` - Components []Component `xml:"component,omitempty" json:"components,omitempty"` -} - -// A collection of the ports, protocols, and services used within the system. -type PortsProtocolsServices struct { - SspService []Service `xml:"service,omitempty" json:"services,omitempty"` -} - -// A collection of information about an individual service within the system. -type Service struct { - - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - // Name allows the information to be named. - Name string `xml:"name,attr,omitempty" json:"name,omitempty"` - - Purpose Purpose `xml:"purpose,omitempty" json:"purpose,omitempty"` - ComponentUsers []UsedBy `xml:"used-by,omitempty" json:"used-bies,omitempty"` - SspProtocol []Protocol `xml:"protocol,omitempty" json:"protocols,omitempty"` -} - -// Information about the protocol used to provide a service. -type Protocol struct { - - // Name allows the information to be named. - Name string `xml:"name,attr,omitempty" json:"name,omitempty"` - - PortRanges []PortRange `xml:"port-range,omitempty" json:"port-ranges,omitempty"` -} - -// Details on an individual system interconnection. -type Interconnection struct { - - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - - ExternalSystemName ExternalSystemName `xml:"external-system-name,omitempty" json:"externalSystemName,omitempty"` - ExternalSystemOrg ExternalSystemOrg `xml:"external-system-org,omitempty" json:"externalSystemOrg,omitempty"` - IsaName IsaName `xml:"isa-name,omitempty" json:"isaName,omitempty"` - IsaDate IsaDate `xml:"isa-date,omitempty" json:"isaDate,omitempty"` - IsaAuthorizations []IsaAuthorization `xml:"isa-authorization,omitempty" json:"isa-authorizations,omitempty"` -} - -// . -type Component struct { - - // Type designates the type of information provided. - Type string `xml:"type,attr,omitempty" json:"type,omitempty"` - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - - Subcomponents []Subcomponent `xml:"subcomponent,omitempty" json:"subcomponents,omitempty"` - SspOrigin []Origin `xml:"origin,omitempty" json:"origins,omitempty"` - SspCharacteristics []Characteristics `xml:"characteristics,omitempty" json:"characteristics,omitempty"` - SspSatisfaction []Satisfaction `xml:"satisfaction,omitempty" json:"satisfactions,omitempty"` - Validations []Validation `xml:"validation,omitempty" json:"validations,omitempty"` - SspProvisioning []Provisioning `xml:"provisioning,omitempty" json:"provisionings,omitempty"` -} - -// . -type Origin struct { - - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - - Organization Organization `xml:"organization,omitempty" json:"organization,omitempty"` - Title Title `xml:"title,omitempty" json:"title,omitempty"` - Version *Version `xml:"version,omitempty" json:"version,omitempty"` - ReleaseDate ReleaseDate `xml:"release-date,omitempty" json:"releaseDate,omitempty"` - Model Model `xml:"model,omitempty" json:"model,omitempty"` - SspPart []Part `xml:"part,omitempty" json:"parts,omitempty"` -} - -// . -type Part struct { - - // Identifies the property or object within the control; a semantic hint - Class string `xml:"class,attr,omitempty" json:"class,omitempty"` - // A relative or absolute URI indicating a resource available on the Internet. - Href *catalog.Href `xml:"href,attr,omitempty" json:"href,omitempty"` - - TelephoneNumbers []Phone `xml:"phone,omitempty" json:"phones,omitempty"` - EmailAddresses []Email `xml:"email,omitempty" json:"emails,omitempty"` -} - -// Component characteristics, assets and configuration information -type Characteristics struct { - - // Context designates the context of information provided. - Context string `xml:"context,attr,omitempty" json:"context,omitempty"` - - IpAddresses []IpAddress `xml:"ip-address,omitempty" json:"ip-addresses,omitempty"` - SspService []Service `xml:"service,omitempty" json:"services,omitempty"` - SspPart []Part `xml:"part,omitempty" json:"parts,omitempty"` -} - -// Describes how the indicated control is satisfied by this component -type Satisfaction struct { - - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - // Context designates the context of information provided. - Context string `xml:"context,attr,omitempty" json:"context,omitempty"` - - Prose *catalog.Prose `xml:",any" json:"prose,omitempty"` -} - -// . -type SystemInventory struct { - InventoryItems []InventoryItem `xml:"inventory-item,omitempty" json:"inventory-items,omitempty"` -} - -// . -type InventoryItem struct { - - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - // ID of a linked or imported component - ComponentId string `xml:"component-id,attr,omitempty" json:"componentId,omitempty"` - // Designates an asset as either virtual (="yes") or physical (="no"). - Virtual string `xml:"virtual,attr,omitempty" json:"virtual,omitempty"` - // Designates an asset as either publicly accessible (="yes") or not (="no"). - Public string `xml:"public,attr,omitempty" json:"public,omitempty"` - - Comments Comments `xml:"comments,omitempty" json:"comments,omitempty"` - SerialNo SerialNo `xml:"serial-no,omitempty" json:"serialNo,omitempty"` - IpAddresses []IpAddress `xml:"ip-address,omitempty" json:"ip-addresses,omitempty"` - DnsNames []DnsName `xml:"dns-name,omitempty" json:"dns-names,omitempty"` - NetworkIds []NetworkId `xml:"network-id,omitempty" json:"network-ids,omitempty"` - AssetOwners []AssetOwner `xml:"asset-owner,omitempty" json:"asset-owners,omitempty"` - AssetAdministrators []AssetAdministrator `xml:"asset-administrator,omitempty" json:"asset-administrators,omitempty"` - SspHostItem []HostItem `xml:"host-item,omitempty" json:"host-items,omitempty"` - SspSoftwareItem []SoftwareItem `xml:"software-item,omitempty" json:"software-items,omitempty"` -} - -// -type HostItem struct { - NetbiosNames []NetbiosName `xml:"netbios-name,omitempty" json:"netbios-names,omitempty"` - MacAddresses []MacAddress `xml:"mac-address,omitempty" json:"mac-addresses,omitempty"` - AuthenticatedScans []AuthenticatedScan `xml:"authenticated-scan,omitempty" json:"authenticated-scans,omitempty"` - BaselineTemplates []BaselineTemplate `xml:"baseline-template,omitempty" json:"baseline-templates,omitempty"` - OsNames []OsName `xml:"os-name,omitempty" json:"os-names,omitempty"` - OsVersions []OsVersion `xml:"os-version,omitempty" json:"os-versions,omitempty"` - Locations []Location `xml:"location,omitempty" json:"locations,omitempty"` - AssetTypes []AssetType `xml:"asset-type,omitempty" json:"asset-types,omitempty"` - Vendors []Vendor `xml:"vendor,omitempty" json:"vendors,omitempty"` - HardwareModels []HardwareModel `xml:"hardware-model,omitempty" json:"hardware-models,omitempty"` - SspScanned []Scanned `xml:"scanned,omitempty" json:"scanneds,omitempty"` - Properties []Prop `xml:"prop,omitempty" json:"props,omitempty"` -} - -// -type SoftwareItem struct { - Vendors []Vendor `xml:"vendor,omitempty" json:"vendors,omitempty"` - SoftwareNames []SoftwareName `xml:"software-name,omitempty" json:"software-names,omitempty"` - SoftwareVersions []SoftwareVersion `xml:"software-version,omitempty" json:"software-versions,omitempty"` - SoftwarePatchLevels []SoftwarePatchLevel `xml:"software-patch-level,omitempty" json:"software-patch-levels,omitempty"` - Functions []Function `xml:"function,omitempty" json:"functions,omitempty"` -} - -// -type ControlImplementation struct { - Controls []Control `xml:"control,omitempty" json:"controls,omitempty"` -} - -// Information related to the implementation of an individual control. -type Control struct { - - // Identifies the property or object within the control; a semantic hint - Class string `xml:"class,attr,omitempty" json:"class,omitempty"` - // Pointer to a control, by its ID - ControlId string `xml:"control-id,attr,omitempty" json:"controlId,omitempty"` - // A relative or absolute URI indicating a resource available on the Internet. - Href *catalog.Href `xml:"href,attr,omitempty" json:"href,omitempty"` - - SspResponsibleRole []ResponsibleRole `xml:"responsible-role,omitempty" json:"responsible-roles,omitempty"` - Properties []Prop `xml:"prop,omitempty" json:"props,omitempty"` - ParameterSettings []SetParam `xml:"set-param,omitempty" json:"set-params,omitempty"` - ControlResponses []ControlResponse `xml:"control-response,omitempty" json:"control-responses,omitempty"` -} - -// Identifies the parameter that will be filled in by the enclosed value element. -type SetParam struct { - - // Points to a parameter within a control, to which the contained value will be - // assigned. - ParamId string `xml:"param-id,attr,omitempty" json:"paramId,omitempty"` - // Provides for an indication of a link target, by its label, when no ID is - // available - Target string `xml:"target,attr,omitempty" json:"target,omitempty"` - - Value Value `xml:"value,omitempty" json:"value,omitempty"` -} - -// Describes how a control is implemented. -type ControlResponse struct { - - // Pointer to a speific requirement statement within a control. - StmtId string `xml:"stmt-id,attr,omitempty" json:"stmtId,omitempty"` - - Prose *catalog.Prose `xml:",any" json:"prose,omitempty"` -} - -// A group of reference descriptions -type References struct { - - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - - Links []Link `xml:"link,omitempty" json:"links,omitempty"` - Refs []Ref `xml:"ref,omitempty" json:"refs,omitempty"` -} - -// A reference, with one or more citations to standards, related documents, or -// other resources -type Ref struct { - - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - // Identifies the reference type, such as a law, standard, guidance. - RefType string `xml:"ref-type,attr,omitempty" json:"refType,omitempty"` - - Citations []Citation `xml:"citation,omitempty" json:"citations,omitempty"` - - Prose *catalog.Prose `xml:",any" json:"prose,omitempty"` -} - -// . -type Attachment struct { - - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - - Title Title `xml:"title,omitempty" json:"title,omitempty"` - Format Format `xml:"format,omitempty" json:"format,omitempty"` - Date Date `xml:"date,omitempty" json:"date,omitempty"` - Version *Version `xml:"version,omitempty" json:"version,omitempty"` - AttachmentType AttachmentType `xml:"attachment-type,omitempty" json:"attachmentType,omitempty"` - Base64 *Base64 `xml:"base64,omitempty" json:"base64,omitempty"` - Description *Description `xml:"description,omitempty" json:"description,omitempty"` -} - -// . -type Validation struct { - Prose *catalog.Prose `xml:",any" json:"prose,omitempty"` -} - -// . -type Provisioning struct { - Prose *catalog.Prose `xml:",any" json:"prose,omitempty"` -} - -// Information describing the publication or availability of this document -type Metadata struct { - Title Title `xml:"title,omitempty" json:"title,omitempty"` - PublicationDate PublicationDate `xml:"publication-date,omitempty" json:"publicationDate,omitempty"` - Version *Version `xml:"version,omitempty" json:"version,omitempty"` - Authors []Author `xml:"author,omitempty" json:"authors,omitempty"` - DocumentIdentifiers []DocId `xml:"doc-id,omitempty" json:"doc-ids,omitempty"` - Properties []Prop `xml:"prop,omitempty" json:"props,omitempty"` - Notes *Notes `xml:"notes,omitempty" json:"notes,omitempty"` - ExtraMeta *ExtraMeta `xml:"extra-meta,omitempty" json:"extraMeta,omitempty"` - HashedLinks []Hlink `xml:"hlink,omitempty" json:"hlinks,omitempty"` - Resources []Resource `xml:"resource,omitempty" json:"resources,omitempty"` - Roles []Role `xml:"role,omitempty" json:"roles,omitempty"` - Parties []Party `xml:"party,omitempty" json:"parties,omitempty"` -} - -// A responsible entity, either singular (an organization or person) or collective -// (multiple persons) -type Party struct { - - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - // In the context of a responsibility element, this points to a role in the users - // element responsible for this control - RoleId string `xml:"role-id,attr,omitempty" json:"roleId,omitempty"` - - Org *Org `xml:"org,omitempty" json:"org,omitempty"` - Notes *Notes `xml:"notes,omitempty" json:"notes,omitempty"` - Persons []Person `xml:"person,omitempty" json:"people,omitempty"` -} - -// A person, with contact information -type Person struct { - PersonName PersonName `xml:"person-name,omitempty" json:"personName,omitempty"` - ShortName ShortName `xml:"short-name,omitempty" json:"shortName,omitempty"` - OrgName OrgName `xml:"org-name,omitempty" json:"orgName,omitempty"` - PersonIdentifiers []PersonId `xml:"person-id,omitempty" json:"person-ids,omitempty"` - OrganizationIdentifiers []OrgId `xml:"org-id,omitempty" json:"org-ids,omitempty"` - EmailAddresses []Email `xml:"email,omitempty" json:"emails,omitempty"` - TelephoneNumbers []Phone `xml:"phone,omitempty" json:"phones,omitempty"` - URLs []Url `xml:"url,omitempty" json:"urls,omitempty"` - Address *Address `xml:"address,omitempty" json:"address,omitempty"` - Notes *Notes `xml:"notes,omitempty" json:"notes,omitempty"` -} - -// An organization or legal entity (not a person), with contact information -type Org struct { - OrgName OrgName `xml:"org-name,omitempty" json:"orgName,omitempty"` - ShortName ShortName `xml:"short-name,omitempty" json:"shortName,omitempty"` - OrganizationIdentifiers []OrgId `xml:"org-id,omitempty" json:"org-ids,omitempty"` - EmailAddresses []Email `xml:"email,omitempty" json:"emails,omitempty"` - TelephoneNumbers []Phone `xml:"phone,omitempty" json:"phones,omitempty"` - URLs []Url `xml:"url,omitempty" json:"urls,omitempty"` - Address *Address `xml:"address,omitempty" json:"address,omitempty"` - Notes *Notes `xml:"notes,omitempty" json:"notes,omitempty"` -} - -// A pointer to an external document with optional hash for verification -type Hlink struct { - - // A relative or absolute URI indicating a resource available on the Internet. - Href *catalog.Href `xml:"href,attr,omitempty" json:"href,omitempty"` - // Purpose of the link - Rel string `xml:"rel,attr,omitempty" json:"rel,omitempty"` - // Describes the media or MIME type of a linked resource - MediaType string `xml:"media-type,attr,omitempty" json:"mediaType,omitempty"` - - Title Title `xml:"title,omitempty" json:"title,omitempty"` - Hashes []Hash `xml:"hash,omitempty" json:"hashes,omitempty"` -} - -// A postal address -type Address struct { - City City `xml:"city,omitempty" json:"city,omitempty"` - State State `xml:"state,omitempty" json:"state,omitempty"` - PostalCode PostalCode `xml:"postal-code,omitempty" json:"postalCode,omitempty"` - Country Country `xml:"country,omitempty" json:"country,omitempty"` - PostalAddress []AddrLine `xml:"addr-line,omitempty" json:"addr-lines,omitempty"` -} - -// Any notes with further information -type Notes struct { - Prose *catalog.Prose `xml:",any" json:"prose,omitempty"` -} - -// A resource to inform or authenticate the present document. -type Resource struct { - - // Type designates the type of information provided. - Type string `xml:"type,attr,omitempty" json:"type,omitempty"` - // Describes the media or MIME type of a linked resource - MediaType string `xml:"media-type,attr,omitempty" json:"mediaType,omitempty"` - - Title Title `xml:"title,omitempty" json:"title,omitempty"` - PublicationDate PublicationDate `xml:"publication-date,omitempty" json:"publicationDate,omitempty"` - Version *Version `xml:"version,omitempty" json:"version,omitempty"` - Authors []Author `xml:"author,omitempty" json:"authors,omitempty"` - DocumentIdentifiers []DocId `xml:"doc-id,omitempty" json:"doc-ids,omitempty"` - Properties []Prop `xml:"prop,omitempty" json:"props,omitempty"` - Notes *Notes `xml:"notes,omitempty" json:"notes,omitempty"` - HashedLinks []Hlink `xml:"hlink,omitempty" json:"hlinks,omitempty"` -} - -// Container for (system-defined) metadata -type ExtraMeta struct { - Notes *Notes `xml:"notes,omitempty" json:"notes,omitempty"` - MetadataFields []Meta `xml:"meta,omitempty" json:"meta,omitempty"` - MetadataGroups []MetaGroup `xml:"meta-group,omitempty" json:"meta-groups,omitempty"` -} - -// Custom- or application-defined annotated metadata. -type MetaGroup struct { - - // A classification (according to any schema or taxonomy) of a metadata value or - // set of values. - Term string `xml:"term,attr,omitempty" json:"term,omitempty"` - // Type designates the type of information provided. - Type string `xml:"type,attr,omitempty" json:"type,omitempty"` - - MetadataFields []Meta `xml:"meta,omitempty" json:"meta,omitempty"` - Notes *Notes `xml:"notes,omitempty" json:"notes,omitempty"` - MetadataGroups []MetaGroup `xml:"meta-group,omitempty" json:"meta-groups,omitempty"` -} - -// Makes information from an external component file available to this component -// file. -type Import struct { - - // A relative or absolute URI indicating a resource available on the Internet. - Href *catalog.Href `xml:"href,attr,omitempty" json:"href,omitempty"` - - Include *Include `xml:"include,omitempty" json:"include,omitempty"` -} - -// Specifies which controls and subcontrols to include from the resource (source -// catalog) being imported -type Include struct { - All *All `xml:"all,omitempty" json:"all,omitempty"` - Calls []Call `xml:"call,omitempty" json:"calls,omitempty"` -} - -// -type SystemId struct { - // Type designates the type of information provided. - Type string `xml:"type,attr,omitempty" json:"type,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// -type SystemName string - -// -type SystemNameShort string - -// -type SecuritySensitivityLevel string - -// Identifies whether a specific designation applies to this system. -type Declaration string - -// A question that must be answered about this system. -type QualQuestion string - -// The response to the question. -type QualResponse string - -// Additional information about the response to the question. -type QualNotes string - -// The prescribed base (Confidentiality, Integrity, or Availability) security -// impact level. -type Base string - -// The selected (Confidentiality, Integrity, or Availability) security impact -// level. -type Selected string - -// If the selected security level is different from the base security level, this -// contains the justificaiton for the change. -type AdjustmentJustification string - -// -type SecurityObjectiveConfidentiality string - -// -type SecurityObjectiveIntegrity string - -// -type SecurityObjectiveAvailability string - -// -type SecurityAuthIal string - -// -type SecurityAuthAal string - -// -type SecurityAuthFal string - -// -type SecurityEauthLevel string - -// -type Status string - -// -type StatusOtherDescription string - -// -type DeploymentModel string - -// -type DeploymentModelOtherDescription string - -// -type ServiceModel string - -// -type ServiceModelOtherDescription string - -// Name of the leveraged system. -type LeveragedAuthorizationName string - -// Name of the service provider that manages the leveraged system. -type LeveragedAuthorizationServiceProvider string - -// The date the leveraged system received its authorization. -type LeveragedAuthorizationDateGranted string - -// Identifies the type/level of system privilege for the role. For FedRAMP, the -// only valid values are "p" (Privileged), "np" (Non-Privileged), or "nla" (No -// Logical Access). -type Privilege string - -// Identifies the functions performed by the user role. -type Responsibility string - -// -type InternalUserTotalCurrent string - -// -type InternalUserTotalFuture string - -// -type ExternalUserTotalCurrent string - -// -type ExternalUserTotalFuture string - -// -type PortRange struct { - // Indicates the starting port number in a port range. - Start string `xml:"start,attr,omitempty" json:"start,omitempty"` - - // Indicates the ending port number in a port range. - End string `xml:"end,attr,omitempty" json:"end,omitempty"` - - // Indicates the transport type. - Transport string `xml:"transport,attr,omitempty" json:"transport,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// Describes the purpose for the service within the system. -type Purpose string - -// Identifies the types of system component that uses the service. One entry per -type UsedBy string - -// -type ExternalSystemName string - -// -type ExternalSystemOrg string - -// Name of the individual who authorized the Interconnection Security Agreement -// (ISA). -type IsaAuthorization string - -// Title of the Interconnection Security Agreement (ISA). -type IsaName string - -// Date of the Interconnection Security Agreement (ISA). -type IsaDate string - -// . -type Vendor struct { - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - - // Type designates the type of information provided. - Type string `xml:"type,attr,omitempty" json:"type,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// . -type ReleaseDate string - -// . -type Model string - -// Use the @type flag to deisgnate IPv4 or IPv6. -type IpAddress struct { - // Type designates the type of information provided. - Type string `xml:"type,attr,omitempty" json:"type,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// If available, state the DNS name or URL of the inventory item. This can be left -// blank if one does not exist, or it is a dynamic field. -type DnsName string - -// If available, state the NetBIOS name of the inventory item. This can be omitted -// if one does not exist, or it is a dynamic field. -type NetbiosName string - -// If available, state the MAC Address of the inventory item. This can be left -// blank if one does not exist, or it is a dynamic field. -type MacAddress string - -// . -type OsName string - -// . -type OsVersion string - -// Physical location of hardware. Could include Data Center ID, Cage#, Rack# or -// other meaningful location identifiers. -type Location string - -// Simple description of the asset's function (e.g., Router, Storage Array, DNS -// Server, etc.) Do not use vendor or product names here. -type AssetType string - -// Model number of the hardware. -type HardwareModel string - -// Indicate whether this asset is planned for authenticated scanning. -type AuthenticatedScan string - -// . -type SoftwareName string - -// . -type SoftwareVersion string - -// . -type SoftwarePatchLevel string - -// . -type Function string - -// Any additional information that could be useful to an auditor or reviewer. -type Comments string - -// Product serial number or internal asset tag number. -type SerialNo string - -// Virtual LAN or Network ID. -type NetworkId string - -// The individual, title, or role who "owns" the asset on behalf of the// organization. -type AssetOwner struct { - // Identifies the unique identifier for an individual, title, role, or team. - PocId string `xml:"poc-id,attr,omitempty" json:"pocId,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// The individual, title, role, or team responsible for operating and maintaining// the asset. -type AssetAdministrator struct { - // Identifies the unique identifier for an individual, title, role, or team. - PocId string `xml:"poc-id,attr,omitempty" json:"pocId,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// -type ResponsibleRole struct { - // In the context of a responsibility element, this points to a role in the users - - // element responsible for this control - RoleId string `xml:"role-id,attr,omitempty" json:"roleId,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// The phrase or string that fills-in the parameter and completes the requirement -// statement. -type Value string - -// Citation of a resource -type Citation struct { - // . - Id string `xml:"id,attr,omitempty" json:"id,omitempty"` - - // A relative or absolute URI indicating a resource available on the Internet. - Href *catalog.Href `xml:"href,attr,omitempty" json:"href,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// A line or paragraph with a hypertext link -type Link struct { - // A relative or absolute URI indicating a resource available on the Internet. - Href *catalog.Href `xml:"href,attr,omitempty" json:"href,omitempty"` - - // Purpose of the link - Rel string `xml:"rel,attr,omitempty" json:"rel,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// -type Format string - -// -type Date string - -// -type AttachmentType string - -// -type Base64 struct { - // Name of the file before it was converted to Base-64. This is the name that will - - // be assigned to the file when converted back to binary. - Filename string `xml:"filename,attr,omitempty" json:"filename,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// . -type Subcomponent string - -// . -type Organization string - -// . -type BaselineTemplate string - -// . -type Scanned string - -// The title under which this document is formally published -type Title string - -// A named author -type Author string - -// The official date of publication -type PublicationDate string - -// Version information -type Version struct { - // Please use YYYY-MM-DD syntax. - IsoDate string `xml:"iso-date,attr,omitempty" json:"isoDate,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// Any sort of document identifier, name, code, path or other indicator of where// and how this document may be located, compared or validated. Given appropriate// qualification via its and , this value may point to or of the document. -type DocId struct { - // Type designates the type of information provided. - Type string `xml:"type,attr,omitempty" json:"type,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// A property associated with the document -type Prop struct { - // Identifies the property or object within the control; a semantic hint - Class string `xml:"class,attr,omitempty" json:"class,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// An identifier for a person (such as an ORCID) using a designated scheme. -type PersonId struct { - // Type designates the type of information provided. - Type string `xml:"type,attr,omitempty" json:"type,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// An identifier for an organization using a designated scheme. -type OrgId struct { - // Type designates the type of information provided. - Type string `xml:"type,attr,omitempty" json:"type,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// Full (legal) name of an individual -type PersonName string - -// Full (legal) name of an organization -type OrgName string - -// A common name, short name or acronym -type ShortName string - -// A single line of an address -type AddrLine string - -// City, town or geographical region for mailing address -type City string - -// State, province or analogous geographical region for mailing address -type State string - -// Postal or ZIP code for mailing address -type PostalCode string - -// Country for mailing address -type Country string - -// Email address -type Email string - -// Contact number by telephone -type Phone string - -// URL for web site or Internet presence -type Url string - -// A short description -type Desc string - -// A document hash or other value subject to cryptographic authentication -type Hash struct { - // Method by which a hash is derived - Algorithm string `xml:"algorithm,attr,omitempty" json:"algorithm,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// Any customized or specialized metadata value. -type Meta struct { - // A classification (according to any schema or taxonomy) of a metadata value or - - // set of values. - Term string `xml:"term,attr,omitempty" json:"term,omitempty"` - - // Type designates the type of information provided. - Type string `xml:"type,attr,omitempty" json:"type,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// Include all controls from the imported resource (catalog) -type All struct { - // Whether subcontrols should be implicitly included, if not called. - WithSubcontrols string `xml:"with-subcontrols,attr,omitempty" json:"withSubcontrols,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} - -// The call element imports the component definition identified by the// @component-id attribute in the external component file. -type Call struct { - // ID of a linked or imported component - ComponentId string `xml:"component-id,attr,omitempty" json:"componentId,omitempty"` - Value string `xml:",chardata" json:"value,omitempty"` -} From f69d6c9a671f3c263578a25d0c484ae15097a246 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Fri, 20 Dec 2019 12:02:46 +0100 Subject: [PATCH 047/110] Always use original xml name to name struct items in go This will not only allow us to have naming consistent, further it will make all slices to be named in plural form. --- metaschema/types.tmpl | 12 +- types/oscal/catalog/catalog.go | 26 +-- .../oscal/nominal_catalog/nominal_catalog.go | 16 +- types/oscal/profile/profile.go | 54 +++--- .../system_security_plan.go | 178 +++++++++--------- .../oscal/validation_root/validation_root.go | 88 ++++----- 6 files changed, 187 insertions(+), 187 deletions(-) diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index 7ffed248..d736694c 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -20,29 +20,29 @@ type {{toCamel .Name}} struct { {{- if and (eq "id" .Name) (eq "profile" $packageName)}} Id string `xml:"param-id,attr,omitempty" json:"id,omitempty"` {{- else}} - {{.GoName}} {{.GoDatatype}} `xml:"{{.XmlName}},attr,omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{toCamel .XmlName}} {{.GoDatatype}} `xml:"{{.XmlName}},attr,omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{- end}} {{- end}} {{if .Model}} {{ range .Model.Field}} // {{ .GoComment }} - {{.GoName}} {{.GoMemLayout}}{{.GoPackageName}}{{.GoName}} `xml:"{{ .XmlName }},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoPackageName}}{{.GoName}} `xml:"{{ .XmlName }},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{- end}} {{- range .Model.Assembly}} // {{ .GoComment }} - {{.GoName}} {{.GoMemLayout}}{{.GoPackageName}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoPackageName}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{- end}} {{- range .Model.Choice}} {{- range .Field}} // {{ .GoComment }} - {{.GoName}} {{.GoMemLayout}}{{.GoPackageName}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoPackageName}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{- end}} {{- range .Assembly}} // {{ .GoComment }} - {{.GoName}} {{.GoMemLayout}}{{.GoPackageName}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoPackageName}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{- end}} {{- end}} @@ -66,7 +66,7 @@ type {{toCamel .Name}} struct { type {{toCamel .Name}} struct { {{- range .Flags}} // {{ .GoComment }} - {{.GoName}} {{.GoDatatype}} `xml:"{{.XmlName}},attr,omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{toCamel .XmlName}} {{.GoDatatype}} `xml:"{{.XmlName}},attr,omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{end -}} Value string `xml:",chardata" json:"value,omitempty"` diff --git a/types/oscal/catalog/catalog.go b/types/oscal/catalog/catalog.go index d0c4338e..35a076b5 100644 --- a/types/oscal/catalog/catalog.go +++ b/types/oscal/catalog/catalog.go @@ -20,9 +20,9 @@ type Catalog struct { // Back matter including references and resources. BackMatter *validation_root.BackMatter `xml:"back-matter,omitempty" json:"backMatter,omitempty"` // A group of controls, or of groups of controls. - Group []Group `xml:"groups,omitempty" json:"groups,omitempty"` + Groups []Group `xml:"groups,omitempty" json:"groups,omitempty"` // A structured information object representing a security or privacy control. Each security or privacy control within the Catalog is defined by a distinct control instance. - Control []Control `xml:"controls,omitempty" json:"controls,omitempty"` + Controls []Control `xml:"controls,omitempty" json:"controls,omitempty"` } // A group of controls, or of groups of controls. @@ -36,15 +36,15 @@ type Group struct { // A title for display and navigation Title validation_root.Title `xml:"title,omitempty" json:"title,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // Parameters provide a mechanism for the dynamic assignment of value(s) in a control. - Param []nominal_catalog.Param `xml:"parameters,omitempty" json:"parameters,omitempty"` + Parameters []nominal_catalog.Param `xml:"parameters,omitempty" json:"parameters,omitempty"` // A partition or component of a control or part - Part []nominal_catalog.Part `xml:"parts,omitempty" json:"parts,omitempty"` + Parts []nominal_catalog.Part `xml:"parts,omitempty" json:"parts,omitempty"` // A group of controls, or of groups of controls. - Group []Group `xml:"groups,omitempty" json:"groups,omitempty"` + Groups []Group `xml:"groups,omitempty" json:"groups,omitempty"` // A structured information object representing a security or privacy control. Each security or privacy control within the Catalog is defined by a distinct control instance. - Control []Control `xml:"controls,omitempty" json:"controls,omitempty"` + Controls []Control `xml:"controls,omitempty" json:"controls,omitempty"` } // A structured information object representing a security or privacy control. Each security or privacy control within the Catalog is defined by a distinct control instance. @@ -58,15 +58,15 @@ type Control struct { // A title for display and navigation Title validation_root.Title `xml:"title,omitempty" json:"title,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // Parameters provide a mechanism for the dynamic assignment of value(s) in a control. - Param []nominal_catalog.Param `xml:"parameters,omitempty" json:"parameters,omitempty"` + Parameters []nominal_catalog.Param `xml:"parameters,omitempty" json:"parameters,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A partition or component of a control or part - Part []nominal_catalog.Part `xml:"parts,omitempty" json:"parts,omitempty"` + Parts []nominal_catalog.Part `xml:"parts,omitempty" json:"parts,omitempty"` // A structured information object representing a security or privacy control. Each security or privacy control within the Catalog is defined by a distinct control instance. - Control []Control `xml:"controls,omitempty" json:"controls,omitempty"` + Controls []Control `xml:"controls,omitempty" json:"controls,omitempty"` } diff --git a/types/oscal/nominal_catalog/nominal_catalog.go b/types/oscal/nominal_catalog/nominal_catalog.go index 014115a3..e5d3c8b0 100644 --- a/types/oscal/nominal_catalog/nominal_catalog.go +++ b/types/oscal/nominal_catalog/nominal_catalog.go @@ -27,13 +27,13 @@ type Param struct { // A short name for the parameter. Label Label `xml:"label,omitempty" json:"label,omitempty"` // Indicates and explains the purpose and use of a parameter - Usage []Usage `xml:"descriptions,omitempty" json:"descriptions,omitempty"` + Descriptions []Usage `xml:"descriptions,omitempty" json:"descriptions,omitempty"` // A formal or informal expression of a constraint or test - Constraint []Constraint `xml:"constraints,omitempty" json:"constraints,omitempty"` + Constraints []Constraint `xml:"constraints,omitempty" json:"constraints,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // A prose statement that provides a recommendation for the use of a parameter. - Guideline []Guideline `xml:"guidance,omitempty" json:"guidance,omitempty"` + Guidance []Guideline `xml:"guidance,omitempty" json:"guidance,omitempty"` // A recommended parameter value or set of values. Value Value `xml:"value,omitempty" json:"value,omitempty"` // A set of parameter value choices, that may be picked from to set the parameter value. @@ -54,7 +54,7 @@ type Select struct { HowMany string `xml:"how-many,attr,omitempty" json:"howMany,omitempty"` // A value selection among several such options - Choice []Choice `xml:"alternatives,omitempty" json:"alternatives,omitempty"` + Alternatives []Choice `xml:"alternatives,omitempty" json:"alternatives,omitempty"` } // A partition or component of a control or part @@ -72,13 +72,13 @@ type Part struct { // A title for display and navigation Title validation_root.Title `xml:"title,omitempty" json:"title,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // Prose permits multiple paragraphs, lists, tables etc. Prose Prose `xml:"prose,omitempty" json:"prose,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // A partition or component of a control or part - Part []Part `xml:"parts,omitempty" json:"parts,omitempty"` + Parts []Part `xml:"parts,omitempty" json:"parts,omitempty"` } // A placeholder for a missing value, in display. diff --git a/types/oscal/profile/profile.go b/types/oscal/profile/profile.go index 937279f4..3366b8e3 100644 --- a/types/oscal/profile/profile.go +++ b/types/oscal/profile/profile.go @@ -21,7 +21,7 @@ type Profile struct { Metadata *validation_root.Metadata `xml:"metadata,omitempty" json:"metadata,omitempty"` // An Import element designates a catalog, profile, or other resource to be // included (referenced and potentially modified) by this profile. - Import []Import `xml:"imports,omitempty" json:"imports,omitempty"` + Imports []Import `xml:"imports,omitempty" json:"imports,omitempty"` // A Merge element merges controls in resolution. Merge *Merge `xml:"merge,omitempty" json:"merge,omitempty"` // Set parameters or amend controls in resolution @@ -62,11 +62,11 @@ type Merge struct { type Custom struct { // Call a control by its ID - Call []Call `xml:"id-selectors,omitempty" json:"idSelectors,omitempty"` + IdSelectors []Call `xml:"id-selectors,omitempty" json:"idSelectors,omitempty"` // Select controls by (regular expression) match on ID - Match []Match `xml:"pattern-selectors,omitempty" json:"patternSelectors,omitempty"` + PatternSelectors []Match `xml:"pattern-selectors,omitempty" json:"patternSelectors,omitempty"` // As in catalogs, a group of (selected) controls or of groups of controls - Group []Group `xml:"groups,omitempty" json:"groups,omitempty"` + Groups []Group `xml:"groups,omitempty" json:"groups,omitempty"` } // As in catalogs, a group of (selected) controls or of groups of controls @@ -80,26 +80,26 @@ type Group struct { // A title for display and navigation Title validation_root.Title `xml:"title,omitempty" json:"title,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // Parameters provide a mechanism for the dynamic assignment of value(s) in a control. - Param []nominal_catalog.Param `xml:"parameters,omitempty" json:"parameters,omitempty"` + Parameters []nominal_catalog.Param `xml:"parameters,omitempty" json:"parameters,omitempty"` // A partition or component of a control or part - Part []nominal_catalog.Part `xml:"parts,omitempty" json:"parts,omitempty"` + Parts []nominal_catalog.Part `xml:"parts,omitempty" json:"parts,omitempty"` // Call a control by its ID - Call []Call `xml:"id-selectors,omitempty" json:"idSelectors,omitempty"` + IdSelectors []Call `xml:"id-selectors,omitempty" json:"idSelectors,omitempty"` // Select controls by (regular expression) match on ID - Match []Match `xml:"pattern-selectors,omitempty" json:"patternSelectors,omitempty"` + PatternSelectors []Match `xml:"pattern-selectors,omitempty" json:"patternSelectors,omitempty"` // As in catalogs, a group of (selected) controls or of groups of controls - Group []Group `xml:"groups,omitempty" json:"groups,omitempty"` + Groups []Group `xml:"groups,omitempty" json:"groups,omitempty"` } // Set parameters or amend controls in resolution type Modify struct { // A parameter setting, to be propagated to points of insertion - Set []Set `xml:"settings,omitempty" json:"settings,omitempty"` + Settings []Set `xml:"settings,omitempty" json:"settings,omitempty"` // An Alter element specifies changes to be made to an included control when a profile is resolved. - Alter []Alter `xml:"alterations,omitempty" json:"alterations,omitempty"` + Alterations []Alter `xml:"alterations,omitempty" json:"alterations,omitempty"` } // Specifies which controls to include from the resource (source catalog) being @@ -109,9 +109,9 @@ type Include struct { // Include all controls from the imported resource (catalog) All *All `xml:"all,omitempty" json:"all,omitempty"` // Call a control by its ID - Call []Call `xml:"id-selectors,omitempty" json:"idSelectors,omitempty"` + IdSelectors []Call `xml:"id-selectors,omitempty" json:"idSelectors,omitempty"` // Select controls by (regular expression) match on ID - Match []Match `xml:"pattern-selectors,omitempty" json:"patternSelectors,omitempty"` + PatternSelectors []Match `xml:"pattern-selectors,omitempty" json:"patternSelectors,omitempty"` } // Which controls to exclude from the resource (source catalog) being @@ -119,9 +119,9 @@ type Include struct { type Exclude struct { // Call a control by its ID - Call []Call `xml:"id-selectors,omitempty" json:"idSelectors,omitempty"` + IdSelectors []Call `xml:"id-selectors,omitempty" json:"idSelectors,omitempty"` // Select controls by (regular expression) match on ID - Match []Match `xml:"pattern-selectors,omitempty" json:"patternSelectors,omitempty"` + PatternSelectors []Match `xml:"pattern-selectors,omitempty" json:"patternSelectors,omitempty"` } // A parameter setting, to be propagated to points of insertion @@ -137,13 +137,13 @@ type Set struct { // A placeholder for a missing value, in display. Label nominal_catalog.Label `xml:"label,omitempty" json:"label,omitempty"` // Indicates and explains the purpose and use of a parameter - Usage []nominal_catalog.Usage `xml:"descriptions,omitempty" json:"descriptions,omitempty"` + Descriptions []nominal_catalog.Usage `xml:"descriptions,omitempty" json:"descriptions,omitempty"` // A formal or informal expression of a constraint or test - Constraint []nominal_catalog.Constraint `xml:"constraints,omitempty" json:"constraints,omitempty"` + Constraints []nominal_catalog.Constraint `xml:"constraints,omitempty" json:"constraints,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // A prose statement that provides a recommendation for the use of a parameter. - Guideline []nominal_catalog.Guideline `xml:"guidance,omitempty" json:"guidance,omitempty"` + Guidance []nominal_catalog.Guideline `xml:"guidance,omitempty" json:"guidance,omitempty"` // Indicates a permissible value for a parameter or property Value nominal_catalog.Value `xml:"value,omitempty" json:"value,omitempty"` // Presenting a choice among alternatives @@ -157,9 +157,9 @@ type Alter struct { ControlId string `xml:"control-id,attr,omitempty" json:"controlId,omitempty"` // Specifies elements to be removed from a control, in resolution - Remove []Remove `xml:"removals,omitempty" json:"removals,omitempty"` + Removals []Remove `xml:"removals,omitempty" json:"removals,omitempty"` // Specifies contents to be added into controls, in resolution - Add []Add `xml:"additions,omitempty" json:"additions,omitempty"` + Additions []Add `xml:"additions,omitempty" json:"additions,omitempty"` } // Specifies contents to be added into controls, in resolution @@ -173,15 +173,15 @@ type Add struct { // A title for display and navigation Title validation_root.Title `xml:"title,omitempty" json:"title,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // Parameters provide a mechanism for the dynamic assignment of value(s) in a control. - Param []nominal_catalog.Param `xml:"parameters,omitempty" json:"parameters,omitempty"` + Parameters []nominal_catalog.Param `xml:"parameters,omitempty" json:"parameters,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A partition or component of a control or part - Part []nominal_catalog.Part `xml:"parts,omitempty" json:"parts,omitempty"` + Parts []nominal_catalog.Part `xml:"parts,omitempty" json:"parts,omitempty"` } // A Combine element defines whether and how to combine multiple (competing) diff --git a/types/oscal/system_security_plan/system_security_plan.go b/types/oscal/system_security_plan/system_security_plan.go index a562fd8c..b2d0859f 100644 --- a/types/oscal/system_security_plan/system_security_plan.go +++ b/types/oscal/system_security_plan/system_security_plan.go @@ -39,7 +39,7 @@ type ImportProfile struct { type SystemCharacteristics struct { // A unique identifier for the system described by this system security plan. - SystemId []SystemId `xml:"system-ids,omitempty" json:"systemIds,omitempty"` + SystemIds []SystemId `xml:"system-ids,omitempty" json:"systemIds,omitempty"` // The full name of the system. SystemName SystemName `xml:"system-name,omitempty" json:"systemName,omitempty"` // A short name for the system, such as an acronym, that is suitable for display in a data table or summary list. @@ -47,9 +47,9 @@ type SystemCharacteristics struct { // A free-text description of the system. Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // The date this system received its authorization. DateAuthorized DateAuthorized `xml:"date-authorized,omitempty" json:"dateAuthorized,omitempty"` // The overall information system sensitivity categorization, such as defined by . @@ -57,7 +57,7 @@ type SystemCharacteristics struct { // Additional commentary on the parent item. Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // Contains details about all information types that are stored, processed, or transmitted by the system, such as privacy information, and those defined in . SystemInformation *SystemInformation `xml:"system-information,omitempty" json:"systemInformation,omitempty"` // The overall level of expected impact resulting from unauthorized disclosure, modification, or loss of access to information. @@ -65,7 +65,7 @@ type SystemCharacteristics struct { // Describes the operational status of the system. Status *Status `xml:"status,omitempty" json:"status,omitempty"` // A description of another authorized system from which this system inherits capabilities that satisfy security requirements. Another term for this concept is a . - LeveragedAuthorization []LeveragedAuthorization `xml:"leveraged-authorizations,omitempty" json:"leveragedAuthorizations,omitempty"` + LeveragedAuthorizations []LeveragedAuthorization `xml:"leveraged-authorizations,omitempty" json:"leveragedAuthorizations,omitempty"` // A description of this system's authorization boundary, optionally supplemented by diagrams that illustrate the authorization boundary. AuthorizationBoundary *AuthorizationBoundary `xml:"authorization-boundary,omitempty" json:"authorizationBoundary,omitempty"` // A description of the system's network architecture, optionally supplemented by diagrams that illustrate the network architecture. @@ -73,20 +73,20 @@ type SystemCharacteristics struct { // A description of the logical flow of information within the system and across its boundaries, optionally supplemented by diagrams that illustrate these flows. DataFlow *DataFlow `xml:"data-flow,omitempty" json:"dataFlow,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. - ResponsibleParty []validation_root.ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` + ResponsibleParties []validation_root.ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` } // Contains details about all information types that are stored, processed, or transmitted by the system, such as privacy information, and those defined in . type SystemInformation struct { // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // Contains details about one information type that is stored, processed, or transmitted by the system, such as privacy information, and those defined in . - InformationType []InformationType `xml:"information-types,omitempty" json:"informationTypes,omitempty"` + InformationTypes []InformationType `xml:"information-types,omitempty" json:"informationTypes,omitempty"` } // Contains details about one information type that is stored, processed, or transmitted by the system, such as privacy information, and those defined in . @@ -100,9 +100,9 @@ type InformationType struct { // A description supporting the parent item. Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` // An identifier qualified by the given identification used, such as NIST SP 800-60. - InformationTypeId []InformationTypeId `xml:"information-type-ids,omitempty" json:"informationTypeIds,omitempty"` + InformationTypeIds []InformationTypeId `xml:"information-type-ids,omitempty" json:"informationTypeIds,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // The expected level of impact resulting from the unauthorized disclosure of information. ConfidentialityImpact *ConfidentialityImpact `xml:"confidentiality-impact,omitempty" json:"confidentialityImpact,omitempty"` // The expected level of impact resulting from the unauthorized modification of information. @@ -115,7 +115,7 @@ type InformationType struct { type ConfidentialityImpact struct { // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // The prescribed base (Confidentiality, Integrity, or Availability) security impact level. Base Base `xml:"base,omitempty" json:"base,omitempty"` // The selected (Confidentiality, Integrity, or Availability) security impact level. @@ -128,7 +128,7 @@ type ConfidentialityImpact struct { type IntegrityImpact struct { // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // The prescribed base (Confidentiality, Integrity, or Availability) security impact level. Base Base `xml:"base,omitempty" json:"base,omitempty"` // The selected (Confidentiality, Integrity, or Availability) security impact level. @@ -141,7 +141,7 @@ type IntegrityImpact struct { type AvailabilityImpact struct { // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // The prescribed base (Confidentiality, Integrity, or Availability) security impact level. Base Base `xml:"base,omitempty" json:"base,omitempty"` // The selected (Confidentiality, Integrity, or Availability) security impact level. @@ -180,9 +180,9 @@ type LeveragedAuthorization struct { Name string `xml:"name,attr,omitempty" json:"name,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // A reference to the party that manages the leveraged system. PartyId validation_root.PartyId `xml:"party-id,omitempty" json:"partyId,omitempty"` // The date this system received its authorization. @@ -190,7 +190,7 @@ type LeveragedAuthorization struct { // Additional commentary on the parent item. Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` } // A description of this system's authorization boundary, optionally supplemented by diagrams that illustrate the authorization boundary. @@ -199,15 +199,15 @@ type AuthorizationBoundary struct { // A description supporting the parent item. Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // Commentary about the system's authorization boundary that enhances the diagram. Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A visual depiction of the system's authorization boundary. - Diagram []Diagram `xml:"diagrams,omitempty" json:"diagrams,omitempty"` + Diagrams []Diagram `xml:"diagrams,omitempty" json:"diagrams,omitempty"` } // A graphic that provides a visual representation the system, or some aspect of it. @@ -219,9 +219,9 @@ type Diagram struct { // A description of the diagram (e.g., alternate text). This can be used to support compliance with requirements from Section 508 of the United States Workforce Rehabilitation Act of 1973. Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // A brief caption to annotate the diagram. Caption Caption `xml:"caption,omitempty" json:"caption,omitempty"` // Commentary about the diagram that enhances it. @@ -234,15 +234,15 @@ type NetworkArchitecture struct { // A description supporting the parent item. Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A graphic that provides a visual representation the system, or some aspect of it. - Diagram []Diagram `xml:"diagrams,omitempty" json:"diagrams,omitempty"` + Diagrams []Diagram `xml:"diagrams,omitempty" json:"diagrams,omitempty"` } // A description of the logical flow of information within the system and across its boundaries, optionally supplemented by diagrams that illustrate these flows. @@ -251,36 +251,36 @@ type DataFlow struct { // A description supporting the parent item. Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A graphic that provides a visual representation the system, or some aspect of it. - Diagram []Diagram `xml:"diagrams,omitempty" json:"diagrams,omitempty"` + Diagrams []Diagram `xml:"diagrams,omitempty" json:"diagrams,omitempty"` } // Provides information as to how the system is implemented. type SystemImplementation struct { // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A type of user that interacts with the system based on an associated role. - User []User `xml:"users,omitempty" json:"users,omitempty"` + Users []User `xml:"users,omitempty" json:"users,omitempty"` // A defined component that can be part of an implemented system. - Component []Component `xml:"components,omitempty" json:"components,omitempty"` + Components []Component `xml:"components,omitempty" json:"components,omitempty"` // A collection of the ports, protocols, and services used within the system. - Service []Service `xml:"services,omitempty" json:"services,omitempty"` + Services []Service `xml:"services,omitempty" json:"services,omitempty"` // Details on an individual system interconnection. - Interconnection []Interconnection `xml:"ssp-interconnection,omitempty" json:"sspInterconnection,omitempty"` + SspInterconnection []Interconnection `xml:"ssp-interconnection,omitempty" json:"sspInterconnection,omitempty"` // A set of entries that represent the managed inventory instances of the system. SystemInventory *SystemInventory `xml:"system-inventory,omitempty" json:"systemInventory,omitempty"` } @@ -298,17 +298,17 @@ type User struct { // A description supporting the parent item. Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // A reference to the roles served by the user. - RoleId []RoleId `xml:"role-ids,omitempty" json:"roleIds,omitempty"` + RoleIds []RoleId `xml:"role-ids,omitempty" json:"roleIds,omitempty"` // Additional commentary on the parent item. Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // Identifies a specific system privilege held by the user, along with an associated description and/or rationale for the privilege. - AuthorizedPrivilege []AuthorizedPrivilege `xml:"authorized-privileges,omitempty" json:"authorizedPrivileges,omitempty"` + AuthorizedPrivileges []AuthorizedPrivilege `xml:"authorized-privileges,omitempty" json:"authorizedPrivileges,omitempty"` } // Identifies a specific system privilege held by the user, along with an associated description and/or rationale for the privilege. @@ -320,7 +320,7 @@ type AuthorizedPrivilege struct { // A description supporting the parent item. Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` // Describes a function performed for a given authorized privilege by this user class. - FunctionPerformed []FunctionPerformed `xml:"functions-performed,omitempty" json:"functionsPerformed,omitempty"` + FunctionsPerformed []FunctionPerformed `xml:"functions-performed,omitempty" json:"functionsPerformed,omitempty"` } // A defined component that can be part of an implemented system. @@ -336,17 +336,17 @@ type Component struct { // A description of the component, including information about its function. Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // Describes the operational status of the system. Status *Status `xml:"status,omitempty" json:"status,omitempty"` // Defines a role that has responsibility for the component. - ResponsibleRole []ResponsibleRole `xml:"responsible-roles,omitempty" json:"responsibleRoles,omitempty"` + ResponsibleRoles []ResponsibleRole `xml:"responsible-roles,omitempty" json:"responsibleRoles,omitempty"` } // Information about an individual service within the system. @@ -360,17 +360,17 @@ type Service struct { // A description of what the service provides. Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // A summary of the technological or business purpose of the service. Purpose Purpose `xml:"purpose,omitempty" json:"purpose,omitempty"` // Additional commentary on the parent item. Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // Information about the protocol used to provide a service. - Protocol []Protocol `xml:"ssp-protocol,omitempty" json:"sspProtocol,omitempty"` + SspProtocol []Protocol `xml:"ssp-protocol,omitempty" json:"sspProtocol,omitempty"` } // Information about the protocol used to provide a service. @@ -380,7 +380,7 @@ type Protocol struct { Name string `xml:"name,attr,omitempty" json:"name,omitempty"` // Where applicable this is the IPv4 port range on which the service operates. - PortRange []PortRange `xml:"port-ranges,omitempty" json:"portRanges,omitempty"` + PortRanges []PortRange `xml:"port-ranges,omitempty" json:"portRanges,omitempty"` } // Details on an individual system interconnection. @@ -392,15 +392,15 @@ type Interconnection struct { // The name of the remote interconnected system. RemoteSystemName RemoteSystemName `xml:"remote-system-name,omitempty" json:"remoteSystemName,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. - ResponsibleParty []validation_root.ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` + ResponsibleParties []validation_root.ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` } // A set of entries that represent the managed inventory instances of the system. @@ -409,7 +409,7 @@ type SystemInventory struct { // Additional commentary on the parent item. Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A single managed inventory item within the system. - InventoryItem []InventoryItem `xml:"inventory-items,omitempty" json:"inventoryItems,omitempty"` + InventoryItems []InventoryItem `xml:"inventory-items,omitempty" json:"inventoryItems,omitempty"` } // A single managed inventory item within the system. @@ -423,17 +423,17 @@ type InventoryItem struct { // A description supporting the parent item. Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. - ResponsibleParty []validation_root.ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` + ResponsibleParties []validation_root.ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` // The set of componenets that are implemented in a given system inventory item. - ImplementedComponent []ImplementedComponent `xml:"implemented-components,omitempty" json:"implementedComponents,omitempty"` + ImplementedComponents []ImplementedComponent `xml:"implemented-components,omitempty" json:"implementedComponents,omitempty"` } // The set of componenets that are implemented in a given system inventory item. @@ -445,15 +445,15 @@ type ImplementedComponent struct { Use string `xml:"use,attr,omitempty" json:"use,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. - ResponsibleParty []validation_root.ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` + ResponsibleParties []validation_root.ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` } // Describes how the system satisfies a set of controls. @@ -462,7 +462,7 @@ type ControlImplementation struct { // A description supporting the parent item. Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` // Describes how the system satisfies an individual control. - ImplementedRequirement []ImplementedRequirement `xml:"implemented-requirements,omitempty" json:"implementedRequirements,omitempty"` + ImplementedRequirements []ImplementedRequirement `xml:"implemented-requirements,omitempty" json:"implementedRequirements,omitempty"` } // Describes how the system satisfies an individual control. @@ -476,21 +476,21 @@ type ImplementedRequirement struct { // A description supporting the parent item. Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // Defines how the referenced component implements a set of controls. - ByComponent []ByComponent `xml:"by-components,omitempty" json:"byComponents,omitempty"` + ByComponents []ByComponent `xml:"by-components,omitempty" json:"byComponents,omitempty"` // A reference to one or more roles with responsibility for performing a function relative to the control. - ResponsibleRole []ResponsibleRole `xml:"responsible-roles,omitempty" json:"responsibleRoles,omitempty"` + ResponsibleRoles []ResponsibleRole `xml:"responsible-roles,omitempty" json:"responsibleRoles,omitempty"` // Identifies the parameter that will be filled in by the enclosed value element. - SetParam []SetParam `xml:"set-params,omitempty" json:"setParams,omitempty"` + SetParams []SetParam `xml:"set-params,omitempty" json:"setParams,omitempty"` // Identifies which statements within a control are addressed. - Statement []Statement `xml:"statements,omitempty" json:"statements,omitempty"` + Statements []Statement `xml:"statements,omitempty" json:"statements,omitempty"` } // Identifies which statements within a control are addressed. @@ -502,15 +502,15 @@ type Statement struct { // A description supporting the parent item. Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A reference to one or more roles with responsibility for performing a function relative to the control. - ResponsibleRole []ResponsibleRole `xml:"responsible-roles,omitempty" json:"responsibleRoles,omitempty"` + ResponsibleRoles []ResponsibleRole `xml:"responsible-roles,omitempty" json:"responsibleRoles,omitempty"` // Defines how the referenced component implements a set of controls. - ByComponent []ByComponent `xml:"by-components,omitempty" json:"byComponents,omitempty"` + ByComponents []ByComponent `xml:"by-components,omitempty" json:"byComponents,omitempty"` } // A reference to one or more roles with responsibility for performing a function relative to the control. @@ -520,15 +520,15 @@ type ResponsibleRole struct { RoleId string `xml:"role-id,attr,omitempty" json:"roleId,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // References a defined in . - PartyId []validation_root.PartyId `xml:"party-ids,omitempty" json:"partyIds,omitempty"` + PartyIds []validation_root.PartyId `xml:"party-ids,omitempty" json:"partyIds,omitempty"` // Additional commentary on the parent item. Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` } // Defines how the referenced component implements a set of controls. @@ -540,15 +540,15 @@ type ByComponent struct { // A description supporting the parent item. Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A reference to one or more roles with responsibility for performing a function relative to the control. - ResponsibleRole []ResponsibleRole `xml:"responsible-roles,omitempty" json:"responsibleRoles,omitempty"` + ResponsibleRoles []ResponsibleRole `xml:"responsible-roles,omitempty" json:"responsibleRoles,omitempty"` // Identifies the parameter that will be filled in by the enclosed value element. - SetParam []SetParam `xml:"set-params,omitempty" json:"setParams,omitempty"` + SetParams []SetParam `xml:"set-params,omitempty" json:"setParams,omitempty"` } // Identifies the parameter that will be filled in by the enclosed value element. diff --git a/types/oscal/validation_root/validation_root.go b/types/oscal/validation_root/validation_root.go index 6358e630..a6d05d6f 100644 --- a/types/oscal/validation_root/validation_root.go +++ b/types/oscal/validation_root/validation_root.go @@ -19,7 +19,7 @@ type VALIDATIONRoot struct { // A name/value pair with optional explanatory remarks. Annotation *Annotation `xml:"annotation,omitempty" json:"annotation,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. - ResponsibleParty []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` + ResponsibleParties []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` } // Provides information about the publication and availability of the containing document. @@ -36,28 +36,28 @@ type Metadata struct { // OSCAL model version. OscalVersion OscalVersion `xml:"oscal-version,omitempty" json:"oscalVersion,omitempty"` // A document identifier qualified by an identifier . - DocId []DocId `xml:"document-ids,omitempty" json:"documentIds,omitempty"` + DocumentIds []DocId `xml:"document-ids,omitempty" json:"documentIds,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // Defining a role to be assigned to a party - Role []Role `xml:"roles,omitempty" json:"roles,omitempty"` + Roles []Role `xml:"roles,omitempty" json:"roles,omitempty"` // A responsible entity, either singular (an organization or person) or collective (multiple persons) - Party []Party `xml:"parties,omitempty" json:"parties,omitempty"` + Parties []Party `xml:"parties,omitempty" json:"parties,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. - ResponsibleParty []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` + ResponsibleParties []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` } // A collection of citations and resource references. type BackMatter struct { // A citation to resources, either external or internal (by means of internal cross-reference). - Citation []Citation `xml:"citations,omitempty" json:"citations,omitempty"` + Citations []Citation `xml:"citations,omitempty" json:"citations,omitempty"` // A resource associated with the present document. - Resource []Resource `xml:"resources,omitempty" json:"resources,omitempty"` + Resources []Resource `xml:"resources,omitempty" json:"resources,omitempty"` } // A name/value pair with optional explanatory remarks. @@ -83,17 +83,17 @@ type Party struct { Id string `xml:"id,attr,omitempty" json:"id,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A person, with contact information - Person []Person `xml:"persons,omitempty" json:"persons,omitempty"` + Persons []Person `xml:"persons,omitempty" json:"persons,omitempty"` // An organization or legal entity (not a person), with contact information Org *Org `xml:"org,omitempty" json:"org,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` } // A person, with contact information @@ -106,25 +106,25 @@ type Person struct { // Affiliated organization OrgName OrgName `xml:"org-name,omitempty" json:"orgName,omitempty"` // An identifier for a person (such as an ORCID) using a designated scheme. - PersonId []PersonId `xml:"person-ids,omitempty" json:"personIds,omitempty"` + PersonIds []PersonId `xml:"person-ids,omitempty" json:"personIds,omitempty"` // An identifier for an organization using a designated scheme. - OrgId []OrgId `xml:"organization-ids,omitempty" json:"organizationIds,omitempty"` + OrganizationIds []OrgId `xml:"organization-ids,omitempty" json:"organizationIds,omitempty"` // Email address - Email []Email `xml:"email-addresses,omitempty" json:"emailAddresses,omitempty"` + EmailAddresses []Email `xml:"email-addresses,omitempty" json:"emailAddresses,omitempty"` // Contact number by telephone - Phone []Phone `xml:"telephone-numbers,omitempty" json:"telephoneNumbers,omitempty"` + TelephoneNumbers []Phone `xml:"telephone-numbers,omitempty" json:"telephoneNumbers,omitempty"` // URL for web site or Internet presence - Url []Url `xml:"URLs,omitempty" json:"uRLs,omitempty"` + URLs []Url `xml:"URLs,omitempty" json:"uRLs,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A postal address. - Address []Address `xml:"addresses,omitempty" json:"addresses,omitempty"` + Addresses []Address `xml:"addresses,omitempty" json:"addresses,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` } // An organization or legal entity (not a person), with contact information @@ -135,23 +135,23 @@ type Org struct { // A common name, short name or acronym ShortName ShortName `xml:"short-name,omitempty" json:"shortName,omitempty"` // An identifier for an organization using a designated scheme. - OrgId []OrgId `xml:"organization-ids,omitempty" json:"organizationIds,omitempty"` + OrganizationIds []OrgId `xml:"organization-ids,omitempty" json:"organizationIds,omitempty"` // Email address - Email []Email `xml:"email-addresses,omitempty" json:"emailAddresses,omitempty"` + EmailAddresses []Email `xml:"email-addresses,omitempty" json:"emailAddresses,omitempty"` // Contact number by telephone - Phone []Phone `xml:"telephone-numbers,omitempty" json:"telephoneNumbers,omitempty"` + TelephoneNumbers []Phone `xml:"telephone-numbers,omitempty" json:"telephoneNumbers,omitempty"` // URL for web site or Internet presence - Url []Url `xml:"URLs,omitempty" json:"uRLs,omitempty"` + URLs []Url `xml:"URLs,omitempty" json:"uRLs,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A postal address. - Address []Address `xml:"addresses,omitempty" json:"addresses,omitempty"` + Addresses []Address `xml:"addresses,omitempty" json:"addresses,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` } // A pointer to an external copy of a document with optional hash for verification @@ -163,7 +163,7 @@ type Rlink struct { MediaType string `xml:"media-type,attr,omitempty" json:"mediaType,omitempty"` // A representation of a cryptographic digest generated over a resource using a hash algorithm. - Hash []Hash `xml:"hashes,omitempty" json:"hashes,omitempty"` + Hashes []Hash `xml:"hashes,omitempty" json:"hashes,omitempty"` } // A postal address. @@ -173,7 +173,7 @@ type Address struct { Type string `xml:"type,attr,omitempty" json:"type,omitempty"` // A single line of an address. - AddrLine []AddrLine `xml:"postal-address,omitempty" json:"postalAddress,omitempty"` + PostalAddress []AddrLine `xml:"postal-address,omitempty" json:"postalAddress,omitempty"` // City, town or geographical region for mailing address City City `xml:"city,omitempty" json:"city,omitempty"` // State, province or analogous geographical region for mailing address @@ -193,13 +193,13 @@ type Resource struct { // A short textual description Desc Desc `xml:"desc,omitempty" json:"desc,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // Base64 *Base64 `xml:"base64,omitempty" json:"base64,omitempty"` // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A pointer to an external copy of a document with optional hash for verification - Rlink []Rlink `xml:"rlinks,omitempty" json:"rlinks,omitempty"` + Rlinks []Rlink `xml:"rlinks,omitempty" json:"rlinks,omitempty"` } // Defining a role to be assigned to a party @@ -215,13 +215,13 @@ type Role struct { // A short textual description Desc Desc `xml:"desc,omitempty" json:"desc,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` } // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. @@ -231,15 +231,15 @@ type ResponsibleParty struct { RoleId string `xml:"role-id,attr,omitempty" json:"roleId,omitempty"` // References a defined in . - PartyId []PartyId `xml:"party-ids,omitempty" json:"partyIds,omitempty"` + PartyIds []PartyId `xml:"party-ids,omitempty" json:"partyIds,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Link []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotation []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` } // A citation to resources, either external or internal (by means of internal cross-reference). @@ -249,15 +249,15 @@ type Citation struct { Id string `xml:"id,attr,omitempty" json:"id,omitempty"` // An address for retrieval of a citation - Target []Target `xml:"targets,omitempty" json:"targets,omitempty"` + Targets []Target `xml:"targets,omitempty" json:"targets,omitempty"` // A title for display and navigation Title Title `xml:"title,omitempty" json:"title,omitempty"` // A short textual description Desc Desc `xml:"desc,omitempty" json:"desc,omitempty"` // A document identifier qualified by an identifier . - DocId []DocId `xml:"document-ids,omitempty" json:"documentIds,omitempty"` + DocumentIds []DocId `xml:"document-ids,omitempty" json:"documentIds,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Prop []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` } // A reference to a local or remote resource From 86fffa41a10245110886b22fd62358c0a5251079 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Fri, 20 Dec 2019 13:51:23 +0100 Subject: [PATCH 048/110] Refactor: Extract method: linkAssemblies --- metaschema/metaschema.go | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index b06dbdf9..fd2b4caa 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -67,6 +67,21 @@ type Metaschema struct { ImportedMetaschema []Metaschema } +func (metaschema *Metaschema) linkAssemblies(list []Assembly) error { + var err error + for i, a := range list { + if a.Ref != "" { + a.Def, err = metaschema.GetDefineAssembly(a.Ref) + if err != nil { + return err + } + a.Metaschema = metaschema + list[i] = a + } + } + return nil +} + func (metaschema *Metaschema) LinkDefinitions() error { var err error for _, da := range metaschema.DefineAssembly { @@ -80,15 +95,8 @@ func (metaschema *Metaschema) LinkDefinitions() error { da.Flags[i] = f } } - for i, a := range da.Model.Assembly { - if a.Ref != "" { - a.Def, err = metaschema.GetDefineAssembly(a.Ref) - if err != nil { - return err - } - a.Metaschema = metaschema - da.Model.Assembly[i] = a - } + if err = metaschema.linkAssemblies(da.Model.Assembly); err != nil { + return err } for i, f := range da.Model.Field { if f.Ref != "" { @@ -101,15 +109,8 @@ func (metaschema *Metaschema) LinkDefinitions() error { } } for _, c := range da.Model.Choice { - for i, a := range c.Assembly { - if a.Ref != "" { - a.Def, err = metaschema.GetDefineAssembly(a.Ref) - if err != nil { - return err - } - a.Metaschema = metaschema - c.Assembly[i] = a - } + if err = metaschema.linkAssemblies(c.Assembly); err != nil { + return err } for i, f := range c.Field { if f.Ref != "" { From efe2a9cb5d31daf395c97026e259b3956681e073 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Fri, 20 Dec 2019 13:54:03 +0100 Subject: [PATCH 049/110] Refactor: Extract method: linkFields --- metaschema/metaschema.go | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index fd2b4caa..6e49fafe 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -82,6 +82,21 @@ func (metaschema *Metaschema) linkAssemblies(list []Assembly) error { return nil } +func (metaschema *Metaschema) linkFields(list []Field) error { + var err error + for i, f := range list { + if f.Ref != "" { + f.Def, err = metaschema.GetDefineField(f.Ref) + if err != nil { + return err + } + f.Metaschema = metaschema + list[i] = f + } + } + return nil +} + func (metaschema *Metaschema) LinkDefinitions() error { var err error for _, da := range metaschema.DefineAssembly { @@ -98,31 +113,16 @@ func (metaschema *Metaschema) LinkDefinitions() error { if err = metaschema.linkAssemblies(da.Model.Assembly); err != nil { return err } - for i, f := range da.Model.Field { - if f.Ref != "" { - f.Def, err = metaschema.GetDefineField(f.Ref) - if err != nil { - return err - } - f.Metaschema = metaschema - da.Model.Field[i] = f - } + if err = metaschema.linkFields(da.Model.Field); err != nil { + return err } for _, c := range da.Model.Choice { if err = metaschema.linkAssemblies(c.Assembly); err != nil { return err } - for i, f := range c.Field { - if f.Ref != "" { - f.Def, err = metaschema.GetDefineField(f.Ref) - if err != nil { - return err - } - f.Metaschema = metaschema - c.Field[i] = f - } + if err = metaschema.linkFields(c.Field); err != nil { + return err } - } } From f871cf9bea076403484ab21662654934f82276c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Fri, 20 Dec 2019 13:57:29 +0100 Subject: [PATCH 050/110] Refactor: Extract method: linkFlags --- metaschema/metaschema.go | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 6e49fafe..339d1fd7 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -97,18 +97,26 @@ func (metaschema *Metaschema) linkFields(list []Field) error { return nil } +func (metaschema *Metaschema) linkFlags(list []Flag) error { + var err error + for i, f := range list { + if f.Ref != "" { + f.Def, err = metaschema.GetDefineFlag(f.Ref) + if err != nil { + return err + } + f.Metaschema = metaschema + list[i] = f + } + } + return nil +} + func (metaschema *Metaschema) LinkDefinitions() error { var err error for _, da := range metaschema.DefineAssembly { - for i, f := range da.Flags { - if f.Ref != "" { - f.Def, err = metaschema.GetDefineFlag(f.Ref) - if err != nil { - return err - } - f.Metaschema = metaschema - da.Flags[i] = f - } + if err = metaschema.linkFlags(da.Flags); err != nil { + return err } if err = metaschema.linkAssemblies(da.Model.Assembly); err != nil { return err @@ -127,14 +135,8 @@ func (metaschema *Metaschema) LinkDefinitions() error { } for _, df := range metaschema.DefineField { - for i, f := range df.Flags { - if f.Ref != "" { - f.Def, err = metaschema.GetDefineFlag(f.Ref) - if err != nil { - return err - } - df.Flags[i] = f - } + if err = metaschema.linkFlags(df.Flags); err != nil { + return err } } return nil From 63e02e1603eaec81b9e07cecbda9a8508e0a2f6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 23 Dec 2019 19:56:49 +0100 Subject: [PATCH 051/110] Import types to catalog, profile, and SSP files That way users do not need to remember where a particular item is defined and users do not need to import nominal_catalog package and validation_root package, hence these become internal implementation detail. --- metaschema/metaschema.go | 49 +++- metaschema/types.tmpl | 12 +- types/oscal/catalog/catalog.go | 40 +++- .../oscal/nominal_catalog/nominal_catalog.go | 14 +- types/oscal/profile/profile.go | 66 ++++-- .../system_security_plan.go | 222 ++++++++++-------- 6 files changed, 261 insertions(+), 142 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 339d1fd7..13273f6b 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -35,6 +35,11 @@ var ShowDocsOptions = []ShowDocs{ ShowDocsXMLJSON, } +type GoType interface { + GoName() string + GetMetaschema() *Metaschema +} + // Metaschema is the root metaschema element type Metaschema struct { XMLName xml.Name `xml:"http://csrc.nist.gov/ns/oscal/metaschema/1.0 METASCHEMA"` @@ -65,6 +70,18 @@ type Metaschema struct { DefineFlag []DefineFlag `xml:"define-flag"` ImportedMetaschema []Metaschema + Dependencies map[string]GoType +} + +func (metaschema *Metaschema) registerDependency(name string, dependency GoType) { + if dependency.GetMetaschema() != metaschema { + if metaschema.Dependencies == nil { + metaschema.Dependencies = make(map[string]GoType) + } + if _, ok := metaschema.Dependencies[name]; !ok { + metaschema.Dependencies[name] = dependency + } + } } func (metaschema *Metaschema) linkAssemblies(list []Assembly) error { @@ -76,6 +93,7 @@ func (metaschema *Metaschema) linkAssemblies(list []Assembly) error { return err } a.Metaschema = metaschema + metaschema.registerDependency(a.Ref, a.Def) list[i] = a } } @@ -91,6 +109,7 @@ func (metaschema *Metaschema) linkFields(list []Field) error { return err } f.Metaschema = metaschema + metaschema.registerDependency(f.Ref, f.Def) list[i] = f } } @@ -226,6 +245,10 @@ type DefineAssembly struct { Metaschema *Metaschema } +func (da *DefineAssembly) GoName() string { + return strcase.ToCamel(da.Name) +} + func (da *DefineAssembly) RepresentsRootElement() bool { return da.Name == "catalog" || da.Name == "profile" || da.Name == "declarations" } @@ -234,6 +257,10 @@ func (a *DefineAssembly) GoComment() string { return handleMultiline(a.Description) } +func (a *DefineAssembly) GetMetaschema() *Metaschema { + return a.Metaschema +} + type DefineField struct { Name string `xml:"name,attr"` GroupAs string `xml:"group-as,attr"` @@ -248,6 +275,10 @@ type DefineField struct { Metaschema *Metaschema } +func (df *DefineField) GoName() string { + return strcase.ToCamel(df.Name) +} + func (df *DefineField) RequiresPointer() bool { return len(df.Flags) > 0 } @@ -256,6 +287,10 @@ func (f *DefineField) GoComment() string { return handleMultiline(f.Description) } +func (df *DefineField) GetMetaschema() *Metaschema { + return df.Metaschema +} + type DefineFlag struct { Name string `xml:"name,attr"` AsType datatype `xml:"as-type,attr"` @@ -268,6 +303,14 @@ type DefineFlag struct { Metaschema *Metaschema } +func (df *DefineFlag) GoName() string { + return strcase.ToCamel(df.Name) +} + +func (df *DefineFlag) GetMetaschema() *Metaschema { + return df.Metaschema +} + type Model struct { Assembly []Assembly `xml:"assembly"` Field []Field `xml:"field"` @@ -298,7 +341,7 @@ func (a *Assembly) GoName() string { if a.Named != "" { return strcase.ToCamel(a.Named) } - return strcase.ToCamel(a.Def.Name) + return a.Def.GoName() } func (a *Assembly) GoMemLayout() string { @@ -355,7 +398,7 @@ func (f *Field) GoName() string { if f.Named != "" { return strcase.ToCamel(f.Named) } - return strcase.ToCamel(f.Def.Name) + return f.Def.GoName() } func (f *Field) GoPackageName() string { @@ -427,7 +470,7 @@ func (f *Flag) GoName() string { if f.Name != "" { return strcase.ToCamel(f.Name) } - return strcase.ToCamel(f.Def.Name) + return f.Def.GoName() } func (f *Flag) XmlName() string { diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index d736694c..e81d21b6 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -26,23 +26,23 @@ type {{toCamel .Name}} struct { {{if .Model}} {{ range .Model.Field}} // {{ .GoComment }} - {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoPackageName}}{{.GoName}} `xml:"{{ .XmlName }},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{ .XmlName }},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{- end}} {{- range .Model.Assembly}} // {{ .GoComment }} - {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoPackageName}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{- end}} {{- range .Model.Choice}} {{- range .Field}} // {{ .GoComment }} - {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoPackageName}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{- end}} {{- range .Assembly}} // {{ .GoComment }} - {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoPackageName}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{- end}} {{- end}} @@ -75,3 +75,7 @@ type {{toCamel .Name}} struct { type {{toCamel .Name}} string {{end -}} {{end}} + +{{ range .Dependencies }} +type {{.GoName}} = {{ .GetMetaschema.GoPackageName }}.{{.GoName}} +{{end }} \ No newline at end of file diff --git a/types/oscal/catalog/catalog.go b/types/oscal/catalog/catalog.go index 35a076b5..3d9ee99c 100644 --- a/types/oscal/catalog/catalog.go +++ b/types/oscal/catalog/catalog.go @@ -16,9 +16,9 @@ type Catalog struct { Id string `xml:"id,attr,omitempty" json:"id,omitempty"` // Provides information about the publication and availability of the containing document. - Metadata *validation_root.Metadata `xml:"metadata,omitempty" json:"metadata,omitempty"` + Metadata *Metadata `xml:"metadata,omitempty" json:"metadata,omitempty"` // Back matter including references and resources. - BackMatter *validation_root.BackMatter `xml:"back-matter,omitempty" json:"backMatter,omitempty"` + BackMatter *BackMatter `xml:"back-matter,omitempty" json:"backMatter,omitempty"` // A group of controls, or of groups of controls. Groups []Group `xml:"groups,omitempty" json:"groups,omitempty"` // A structured information object representing a security or privacy control. Each security or privacy control within the Catalog is defined by a distinct control instance. @@ -34,13 +34,13 @@ type Group struct { Class string `xml:"class,attr,omitempty" json:"class,omitempty"` // A title for display and navigation - Title validation_root.Title `xml:"title,omitempty" json:"title,omitempty"` + Title Title `xml:"title,omitempty" json:"title,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // Parameters provide a mechanism for the dynamic assignment of value(s) in a control. - Parameters []nominal_catalog.Param `xml:"parameters,omitempty" json:"parameters,omitempty"` + Parameters []Param `xml:"parameters,omitempty" json:"parameters,omitempty"` // A partition or component of a control or part - Parts []nominal_catalog.Part `xml:"parts,omitempty" json:"parts,omitempty"` + Parts []Part `xml:"parts,omitempty" json:"parts,omitempty"` // A group of controls, or of groups of controls. Groups []Group `xml:"groups,omitempty" json:"groups,omitempty"` // A structured information object representing a security or privacy control. Each security or privacy control within the Catalog is defined by a distinct control instance. @@ -56,17 +56,33 @@ type Control struct { Class string `xml:"class,attr,omitempty" json:"class,omitempty"` // A title for display and navigation - Title validation_root.Title `xml:"title,omitempty" json:"title,omitempty"` + Title Title `xml:"title,omitempty" json:"title,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Parameters provide a mechanism for the dynamic assignment of value(s) in a control. - Parameters []nominal_catalog.Param `xml:"parameters,omitempty" json:"parameters,omitempty"` + Parameters []Param `xml:"parameters,omitempty" json:"parameters,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A partition or component of a control or part - Parts []nominal_catalog.Part `xml:"parts,omitempty" json:"parts,omitempty"` + Parts []Part `xml:"parts,omitempty" json:"parts,omitempty"` // A structured information object representing a security or privacy control. Each security or privacy control within the Catalog is defined by a distinct control instance. Controls []Control `xml:"controls,omitempty" json:"controls,omitempty"` } + +type Annotation = validation_root.Annotation + +type BackMatter = validation_root.BackMatter + +type Link = validation_root.Link + +type Metadata = validation_root.Metadata + +type Param = nominal_catalog.Param + +type Part = nominal_catalog.Part + +type Prop = validation_root.Prop + +type Title = validation_root.Title diff --git a/types/oscal/nominal_catalog/nominal_catalog.go b/types/oscal/nominal_catalog/nominal_catalog.go index e5d3c8b0..f4460a46 100644 --- a/types/oscal/nominal_catalog/nominal_catalog.go +++ b/types/oscal/nominal_catalog/nominal_catalog.go @@ -31,7 +31,7 @@ type Param struct { // A formal or informal expression of a constraint or test Constraints []Constraint `xml:"constraints,omitempty" json:"constraints,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // A prose statement that provides a recommendation for the use of a parameter. Guidance []Guideline `xml:"guidance,omitempty" json:"guidance,omitempty"` // A recommended parameter value or set of values. @@ -70,13 +70,13 @@ type Part struct { Class string `xml:"class,attr,omitempty" json:"class,omitempty"` // A title for display and navigation - Title validation_root.Title `xml:"title,omitempty" json:"title,omitempty"` + Title Title `xml:"title,omitempty" json:"title,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // Prose permits multiple paragraphs, lists, tables etc. Prose Prose `xml:"prose,omitempty" json:"prose,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // A partition or component of a control or part Parts []Part `xml:"parts,omitempty" json:"parts,omitempty"` } @@ -110,3 +110,9 @@ type Choice string // Prose permits multiple paragraphs, lists, tables etc. type Prose string + +type Link = validation_root.Link + +type Prop = validation_root.Prop + +type Title = validation_root.Title diff --git a/types/oscal/profile/profile.go b/types/oscal/profile/profile.go index 3366b8e3..c248fec8 100644 --- a/types/oscal/profile/profile.go +++ b/types/oscal/profile/profile.go @@ -18,7 +18,7 @@ type Profile struct { Id string `xml:"id,attr,omitempty" json:"id,omitempty"` // Provides information about the publication and availability of the containing document. - Metadata *validation_root.Metadata `xml:"metadata,omitempty" json:"metadata,omitempty"` + Metadata *Metadata `xml:"metadata,omitempty" json:"metadata,omitempty"` // An Import element designates a catalog, profile, or other resource to be // included (referenced and potentially modified) by this profile. Imports []Import `xml:"imports,omitempty" json:"imports,omitempty"` @@ -27,7 +27,7 @@ type Profile struct { // Set parameters or amend controls in resolution Modify *Modify `xml:"modify,omitempty" json:"modify,omitempty"` // A collection of citations and resource references. - BackMatter *validation_root.BackMatter `xml:"back-matter,omitempty" json:"backMatter,omitempty"` + BackMatter *BackMatter `xml:"back-matter,omitempty" json:"backMatter,omitempty"` } // An Import element designates a catalog, profile, or other resource to be @@ -78,13 +78,13 @@ type Group struct { Class string `xml:"class,attr,omitempty" json:"class,omitempty"` // A title for display and navigation - Title validation_root.Title `xml:"title,omitempty" json:"title,omitempty"` + Title Title `xml:"title,omitempty" json:"title,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // Parameters provide a mechanism for the dynamic assignment of value(s) in a control. - Parameters []nominal_catalog.Param `xml:"parameters,omitempty" json:"parameters,omitempty"` + Parameters []Param `xml:"parameters,omitempty" json:"parameters,omitempty"` // A partition or component of a control or part - Parts []nominal_catalog.Part `xml:"parts,omitempty" json:"parts,omitempty"` + Parts []Part `xml:"parts,omitempty" json:"parts,omitempty"` // Call a control by its ID IdSelectors []Call `xml:"id-selectors,omitempty" json:"idSelectors,omitempty"` // Select controls by (regular expression) match on ID @@ -135,19 +135,19 @@ type Set struct { DependsOn string `xml:"depends-on,attr,omitempty" json:"dependsOn,omitempty"` // A placeholder for a missing value, in display. - Label nominal_catalog.Label `xml:"label,omitempty" json:"label,omitempty"` + Label Label `xml:"label,omitempty" json:"label,omitempty"` // Indicates and explains the purpose and use of a parameter - Descriptions []nominal_catalog.Usage `xml:"descriptions,omitempty" json:"descriptions,omitempty"` + Descriptions []Usage `xml:"descriptions,omitempty" json:"descriptions,omitempty"` // A formal or informal expression of a constraint or test - Constraints []nominal_catalog.Constraint `xml:"constraints,omitempty" json:"constraints,omitempty"` + Constraints []Constraint `xml:"constraints,omitempty" json:"constraints,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // A prose statement that provides a recommendation for the use of a parameter. - Guidance []nominal_catalog.Guideline `xml:"guidance,omitempty" json:"guidance,omitempty"` + Guidance []Guideline `xml:"guidance,omitempty" json:"guidance,omitempty"` // Indicates a permissible value for a parameter or property - Value nominal_catalog.Value `xml:"value,omitempty" json:"value,omitempty"` + Value Value `xml:"value,omitempty" json:"value,omitempty"` // Presenting a choice among alternatives - Select *nominal_catalog.Select `xml:"select,omitempty" json:"select,omitempty"` + Select *Select `xml:"select,omitempty" json:"select,omitempty"` } // An Alter element specifies changes to be made to an included control when a profile is resolved. @@ -171,17 +171,17 @@ type Add struct { IdRef string `xml:"id-ref,attr,omitempty" json:"idRef,omitempty"` // A title for display and navigation - Title validation_root.Title `xml:"title,omitempty" json:"title,omitempty"` + Title Title `xml:"title,omitempty" json:"title,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Parameters provide a mechanism for the dynamic assignment of value(s) in a control. - Parameters []nominal_catalog.Param `xml:"parameters,omitempty" json:"parameters,omitempty"` + Parameters []Param `xml:"parameters,omitempty" json:"parameters,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A partition or component of a control or part - Parts []nominal_catalog.Part `xml:"parts,omitempty" json:"parts,omitempty"` + Parts []Part `xml:"parts,omitempty" json:"parts,omitempty"` } // A Combine element defines whether and how to combine multiple (competing) @@ -242,3 +242,31 @@ type Remove struct { ItemName string `xml:"item-name,attr,omitempty" json:"itemName,omitempty"` Value string `xml:",chardata" json:"value,omitempty"` } + +type Annotation = validation_root.Annotation + +type BackMatter = validation_root.BackMatter + +type Constraint = nominal_catalog.Constraint + +type Guideline = nominal_catalog.Guideline + +type Label = nominal_catalog.Label + +type Link = validation_root.Link + +type Metadata = validation_root.Metadata + +type Param = nominal_catalog.Param + +type Part = nominal_catalog.Part + +type Prop = validation_root.Prop + +type Select = nominal_catalog.Select + +type Title = validation_root.Title + +type Usage = nominal_catalog.Usage + +type Value = nominal_catalog.Value diff --git a/types/oscal/system_security_plan/system_security_plan.go b/types/oscal/system_security_plan/system_security_plan.go index b2d0859f..9094d4a1 100644 --- a/types/oscal/system_security_plan/system_security_plan.go +++ b/types/oscal/system_security_plan/system_security_plan.go @@ -12,7 +12,7 @@ type SystemSecurityPlan struct { Id string `xml:"id,attr,omitempty" json:"id,omitempty"` // Provides information about the publication and availability of the containing document. - Metadata *validation_root.Metadata `xml:"metadata,omitempty" json:"metadata,omitempty"` + Metadata *Metadata `xml:"metadata,omitempty" json:"metadata,omitempty"` // Used to import the OSCAL profile representing the system's control baseline. ImportProfile *ImportProfile `xml:"import-profile,omitempty" json:"importProfile,omitempty"` // Contains the characteristics of the system, such as its name, purpose, and security impact level. @@ -22,7 +22,7 @@ type SystemSecurityPlan struct { // Describes how the system satisfies a set of controls. ControlImplementation *ControlImplementation `xml:"control-implementation,omitempty" json:"controlImplementation,omitempty"` // A collection of citations and resource references. - BackMatter *validation_root.BackMatter `xml:"back-matter,omitempty" json:"backMatter,omitempty"` + BackMatter *BackMatter `xml:"back-matter,omitempty" json:"backMatter,omitempty"` } // Used to import the OSCAL profile representing the system's control baseline. @@ -32,7 +32,7 @@ type ImportProfile struct { Href string `xml:"href,attr,omitempty" json:"href,omitempty"` // Additional commentary on the parent item. - Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` } // Contains the characteristics of the system, such as its name, purpose, and security impact level. @@ -45,19 +45,19 @@ type SystemCharacteristics struct { // A short name for the system, such as an acronym, that is suitable for display in a data table or summary list. SystemNameShort SystemNameShort `xml:"system-name-short,omitempty" json:"systemNameShort,omitempty"` // A free-text description of the system. - Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + Description Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // The date this system received its authorization. DateAuthorized DateAuthorized `xml:"date-authorized,omitempty" json:"dateAuthorized,omitempty"` // The overall information system sensitivity categorization, such as defined by . SecuritySensitivityLevel SecuritySensitivityLevel `xml:"security-sensitivity-level,omitempty" json:"securitySensitivityLevel,omitempty"` // Additional commentary on the parent item. - Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // Contains details about all information types that are stored, processed, or transmitted by the system, such as privacy information, and those defined in . SystemInformation *SystemInformation `xml:"system-information,omitempty" json:"systemInformation,omitempty"` // The overall level of expected impact resulting from unauthorized disclosure, modification, or loss of access to information. @@ -73,18 +73,18 @@ type SystemCharacteristics struct { // A description of the logical flow of information within the system and across its boundaries, optionally supplemented by diagrams that illustrate these flows. DataFlow *DataFlow `xml:"data-flow,omitempty" json:"dataFlow,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. - ResponsibleParties []validation_root.ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` + ResponsibleParties []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` } // Contains details about all information types that are stored, processed, or transmitted by the system, such as privacy information, and those defined in . type SystemInformation struct { // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // Contains details about one information type that is stored, processed, or transmitted by the system, such as privacy information, and those defined in . InformationTypes []InformationType `xml:"information-types,omitempty" json:"informationTypes,omitempty"` } @@ -98,11 +98,11 @@ type InformationType struct { Name string `xml:"name,attr,omitempty" json:"name,omitempty"` // A description supporting the parent item. - Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + Description Description `xml:"description,omitempty" json:"description,omitempty"` // An identifier qualified by the given identification used, such as NIST SP 800-60. InformationTypeIds []InformationTypeId `xml:"information-type-ids,omitempty" json:"informationTypeIds,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // The expected level of impact resulting from the unauthorized disclosure of information. ConfidentialityImpact *ConfidentialityImpact `xml:"confidentiality-impact,omitempty" json:"confidentialityImpact,omitempty"` // The expected level of impact resulting from the unauthorized modification of information. @@ -115,7 +115,7 @@ type InformationType struct { type ConfidentialityImpact struct { // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // The prescribed base (Confidentiality, Integrity, or Availability) security impact level. Base Base `xml:"base,omitempty" json:"base,omitempty"` // The selected (Confidentiality, Integrity, or Availability) security impact level. @@ -128,7 +128,7 @@ type ConfidentialityImpact struct { type IntegrityImpact struct { // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // The prescribed base (Confidentiality, Integrity, or Availability) security impact level. Base Base `xml:"base,omitempty" json:"base,omitempty"` // The selected (Confidentiality, Integrity, or Availability) security impact level. @@ -141,7 +141,7 @@ type IntegrityImpact struct { type AvailabilityImpact struct { // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // The prescribed base (Confidentiality, Integrity, or Availability) security impact level. Base Base `xml:"base,omitempty" json:"base,omitempty"` // The selected (Confidentiality, Integrity, or Availability) security impact level. @@ -168,7 +168,7 @@ type Status struct { State string `xml:"state,attr,omitempty" json:"state,omitempty"` // Additional commentary on the parent item. - Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` } // A description of another authorized system from which this system inherits capabilities that satisfy security requirements. Another term for this concept is a . @@ -180,32 +180,32 @@ type LeveragedAuthorization struct { Name string `xml:"name,attr,omitempty" json:"name,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // A reference to the party that manages the leveraged system. - PartyId validation_root.PartyId `xml:"party-id,omitempty" json:"partyId,omitempty"` + PartyId PartyId `xml:"party-id,omitempty" json:"partyId,omitempty"` // The date this system received its authorization. DateAuthorized DateAuthorized `xml:"date-authorized,omitempty" json:"dateAuthorized,omitempty"` // Additional commentary on the parent item. - Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` } // A description of this system's authorization boundary, optionally supplemented by diagrams that illustrate the authorization boundary. type AuthorizationBoundary struct { // A description supporting the parent item. - Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + Description Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Commentary about the system's authorization boundary that enhances the diagram. - Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A visual depiction of the system's authorization boundary. Diagrams []Diagram `xml:"diagrams,omitempty" json:"diagrams,omitempty"` } @@ -217,30 +217,30 @@ type Diagram struct { Id string `xml:"id,attr,omitempty" json:"id,omitempty"` // A description of the diagram (e.g., alternate text). This can be used to support compliance with requirements from Section 508 of the United States Workforce Rehabilitation Act of 1973. - Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + Description Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // A brief caption to annotate the diagram. Caption Caption `xml:"caption,omitempty" json:"caption,omitempty"` // Commentary about the diagram that enhances it. - Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` } // A description of the system's network architecture, optionally supplemented by diagrams that illustrate the network architecture. type NetworkArchitecture struct { // A description supporting the parent item. - Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + Description Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A graphic that provides a visual representation the system, or some aspect of it. Diagrams []Diagram `xml:"diagrams,omitempty" json:"diagrams,omitempty"` } @@ -249,15 +249,15 @@ type NetworkArchitecture struct { type DataFlow struct { // A description supporting the parent item. - Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + Description Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A graphic that provides a visual representation the system, or some aspect of it. Diagrams []Diagram `xml:"diagrams,omitempty" json:"diagrams,omitempty"` } @@ -266,13 +266,13 @@ type DataFlow struct { type SystemImplementation struct { // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A type of user that interacts with the system based on an associated role. Users []User `xml:"users,omitempty" json:"users,omitempty"` // A defined component that can be part of an implemented system. @@ -292,21 +292,21 @@ type User struct { Id string `xml:"id,attr,omitempty" json:"id,omitempty"` // A title for display and navigation - Title validation_root.Title `xml:"title,omitempty" json:"title,omitempty"` + Title Title `xml:"title,omitempty" json:"title,omitempty"` // A common name, short name or acronym - ShortName validation_root.ShortName `xml:"short-name,omitempty" json:"shortName,omitempty"` + ShortName ShortName `xml:"short-name,omitempty" json:"shortName,omitempty"` // A description supporting the parent item. - Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + Description Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // A reference to the roles served by the user. RoleIds []RoleId `xml:"role-ids,omitempty" json:"roleIds,omitempty"` // Additional commentary on the parent item. - Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // Identifies a specific system privilege held by the user, along with an associated description and/or rationale for the privilege. AuthorizedPrivileges []AuthorizedPrivilege `xml:"authorized-privileges,omitempty" json:"authorizedPrivileges,omitempty"` } @@ -318,7 +318,7 @@ type AuthorizedPrivilege struct { Name string `xml:"name,attr,omitempty" json:"name,omitempty"` // A description supporting the parent item. - Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + Description Description `xml:"description,omitempty" json:"description,omitempty"` // Describes a function performed for a given authorized privilege by this user class. FunctionsPerformed []FunctionPerformed `xml:"functions-performed,omitempty" json:"functionsPerformed,omitempty"` } @@ -334,15 +334,15 @@ type Component struct { ComponentType string `xml:"component-type,attr,omitempty" json:"componentType,omitempty"` // A description of the component, including information about its function. - Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + Description Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // Describes the operational status of the system. Status *Status `xml:"status,omitempty" json:"status,omitempty"` // Defines a role that has responsibility for the component. @@ -358,17 +358,17 @@ type Service struct { Name string `xml:"name,attr,omitempty" json:"name,omitempty"` // A description of what the service provides. - Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + Description Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // A summary of the technological or business purpose of the service. Purpose Purpose `xml:"purpose,omitempty" json:"purpose,omitempty"` // Additional commentary on the parent item. - Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // Information about the protocol used to provide a service. SspProtocol []Protocol `xml:"ssp-protocol,omitempty" json:"sspProtocol,omitempty"` } @@ -392,22 +392,22 @@ type Interconnection struct { // The name of the remote interconnected system. RemoteSystemName RemoteSystemName `xml:"remote-system-name,omitempty" json:"remoteSystemName,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. - ResponsibleParties []validation_root.ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` + ResponsibleParties []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` } // A set of entries that represent the managed inventory instances of the system. type SystemInventory struct { // Additional commentary on the parent item. - Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A single managed inventory item within the system. InventoryItems []InventoryItem `xml:"inventory-items,omitempty" json:"inventoryItems,omitempty"` } @@ -421,17 +421,17 @@ type InventoryItem struct { AssetId string `xml:"asset-id,attr,omitempty" json:"assetId,omitempty"` // A description supporting the parent item. - Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + Description Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. - ResponsibleParties []validation_root.ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` + ResponsibleParties []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` // The set of componenets that are implemented in a given system inventory item. ImplementedComponents []ImplementedComponent `xml:"implemented-components,omitempty" json:"implementedComponents,omitempty"` } @@ -445,22 +445,22 @@ type ImplementedComponent struct { Use string `xml:"use,attr,omitempty" json:"use,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. - ResponsibleParties []validation_root.ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` + ResponsibleParties []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` } // Describes how the system satisfies a set of controls. type ControlImplementation struct { // A description supporting the parent item. - Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + Description Description `xml:"description,omitempty" json:"description,omitempty"` // Describes how the system satisfies an individual control. ImplementedRequirements []ImplementedRequirement `xml:"implemented-requirements,omitempty" json:"implementedRequirements,omitempty"` } @@ -474,15 +474,15 @@ type ImplementedRequirement struct { ControlId string `xml:"control-id,attr,omitempty" json:"controlId,omitempty"` // A description supporting the parent item. - Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + Description Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // Defines how the referenced component implements a set of controls. ByComponents []ByComponent `xml:"by-components,omitempty" json:"byComponents,omitempty"` // A reference to one or more roles with responsibility for performing a function relative to the control. @@ -500,13 +500,13 @@ type Statement struct { StatementId string `xml:"statement-id,attr,omitempty" json:"statementId,omitempty"` // A description supporting the parent item. - Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + Description Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A reference to one or more roles with responsibility for performing a function relative to the control. ResponsibleRoles []ResponsibleRole `xml:"responsible-roles,omitempty" json:"responsibleRoles,omitempty"` // Defines how the referenced component implements a set of controls. @@ -520,15 +520,15 @@ type ResponsibleRole struct { RoleId string `xml:"role-id,attr,omitempty" json:"roleId,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // References a defined in . - PartyIds []validation_root.PartyId `xml:"party-ids,omitempty" json:"partyIds,omitempty"` + PartyIds []PartyId `xml:"party-ids,omitempty" json:"partyIds,omitempty"` // Additional commentary on the parent item. - Remarks validation_root.Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` } // Defines how the referenced component implements a set of controls. @@ -538,13 +538,13 @@ type ByComponent struct { ComponentId string `xml:"component-id,attr,omitempty" json:"componentId,omitempty"` // A description supporting the parent item. - Description validation_root.Description `xml:"description,omitempty" json:"description,omitempty"` + Description Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []validation_root.Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []validation_root.Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"links,omitempty" json:"links,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []validation_root.Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A reference to one or more roles with responsibility for performing a function relative to the control. ResponsibleRoles []ResponsibleRole `xml:"responsible-roles,omitempty" json:"responsibleRoles,omitempty"` // Identifies the parameter that will be filled in by the enclosed value element. @@ -651,3 +651,25 @@ type RemoteSystemName string // The phrase or string that fills-in the parameter and completes the requirement statement. type Value string + +type Annotation = validation_root.Annotation + +type BackMatter = validation_root.BackMatter + +type Description = validation_root.Description + +type Link = validation_root.Link + +type Metadata = validation_root.Metadata + +type PartyId = validation_root.PartyId + +type Prop = validation_root.Prop + +type Remarks = validation_root.Remarks + +type ResponsibleParty = validation_root.ResponsibleParty + +type ShortName = validation_root.ShortName + +type Title = validation_root.Title From 2e474c9422c4a27692496c5276760ba027655d15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Sat, 11 Jan 2020 15:01:49 +0100 Subject: [PATCH 052/110] r/Subcontrol/Control/g OSCAL standard went from Controls having Subcontrols to have recursive relationship between Controls and hence each Control may have child Controls. --- generator/generator_test.go | 26 +++++++------- generator/manipulation.go | 6 ++-- generator/mapper.go | 40 ++++++++++----------- generator/profile.go | 4 +-- impl/implementation.go | 2 +- templates/catalog.go | 4 +-- templates/profile.go | 2 +- test_util/src/TestCases.go | 8 ++--- test_util/src/main.go | 2 +- test_util/src/methods.go | 66 +++++++++++++++++----------------- types/oscal/catalog/helpers.go | 8 ++--- 11 files changed, 84 insertions(+), 84 deletions(-) diff --git a/generator/generator_test.go b/generator/generator_test.go index 8c08b734..2b6c038f 100644 --- a/generator/generator_test.go +++ b/generator/generator_test.go @@ -196,10 +196,10 @@ func TestSubControlsMapping(t *testing.T) { ControlId: "ac-2", }, profile.Call{ - SubcontrolId: "ac-2.1", + ControlId: "ac-2.1", }, profile.Call{ - SubcontrolId: "ac-2.2", + ControlId: "ac-2.2", }, }, }, @@ -228,7 +228,7 @@ func TestSubControlsMapping(t *testing.T) { }}, }, profile.Alter{ - SubcontrolId: "ac-2.1", + ControlId: "ac-2.1", Additions: []profile.Add{profile.Add{ Parts: []catalog.Part{ catalog.Part{ @@ -238,7 +238,7 @@ func TestSubControlsMapping(t *testing.T) { }}, }, profile.Alter{ - SubcontrolId: "ac-2.2", + ControlId: "ac-2.2", Additions: []profile.Add{profile.Add{ Parts: []catalog.Part{ catalog.Part{ @@ -255,7 +255,7 @@ func TestSubControlsMapping(t *testing.T) { if err != nil { t.Error("error should be nil") } - if c[0].Groups[0].Controls[1].Subcontrols[0].Id != "ac-2.1" { + if c[0].Groups[0].Controls[1].Controls[0].Id != "ac-2.1" { t.Errorf("does not contain ac-2.1 in subcontrols") } @@ -288,7 +288,7 @@ func TestProcessAdditionWithSameClass(t *testing.T) { }, }, profile.Alter{ - SubcontrolId: "ac-10.1", + ControlId: "ac-10.1", Additions: []profile.Add{ profile.Add{ Parts: []catalog.Part{ @@ -313,8 +313,8 @@ func TestProcessAdditionWithSameClass(t *testing.T) { Class: class, }, }, - Subcontrols: []catalog.Subcontrol{ - catalog.Subcontrol{ + Controls: []catalog.Control{ + catalog.Control{ Id: "ac-10.1", Parts: []catalog.Part{ catalog.Part{ @@ -340,7 +340,7 @@ func TestProcessAdditionWithSameClass(t *testing.T) { return } } - for i, sc := range c.Subcontrols { + for i, sc := range c.Controls { expected := fmt.Sprintf("%s_%d", partID, i+1) if sc.Parts[i].Id != expected { t.Errorf("%s and %s are not identical", sc.Parts[i].Id, expected) @@ -372,7 +372,7 @@ func TestProcessAdditionWithDifferentPartClass(t *testing.T) { }, }, profile.Alter{ - SubcontrolId: subctrlID, + ControlId: subctrlID, Additions: []profile.Add{ profile.Add{ Parts: []catalog.Part{ @@ -397,8 +397,8 @@ func TestProcessAdditionWithDifferentPartClass(t *testing.T) { Class: "c3", }, }, - Subcontrols: []catalog.Subcontrol{ - catalog.Subcontrol{ + Controls: []catalog.Control{ + catalog.Control{ Id: subctrlID, Parts: []catalog.Part{ catalog.Part{ @@ -417,7 +417,7 @@ func TestProcessAdditionWithDifferentPartClass(t *testing.T) { if len(o.Groups[0].Controls[0].Parts) != 2 { t.Error("parts for controls not getting added properly") } - if len(o.Groups[0].Controls[0].Subcontrols[0].Parts) != 2 { + if len(o.Groups[0].Controls[0].Controls[0].Parts) != 2 { t.Error("parts for sub-controls not getting added properly") } diff --git a/generator/manipulation.go b/generator/manipulation.go index e3fba574..b1fded1a 100644 --- a/generator/manipulation.go +++ b/generator/manipulation.go @@ -30,8 +30,8 @@ func ProcessAddition(alt profile.Alter, controls []catalog.Control) []catalog.Co } controls[j] = ctrl } - for k, subctrl := range controls[j].Subcontrols { - if subctrl.Id == alt.SubcontrolId { + for k, subctrl := range controls[j].Controls { + if subctrl.Id == alt.ControlId { for _, add := range alt.Additions { for _, p := range add.Parts { appended := false @@ -50,7 +50,7 @@ func ProcessAddition(alt profile.Alter, controls []catalog.Control) []catalog.Co } } - controls[j].Subcontrols[k] = subctrl + controls[j].Controls[k] = subctrl } } return controls diff --git a/generator/mapper.go b/generator/mapper.go index 8a8c84e9..0c23a07b 100644 --- a/generator/mapper.go +++ b/generator/mapper.go @@ -83,17 +83,17 @@ func CreateCatalogsFromProfile(profileArg *profile.Profile) ([]*catalog.Catalog, } } } -func getSubControl(call profile.Call, ctrls []catalog.Control, helper impl.Catalog) (catalog.Subcontrol, error) { +func getSubControl(call profile.Call, ctrls []catalog.Control, helper impl.Catalog) (catalog.Control, error) { for _, ctrl := range ctrls { - if ctrl.Id == helper.GetControl(call.SubcontrolId) { - for _, subctrl := range ctrl.Subcontrols { - if subctrl.Id == call.SubcontrolId { + if ctrl.Id == helper.GetControl(call.ControlId) { + for _, subctrl := range ctrl.Controls { + if subctrl.Id == call.ControlId { return subctrl, nil } } } } - return catalog.Subcontrol{}, fmt.Errorf("could not find subcontrol %s in catalog", call.SubcontrolId) + return catalog.Control{}, fmt.Errorf("could not find subcontrol %s in catalog", call.ControlId) } // GetMappedCatalogControlsFromImport gets mapped controls in catalog per profile import @@ -111,27 +111,27 @@ func GetMappedCatalogControlsFromImport(importedCatalog *catalog.Catalog, profil for _, ctrl := range group.Controls { for _, call := range profileImport.Include.IdSelectors { if call.ControlId == "" { - if strings.ToLower(ctrl.Id) == strings.ToLower(catalogHelper.GetControl(call.SubcontrolId)) { + if strings.ToLower(ctrl.Id) == strings.ToLower(catalogHelper.GetControl(call.ControlId)) { ctrlExistsInGroup := false sc, err := getSubControl(call, group.Controls, &impl.NISTCatalog{}) if err != nil { return catalog.Catalog{}, err } for i, mappedCtrl := range newGroup.Controls { - if mappedCtrl.Id == strings.ToLower(catalogHelper.GetControl(call.SubcontrolId)) { + if mappedCtrl.Id == strings.ToLower(catalogHelper.GetControl(call.ControlId)) { ctrlExistsInGroup = true - newGroup.Controls[i].Subcontrols = append(newGroup.Controls[i].Subcontrols, sc) + newGroup.Controls[i].Controls = append(newGroup.Controls[i].Controls, sc) } } if !ctrlExistsInGroup { newGroup.Controls = append(newGroup.Controls, catalog.Control{ - Id: ctrl.Id, - Class: ctrl.Class, - Title: ctrl.Title, - Parameters: ctrl.Parameters, - Parts: ctrl.Parts, - Subcontrols: []catalog.Subcontrol{sc}, + Id: ctrl.Id, + Class: ctrl.Class, + Title: ctrl.Title, + Parameters: ctrl.Parameters, + Parts: ctrl.Parts, + Controls: []catalog.Control{sc}, }) } } @@ -147,12 +147,12 @@ func GetMappedCatalogControlsFromImport(importedCatalog *catalog.Catalog, profil if !ctrlExists { newGroup.Controls = append(newGroup.Controls, catalog.Control{ - Id: ctrl.Id, - Class: ctrl.Class, - Title: ctrl.Title, - Subcontrols: []catalog.Subcontrol{}, - Parameters: ctrl.Parameters, - Parts: ctrl.Parts, + Id: ctrl.Id, + Class: ctrl.Class, + Title: ctrl.Title, + Controls: []catalog.Control{}, + Parameters: ctrl.Parameters, + Parts: ctrl.Parts, }, ) } diff --git a/generator/profile.go b/generator/profile.go index 0c72a488..931535c7 100644 --- a/generator/profile.go +++ b/generator/profile.go @@ -88,10 +88,10 @@ func findAlter(p *profile.Profile, call profile.Call) (*profile.Alter, bool, err // EquateAlter equates alter with call func EquateAlter(alt profile.Alter, call profile.Call) bool { - if alt.ControlId == "" && alt.SubcontrolId == call.SubcontrolId { + if alt.ControlId == "" && alt.ControlId == call.ControlId { return true } - if alt.SubcontrolId == "" && alt.ControlId == call.ControlId { + if alt.ControlId == "" && alt.ControlId == call.ControlId { return true } return false diff --git a/impl/implementation.go b/impl/implementation.go index 3abf91b6..5331d3e3 100644 --- a/impl/implementation.go +++ b/impl/implementation.go @@ -357,7 +357,7 @@ func getComponentID(componentName string) string { func getGuidance(alterations []profile.Alter, paramID string) []string { subControlID := getSubControlIDFromParam(paramID) for _, alter := range alterations { - if alter.SubcontrolId == subControlID { + if alter.ControlId == subControlID { for _, addition := range alter.Additions { for _, part := range addition.Parts { if part.Class == "guidance" { diff --git a/templates/catalog.go b/templates/catalog.go index d2cbf6b1..e3a7ff2c 100644 --- a/templates/catalog.go +++ b/templates/catalog.go @@ -38,8 +38,8 @@ var ApplicableControls = []catalog.Catalog{ }, {{end}} }, - Subcontrols: []catalog.Subcontrol{ - {{range .Subcontrols}} + Controls: []catalog.Control{ + {{range .Controls}} { Id: "{{.Id}}", Class: "{{.Class}}", diff --git a/templates/profile.go b/templates/profile.go index 0991f9a4..404ebee5 100644 --- a/templates/profile.go +++ b/templates/profile.go @@ -36,7 +36,7 @@ var ApplicableProfileControls = profile.Profile{ {{range .Include.IdSelectors}} { ControlId: "{{.ControlId}}", - SubcontrolId: "{{.SubcontrolId}}", + ControlId: "{{.ControlId}}", }, {{end}} diff --git a/test_util/src/TestCases.go b/test_util/src/TestCases.go index 1805006c..42e66d7d 100644 --- a/test_util/src/TestCases.go +++ b/test_util/src/TestCases.go @@ -9,8 +9,8 @@ import ( "github.com/fatih/color" ) -// SecurityControlsSubcontrolCheck is a test to verify that all controls from the catalog are being mapped correctly -func SecurityControlsSubcontrolCheck(check []catalog.Catalog, ProfileFile string) error { +// SecurityControlsControlCheck is a test to verify that all controls from the catalog are being mapped correctly +func SecurityControlsControlCheck(check []catalog.Catalog, ProfileFile string) error { codeGeneratedControls := ProtocolsMapping(check) @@ -33,11 +33,11 @@ func SecurityControlsSubcontrolCheck(check []catalog.Catalog, ProfileFile string println("Go file control & sub-control count: ", Count(codeGeneratedControls, "controls")) println("Profile control & sub-control count: ", Count(profileControlsDetails, "controls")) } else if Count(codeGeneratedControls, "controls") > Count(profileControlsDetails, "controls") { - color.Red("Controls & Subcontrols in go file are greater in number then present in profile") + color.Red("Controls & Controls in go file are greater in number then present in profile") println("Go file control & sub-control count: ", Count(codeGeneratedControls, "controls")) println("Profile control & sub-control count: ", Count(profileControlsDetails, "controls")) } else if Count(codeGeneratedControls, "controls") < Count(profileControlsDetails, "controls") { - color.Red("Controls & Subcontrols in profile are greater in number then present in go file") + color.Red("Controls & Controls in profile are greater in number then present in go file") println("Go file control & sub-control count: ", Count(codeGeneratedControls, "controls")) println("Profile control & sub-control count: ", Count(profileControlsDetails, "controls")) } diff --git a/test_util/src/main.go b/test_util/src/main.go index c645879b..a95f78e5 100644 --- a/test_util/src/main.go +++ b/test_util/src/main.go @@ -19,5 +19,5 @@ func main() { os.RemoveAll(f) } } - SecurityControlsSubcontrolCheck(check, *profile) + SecurityControlsControlCheck(check, *profile) } diff --git a/test_util/src/methods.go b/test_util/src/methods.go index 895c1a58..d2f711aa 100644 --- a/test_util/src/methods.go +++ b/test_util/src/methods.go @@ -41,21 +41,21 @@ func ProtocolsMapping(check []catalog.Catalog) map[string][]string { } } - for subControlsCount := 0; subControlsCount < len(check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols); subControlsCount++ { - if _, ok := securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Id]; ok { + for subControlsCount := 0; subControlsCount < len(check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls); subControlsCount++ { + if _, ok := securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Id]; ok { } else { - securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Id] = append(securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Id], check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Class) - securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Id] = append(securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Id], string(check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Title)) + securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Id] = append(securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Id], check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Class) + securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Id] = append(securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Id], string(check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Title)) } - for subControlsPartCount := 0; subControlsPartCount < len(check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Parts); subControlsPartCount++ { - if _, ok := securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Id+"?"+check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Parts[subControlsPartCount].Id]; ok { + for subControlsPartCount := 0; subControlsPartCount < len(check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Parts); subControlsPartCount++ { + if _, ok := securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Id+"?"+check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Parts[subControlsPartCount].Id]; ok { } else { - if check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Parts[subControlsPartCount].Id != "" { - securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Id+"?"+check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Parts[subControlsPartCount].Id] = append(securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Id+"?"+check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Parts[subControlsPartCount].Id], check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Parts[subControlsPartCount].Class) - securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Id+"?"+check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Parts[subControlsPartCount].Id] = append(securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Id+"?"+check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Parts[subControlsPartCount].Id], string(check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Parts[subControlsPartCount].Title)) - } else if check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Parts[subControlsPartCount].Id == "" && check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Parts[subControlsPartCount].Class == "assessment" { - securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Id+"?"+check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Parts[subControlsPartCount].Id] = append(securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Id+"?"+check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Parts[subControlsPartCount].Id], check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Parts[subControlsPartCount].Class) - securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Id+"?"+check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Parts[subControlsPartCount].Id] = append(securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Id+"?"+check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Parts[subControlsPartCount].Id], string(check[catalogCount].Groups[groupsCount].Controls[controlsCount].Subcontrols[subControlsCount].Parts[subControlsPartCount].Title)) + if check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Parts[subControlsPartCount].Id != "" { + securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Id+"?"+check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Parts[subControlsPartCount].Id] = append(securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Id+"?"+check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Parts[subControlsPartCount].Id], check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Parts[subControlsPartCount].Class) + securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Id+"?"+check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Parts[subControlsPartCount].Id] = append(securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Id+"?"+check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Parts[subControlsPartCount].Id], string(check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Parts[subControlsPartCount].Title)) + } else if check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Parts[subControlsPartCount].Id == "" && check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Parts[subControlsPartCount].Class == "assessment" { + securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Id+"?"+check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Parts[subControlsPartCount].Id] = append(securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Id+"?"+check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Parts[subControlsPartCount].Id], check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Parts[subControlsPartCount].Class) + securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Id+"?"+check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Parts[subControlsPartCount].Id] = append(securityControls[check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Id+"?"+check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Parts[subControlsPartCount].Id], string(check[catalogCount].Groups[groupsCount].Controls[controlsCount].Controls[subControlsCount].Parts[subControlsPartCount].Title)) } } } @@ -90,7 +90,7 @@ func GetProfile(r io.Reader) (*profile.Profile, error) { return o.Profile, nil } -// controlInProfile accepts a Control or SubcontrolID and an array of all +// controlInProfile accepts a Control or ControlID and an array of all // the controls & subcontrols present in the profile. func controlInProfile(controlID string, profile []string) bool { for _, value := range profile { @@ -152,8 +152,8 @@ func ProfileParsing(parsedProfile *profile.Profile) []string { if parsedProfile.Imports[importCount].Include.IdSelectors[idSelectorCount].ControlId != "" { securityControls = append(securityControls, parsedProfile.Imports[importCount].Include.IdSelectors[idSelectorCount].ControlId) } - if parsedProfile.Imports[importCount].Include.IdSelectors[idSelectorCount].SubcontrolId != "" { - securityControls = append(securityControls, parsedProfile.Imports[importCount].Include.IdSelectors[idSelectorCount].SubcontrolId) + if parsedProfile.Imports[importCount].Include.IdSelectors[idSelectorCount].ControlId != "" { + securityControls = append(securityControls, parsedProfile.Imports[importCount].Include.IdSelectors[idSelectorCount].ControlId) } } } @@ -264,7 +264,7 @@ func ProfileProcessing(parsedProfile *profile.Profile, ListParentControls []stri } // ParseCatalog accepts a catalog struct and return the mapping of Control, -// Subcontrols & Parts. ID, Class & Titles +// Controls & Parts. ID, Class & Titles func ParseCatalog(parsedCatalog *catalog.Catalog, profileControls []string, ListParentControls []string) map[string][]string { catalogControlsDetails := make(map[string][]string) @@ -284,18 +284,18 @@ func ParseCatalog(parsedCatalog *catalog.Catalog, profileControls []string, List } } - for subControlCount := 0; subControlCount < len(parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols); subControlCount++ { - if controlInProfile(parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Id, profileControls) && ParentControlCheck(parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Id, ListParentControls) { - catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Id] = append(catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Id], parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Class) - catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Id] = append(catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Id], string(parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Title)) - for subControlPartCount := 0; subControlPartCount < len(parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Parts); subControlPartCount++ { - if parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Parts[subControlPartCount].Id != "" { - catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Id+"?"+parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Parts[subControlPartCount].Id] = append(catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Id+"?"+parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Parts[subControlPartCount].Id], parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Parts[subControlPartCount].Class) - catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Id+"?"+parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Parts[subControlPartCount].Id] = append(catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Id+"?"+parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Parts[subControlPartCount].Id], string(parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Parts[subControlPartCount].Title)) - } else if parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Parts[subControlPartCount].Id == "" && parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Parts[subControlPartCount].Class == "assessment" { - - catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Id+"?"+parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Parts[subControlPartCount].Id] = append(catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Id+"?"+parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Parts[subControlPartCount].Id], parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Parts[subControlPartCount].Class) - catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Id+"?"+parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Parts[subControlPartCount].Id] = append(catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Id+"?"+parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Parts[subControlPartCount].Id], string(parsedCatalog.Groups[groupCount].Controls[controlCount].Subcontrols[subControlCount].Parts[subControlPartCount].Title)) + for subControlCount := 0; subControlCount < len(parsedCatalog.Groups[groupCount].Controls[controlCount].Controls); subControlCount++ { + if controlInProfile(parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Id, profileControls) && ParentControlCheck(parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Id, ListParentControls) { + catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Id] = append(catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Id], parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Class) + catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Id] = append(catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Id], string(parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Title)) + for subControlPartCount := 0; subControlPartCount < len(parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Parts); subControlPartCount++ { + if parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Parts[subControlPartCount].Id != "" { + catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Id+"?"+parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Parts[subControlPartCount].Id] = append(catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Id+"?"+parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Parts[subControlPartCount].Id], parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Parts[subControlPartCount].Class) + catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Id+"?"+parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Parts[subControlPartCount].Id] = append(catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Id+"?"+parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Parts[subControlPartCount].Id], string(parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Parts[subControlPartCount].Title)) + } else if parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Parts[subControlPartCount].Id == "" && parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Parts[subControlPartCount].Class == "assessment" { + + catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Id+"?"+parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Parts[subControlPartCount].Id] = append(catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Id+"?"+parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Parts[subControlPartCount].Id], parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Parts[subControlPartCount].Class) + catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Id+"?"+parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Parts[subControlPartCount].Id] = append(catalogControlsDetails[parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Id+"?"+parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Parts[subControlPartCount].Id], string(parsedCatalog.Groups[groupCount].Controls[controlCount].Controls[subControlCount].Parts[subControlPartCount].Title)) } } } @@ -351,8 +351,8 @@ func ParseImport(parsedProfile *profile.Profile, link string, token string) []st if parsedProfile.Imports[importCount].Include.IdSelectors[idSelectorCount].ControlId != "" { securityControls = append(securityControls, parsedProfile.Imports[importCount].Include.IdSelectors[idSelectorCount].ControlId) } - if parsedProfile.Imports[importCount].Include.IdSelectors[idSelectorCount].SubcontrolId != "" && token != "Parent" { - securityControls = append(securityControls, parsedProfile.Imports[importCount].Include.IdSelectors[idSelectorCount].SubcontrolId) + if parsedProfile.Imports[importCount].Include.IdSelectors[idSelectorCount].ControlId != "" && token != "Parent" { + securityControls = append(securityControls, parsedProfile.Imports[importCount].Include.IdSelectors[idSelectorCount].ControlId) } } } @@ -374,9 +374,9 @@ func ParseParts(parsedProfile *profile.Profile, list []string) map[string][]stri if parsedProfile.Modify.Alterations[modifyCount].ControlId != "" && parsedProfile.Modify.Alterations[modifyCount].Additions[alterCount].Parts[partCount].Class == "guidance" { securityControls[parsedProfile.Modify.Alterations[modifyCount].ControlId+"?"+parsedProfile.Modify.Alterations[modifyCount].ControlId+"_gdn"] = append(securityControls[parsedProfile.Modify.Alterations[modifyCount].ControlId+"?"+parsedProfile.Modify.Alterations[modifyCount].ControlId+"_gdn"], parsedProfile.Modify.Alterations[modifyCount].Additions[alterCount].Parts[partCount].Class) } - } else if parsedProfile.Modify.Alterations[modifyCount].SubcontrolId == s1Element { - if parsedProfile.Modify.Alterations[modifyCount].SubcontrolId != "" && parsedProfile.Modify.Alterations[modifyCount].Additions[alterCount].Parts[partCount].Class == "guidance" { - securityControls[parsedProfile.Modify.Alterations[modifyCount].SubcontrolId+"?"+parsedProfile.Modify.Alterations[modifyCount].SubcontrolId+"_gdn"] = append(securityControls[parsedProfile.Modify.Alterations[modifyCount].SubcontrolId+"?"+parsedProfile.Modify.Alterations[modifyCount].SubcontrolId+"_gdn"], parsedProfile.Modify.Alterations[modifyCount].Additions[alterCount].Parts[partCount].Class) + } else if parsedProfile.Modify.Alterations[modifyCount].ControlId == s1Element { + if parsedProfile.Modify.Alterations[modifyCount].ControlId != "" && parsedProfile.Modify.Alterations[modifyCount].Additions[alterCount].Parts[partCount].Class == "guidance" { + securityControls[parsedProfile.Modify.Alterations[modifyCount].ControlId+"?"+parsedProfile.Modify.Alterations[modifyCount].ControlId+"_gdn"] = append(securityControls[parsedProfile.Modify.Alterations[modifyCount].ControlId+"?"+parsedProfile.Modify.Alterations[modifyCount].ControlId+"_gdn"], parsedProfile.Modify.Alterations[modifyCount].Additions[alterCount].Parts[partCount].Class) } } } diff --git a/types/oscal/catalog/helpers.go b/types/oscal/catalog/helpers.go index 45760eb2..c087d36c 100644 --- a/types/oscal/catalog/helpers.go +++ b/types/oscal/catalog/helpers.go @@ -2,9 +2,9 @@ package catalog // ControlOpts to generate controls type ControlOpts struct { - Params []Param - Parts []Part - Subcontrols []Subcontrol + Params []Param + Parts []Part + Controls []Control } // NewPart creates a new part @@ -25,7 +25,7 @@ func NewControl(id, title string, opts *ControlOpts) Control { Title: Title(title), } if opts != nil { - ctrl.Subcontrols = opts.Subcontrols + ctrl.Controls = opts.Controls ctrl.Parts = opts.Parts ctrl.Parameters = opts.Params } From 138fbfd4c08678d6c468e147499878ee79f9d2ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Sat, 11 Jan 2020 15:29:10 +0100 Subject: [PATCH 053/110] Remove dead code Latest OSCAL metaschema does not contain element as first class citizen. --- metaschema/metaschema.go | 1 - metaschema/types.tmpl | 8 -------- 2 files changed, 9 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 13273f6b..e89c1476 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -315,7 +315,6 @@ type Model struct { Assembly []Assembly `xml:"assembly"` Field []Field `xml:"field"` Choice []Choice `xml:"choice"` - Prose *struct{} `xml:"prose"` Any *struct{} `xml:"any"` } diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index e81d21b6..8a859b02 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -45,14 +45,6 @@ type {{toCamel .Name}} struct { {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` {{- end}} - {{- end}} - - {{- if .Model.Prose}} - {{if eq $packageName "catalog"}} - Prose *Prose `xml:",any" json:"prose,omitempty"` - {{else}} - Prose *catalog.Prose `xml:",any" json:"prose,omitempty"` - {{end}} {{- end}} {{end}} From ba7a7e43c3849ae3690ab5ffeebdb5a9dc07cf85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Sat, 11 Jan 2020 16:02:33 +0100 Subject: [PATCH 054/110] Replace element with @as-type attribute on define-field This is what they did in usnistgov/OSCAL repo as well. Also update the constraints to the latest list of as-types that appear in there. --- metaschema/metaschema.go | 41 +++++++++++++++------------------------- 1 file changed, 15 insertions(+), 26 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index e89c1476..37e27694 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -12,23 +12,24 @@ import ( // ... const ( - AsBoolean As = "boolean" - AsEmpty As = "empty" - AsString As = "string" - AsMixed As = "mixed" + AsTypeBoolean AsType = "boolean" + AsTypeEmpty AsType = "empty" + AsTypeString AsType = "string" + AsTypeMixed AsType = "mixed" + AsTypeMarkupLine AsType = "markup-line" + AsTypeMarkupMultiLine AsType = "markup-multiline" + AsTypeDate AsType = "date" + AsTypeDateTimeTz AsType = "dateTime-with-timezone" + AsTypeNcName AsType = "NCName" + AsTypeEmail AsType = "email" + AsTypeURI AsType = "uri" + AsTypeBase64 AsType = "base64Binary" ShowDocsXML ShowDocs = "xml" ShowDocsJSON ShowDocs = "json" ShowDocsXMLJSON ShowDocs = "xml json" ) -var FieldConstraints = []As{ - AsBoolean, - AsEmpty, - AsString, - AsMixed, -} - var ShowDocsOptions = []ShowDocs{ ShowDocsXML, ShowDocsJSON, @@ -271,7 +272,7 @@ type DefineField struct { Description string `xml:"description"` Remarks *Remarks `xml:"remarks"` Examples []Example `xml:"example"` - As As `xml:"as"` + AsType AsType `xml:"as-type,attr"` Metaschema *Metaschema } @@ -315,6 +316,7 @@ type Model struct { Assembly []Assembly `xml:"assembly"` Field []Field `xml:"field"` Choice []Choice `xml:"choice"` + Prose *struct{} `xml:"prose"` Any *struct{} `xml:"any"` } @@ -592,20 +594,7 @@ func (h *Href) MarshalXMLAttr(name xml.Name) (xml.Attr, error) { return xml.Attr{Name: name}, nil } -type As string - -func (a As) UnmarshalXMLAttr(attr xml.Attr) error { - as := As(attr.Value) - - for _, fieldConstraint := range FieldConstraints { - if as == fieldConstraint { - a = as - return nil - } - } - - return fmt.Errorf("Field constraint \"%s\" is not a valid constraint", attr.Value) -} +type AsType string type ShowDocs string From 483a3a38fd1aed68bd43b5f95eb6188054f062f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Sat, 11 Jan 2020 23:40:55 +0100 Subject: [PATCH 055/110] Prose should be Markup instead of simple string as it may contain xhtml markup. --- metaschema/metaschema.go | 4 ++++ metaschema/types.tmpl | 6 +++++- types/oscal/nominal_catalog/nominal_catalog.go | 2 +- types/oscal/system_security_plan/system_security_plan.go | 2 +- types/oscal/validation_root/validation_root.go | 4 ++-- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 37e27694..6f3e9eff 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -292,6 +292,10 @@ func (df *DefineField) GetMetaschema() *Metaschema { return df.Metaschema } +func (df *DefineField) IsMarkup() bool { + return df.AsType == AsTypeMarkupMultiLine +} + type DefineFlag struct { Name string `xml:"name,attr"` AsType datatype `xml:"as-type,attr"` diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index 8a859b02..7f1562c5 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -64,7 +64,11 @@ type {{toCamel .Name}} struct { Value string `xml:",chardata" json:"value,omitempty"` } {{- else}} -type {{toCamel .Name}} string + {{- if .IsMarkup }} + type {{ .GoName }} = Markup + {{- else }} + type {{ .GoName }} string + {{- end}} {{end -}} {{end}} diff --git a/types/oscal/nominal_catalog/nominal_catalog.go b/types/oscal/nominal_catalog/nominal_catalog.go index f4460a46..31749ca0 100644 --- a/types/oscal/nominal_catalog/nominal_catalog.go +++ b/types/oscal/nominal_catalog/nominal_catalog.go @@ -109,7 +109,7 @@ type Choice string // Prose permits multiple paragraphs, lists, tables etc. -type Prose string +type Prose = Markup type Link = validation_root.Link diff --git a/types/oscal/system_security_plan/system_security_plan.go b/types/oscal/system_security_plan/system_security_plan.go index 9094d4a1..c2c0ca71 100644 --- a/types/oscal/system_security_plan/system_security_plan.go +++ b/types/oscal/system_security_plan/system_security_plan.go @@ -597,7 +597,7 @@ type Selected string // If the selected security level is different from the base security level, this contains the justification for the change. -type AdjustmentJustification string +type AdjustmentJustification = Markup // A target-level of confidentiality for the system, based on the sensitivity of information within the system. diff --git a/types/oscal/validation_root/validation_root.go b/types/oscal/validation_root/validation_root.go index a6d05d6f..a48dfb6e 100644 --- a/types/oscal/validation_root/validation_root.go +++ b/types/oscal/validation_root/validation_root.go @@ -408,8 +408,8 @@ type Target string // A description supporting the parent item. -type Description string +type Description = Markup // Additional commentary on the parent item. -type Remarks string +type Remarks = Markup From 8f4f307ad77ee4b481c8e6961275ba8f192a2666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 13 Jan 2020 13:40:23 +0100 Subject: [PATCH 056/110] Fix compilation issues around Prose handling We will have to re-implement Prose manipulation later on. Project will be better served if we just remove the current implementation and re-implement once the project compiles with the latest oscal. --- impl/implementation.go | 4 +- types/oscal/catalog/helpers.go | 4 +- types/oscal/catalog/import.go | 7 + types/oscal/catalog/prose.go | 439 --------------------- types/oscal/nominal_catalog/import.go | 7 + types/oscal/nominal_catalog/prose.go | 6 + types/oscal/system_security_plan/import.go | 7 + types/oscal/validation_root/markup.go | 6 + 8 files changed, 35 insertions(+), 445 deletions(-) create mode 100644 types/oscal/catalog/import.go delete mode 100644 types/oscal/catalog/prose.go create mode 100644 types/oscal/nominal_catalog/import.go create mode 100644 types/oscal/nominal_catalog/prose.go create mode 100644 types/oscal/system_security_plan/import.go create mode 100644 types/oscal/validation_root/markup.go diff --git a/impl/implementation.go b/impl/implementation.go index 5331d3e3..52bac6d8 100644 --- a/impl/implementation.go +++ b/impl/implementation.go @@ -379,8 +379,6 @@ func getSubControlIDFromParam(paramID string) string { func getGuidanceFromPart(part *catalog.Prose) []string { var guidance []string - for _, p := range part.P { - guidance = append(guidance, p.Raw) - } + guidance = append(guidance, part.Raw) return guidance } diff --git a/types/oscal/catalog/helpers.go b/types/oscal/catalog/helpers.go index c087d36c..b1cd3aac 100644 --- a/types/oscal/catalog/helpers.go +++ b/types/oscal/catalog/helpers.go @@ -12,9 +12,7 @@ func NewPart(id, title, narrative string) Part { return Part{ Id: id, Title: Title(title), - Prose: &Prose{ - P: []P{P{Raw: narrative}}, - }, + Prose: &Prose{Raw: narrative}, } } diff --git a/types/oscal/catalog/import.go b/types/oscal/catalog/import.go new file mode 100644 index 00000000..59865d97 --- /dev/null +++ b/types/oscal/catalog/import.go @@ -0,0 +1,7 @@ +package catalog + +import ( + "github.com/docker/oscalkit/types/oscal/nominal_catalog" +) + +type Prose = nominal_catalog.Prose diff --git a/types/oscal/catalog/prose.go b/types/oscal/catalog/prose.go deleted file mode 100644 index ec5a6d41..00000000 --- a/types/oscal/catalog/prose.go +++ /dev/null @@ -1,439 +0,0 @@ -package catalog - -import ( - "encoding/json" - "encoding/xml" - "fmt" - "regexp" - "strings" -) - -// Prose ... -type Prose struct { - XMLName xml.Name - raw []string - order []string - P []P - UL []UL - OL []OL - Pre []Pre -} - -// ReplaceInsertParams replaces insert parameters -func (p *Prose) ReplaceInsertParams(parameterID, parameterValue string) error { - - rs := fmt.Sprintf(``, parameterID) - regex, err := regexp.Compile(rs) - if err != nil { - return err - } - for i := range p.P { - p.P[i].Raw = regex.ReplaceAllString(p.P[i].Raw, parameterValue) - - } - for i := range p.OL { - p.OL[i].Raw = regex.ReplaceAllString(p.OL[i].Raw, parameterValue) - } - for i := range p.Pre { - p.Pre[i].Raw = regex.ReplaceAllString(p.Pre[i].Raw, parameterValue) - } - for i := range p.UL { - p.UL[i].Raw = regex.ReplaceAllString(p.UL[i].Raw, parameterValue) - } - return nil -} - -// MarshalXML ... -func (p *Prose) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - raw := strings.Join(p.raw, "") - - if raw != "" { - if err := xml.Unmarshal([]byte(raw), &p); err != nil { - return err - } - } - - p.XMLName = xml.Name{Local: "ul"} - if err := e.Encode(p.UL); err != nil { - return err - } - p.XMLName = xml.Name{Local: "ol"} - if err := e.Encode(p.OL); err != nil { - return err - } - p.XMLName = xml.Name{Local: "p"} - if err := e.Encode(p.P); err != nil { - return err - } - p.XMLName = xml.Name{Local: "pre"} - if err := e.Encode(p.Pre); err != nil { - return err - } - - return nil -} - -// UnmarshalXML ... -func (p *Prose) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { - switch start.Name.Local { - case "ul": - var ul UL - if err := d.DecodeElement(&ul, &start); err != nil { - return err - } - - p.UL = append(p.UL, ul) - p.order = append(p.order, "ul") - - case "ol": - var ol OL - if err := d.DecodeElement(&ol, &start); err != nil { - return err - } - - p.OL = append(p.OL, ol) - p.order = append(p.order, "ol") - - case "p": - var para P - if err := d.DecodeElement(¶, &start); err != nil { - return err - } - - p.P = append(p.P, para) - p.order = append(p.order, "p") - - case "pre": - var pre Pre - if err := d.DecodeElement(&pre, &start); err != nil { - return err - } - - p.Pre = append(p.Pre, pre) - p.order = append(p.order, "pre") - } - - return nil -} - -// MarshalJSON ... -func (p *Prose) MarshalJSON() ([]byte, error) { - // If prose originates from OpenControl - if p.order == nil { - for _, para := range p.P { - if para.Raw != "" { - p.raw = append(p.raw, para.Raw) - } - } - for _, ul := range p.UL { - if ul.Raw != "" { - p.raw = append(p.raw, ul.Raw) - } - } - for _, ol := range p.OL { - if ol.Raw != "" { - p.raw = append(p.raw, ol.Raw) - } - } - for _, pre := range p.Pre { - if pre.Raw != "" { - p.raw = append(p.raw, pre.Raw) - } - } - - return json.Marshal(p.raw) - } - - // If prose originates from XML - var ulIndex int - var olIndex int - var pIndex int - var preIndex int - - for _, element := range p.order { - switch element { - case "ul": - if ulIndex < len(p.UL) { - raw, err := xml.Marshal(p.UL[ulIndex]) - if err != nil { - return nil, err - } - - p.raw = append(p.raw, formatRawProse(string(raw))) - - ulIndex++ - } - - case "ol": - if olIndex < len(p.OL) { - raw, err := xml.Marshal(p.OL[olIndex]) - if err != nil { - return nil, err - } - - p.raw = append(p.raw, formatRawProse(string(raw))) - - olIndex++ - } - - case "p": - if pIndex < len(p.P) { - raw, err := xml.Marshal(p.P[pIndex]) - if err != nil { - return nil, err - } - - p.raw = append(p.raw, formatRawProse(string(raw))) - - pIndex++ - } - - case "pre": - if preIndex < len(p.Pre) { - raw, err := xml.Marshal(p.Pre[preIndex]) - if err != nil { - return nil, err - } - - p.raw = append(p.raw, formatRawProse(string(raw))) - - preIndex++ - } - } - } - - return json.Marshal(p.raw) -} - -// MarshalYAML ... -func (p *Prose) MarshalYAML() (interface{}, error) { - return p.raw, nil -} - -// UnmarshalJSON ... -func (p *Prose) UnmarshalJSON(data []byte) error { - return json.Unmarshal(data, &p.raw) -} - -// Raw ... -type Raw struct { - Value string `xml:",innerxml"` -} - -// MarshalJSON ... -func (r *Raw) MarshalJSON() ([]byte, error) { - return json.Marshal(formatRawProse(r.Value)) -} - -// MarshalYAML ... -func (r *Raw) MarshalYAML() (interface{}, error) { - return r.Value, nil -} - -// UnmarshalJSON ... -func (r *Raw) UnmarshalJSON(data []byte) error { - var raw string - if err := json.Unmarshal(data, &raw); err != nil { - return err - } - - r.Value = raw - - return nil -} - -// P ... -type P struct { - XMLName xml.Name `xml:"p" json:"-" yaml:"-"` - Q []Q `xml:"q" json:"-" yaml:"-"` - Code []Code `xml:"code" json:"-" yaml:"-"` - EM []EM `xml:"em" json:"-" yaml:"-"` - Strong []Strong `xml:"strong" json:"-" yaml:"-"` - B []B `xml:"b" json:"-" yaml:"-"` - I []I `xml:"i" json:"-" yaml:"-"` - Sub []Sub `xml:"sub" json:"-" yaml:"-"` - Sup []Sup `xml:"sup" json:"-" yaml:"-"` - Xref []Xref `xml:"a" json:"-" yaml:"-"` - Assignments []Assign `xml:"-" json:"-" yaml:"-"` - Selection []Select `xml:"-" json:"-" yaml:"-"` - Raw string `xml:",innerxml" json:"raw,omitempty" yaml:"raw,omitempty"` -} - -// Pre ... -type Pre struct { - XMLName xml.Name `xml:"pre"` - ID string `xml:"id,attr,omitempty"` - Raw string `xml:",innerxml"` -} - -// OL ... -type OL struct { - XMLName xml.Name `xml:"ol"` - Raw string `xml:",innerxml"` -} - -// UL ... -type UL struct { - XMLName xml.Name `xml:"ul"` - Raw string `xml:",innerxml"` -} - -// Q ... -type Q struct { - Code []Code `xml:"code" json:"-" yaml:"-"` - EM []EM `xml:"em" json:"-" yaml:"-"` - I []I `xml:"i" json:"-" yaml:"-"` - Strong []Strong `xml:"strong" json:"-" yaml:"-"` - Sub []Sub `xml:"sub" json:"-" yaml:"-"` - Sup []Sup `xml:"sup" json:"-" yaml:"-"` - Value string `xml:",chardata" json:"-" yaml:"-"` -} - -// Code ... -type Code struct { - Q []Q `xml:"q" json:"-" yaml:"-"` - Code []Code `xml:"code" json:"-" yaml:"-"` - EM []EM `xml:"em" json:"-" yaml:"-"` - Strong []Strong `xml:"strong" json:"-" yaml:"-"` - B []B `xml:"b" json:"-" yaml:"-"` - I []I `xml:"i" json:"-" yaml:"-"` - Sub []Sub `xml:"sub" json:"-" yaml:"-"` - Sup []Sup `xml:"sup" json:"-" yaml:"-"` - Value string `xml:",chardata" json:"-" yaml:"-"` -} - -// EM ... -type EM struct { - Q []Q `xml:"q" json:"-" yaml:"-"` - Code []Code `xml:"code" json:"-" yaml:"-"` - EM []EM `xml:"em" json:"-" yaml:"-"` - Strong []Strong `xml:"strong" json:"-" yaml:"-"` - B []B `xml:"b" json:"-" yaml:"-"` - I []I `xml:"i" json:"-" yaml:"-"` - Sub []Sub `xml:"sub" json:"-" yaml:"-"` - Sup []Sup `xml:"sup" json:"-" yaml:"-"` - Value string `xml:",chardata" json:"-" yaml:"-"` - Xref []Xref `xml:"a" json:"-" yaml:"-"` -} - -// Strong ... -type Strong struct { - Q []Q `xml:"q" json:"-" yaml:"-"` - Code []Code `xml:"code" json:"-" yaml:"-"` - EM []EM `xml:"em" json:"-" yaml:"-"` - Strong []Strong `xml:"strong" json:"-" yaml:"-"` - B []B `xml:"b" json:"-" yaml:"-"` - I []I `xml:"i" json:"-" yaml:"-"` - Sub []Sub `xml:"sub" json:"-" yaml:"-"` - Sup []Sup `xml:"sup" json:"-" yaml:"-"` - Value string `xml:",chardata" json:"-" yaml:"-"` - Xref []Xref `xml:"a" json:"-" yaml:"-"` -} - -// I ... -type I struct { - Q []Q `xml:"q" json:"-" yaml:"-"` - Code []Code `xml:"code" json:"-" yaml:"-"` - EM []EM `xml:"em" json:"-" yaml:"-"` - Strong []Strong `xml:"strong" json:"-" yaml:"-"` - B []B `xml:"b" json:"-" yaml:"-"` - I []I `xml:"i" json:"-" yaml:"-"` - Sub []Sub `xml:"sub" json:"-" yaml:"-"` - Sup []Sup `xml:"sup" json:"-" yaml:"-"` - Value string `xml:",chardata" json:"-" yaml:"-"` - Xref []Xref `xml:"a" json:"-" yaml:"-"` -} - -// B ... -type B struct { - Q []Q `xml:"q" json:"-" yaml:"-"` - Code []Code `xml:"code" json:"-" yaml:"-"` - EM []EM `xml:"em" json:"-" yaml:"-"` - Strong []Strong `xml:"strong" json:"-" yaml:"-"` - B []B `xml:"b" json:"-" yaml:"-"` - I []I `xml:"i" json:"-" yaml:"-"` - Sub []Sub `xml:"sub" json:"-" yaml:"-"` - Sup []Sup `xml:"sup" json:"-" yaml:"-"` - Value string `xml:",chardata" json:"-" yaml:"-"` - Xref []Xref `xml:"a" json:"-" yaml:"-"` -} - -// Sub ... -type Sub struct { - OptionalClass string `xml:"class,attr"` - Value string `xml:",chardata"` -} - -// Sup ... -type Sup struct { - OptionalClass string `xml:"class,attr"` - Value string `xml:",chardata"` -} - -// Span ... -type Span struct { - OptionalClass string `xml:"class,attr"` - Q []Q `xml:"q" json:"-" yaml:"-"` - Code []Code `xml:"code" json:"-" yaml:"-"` - EM []EM `xml:"em" json:"-" yaml:"-"` - Strong []Strong `xml:"strong" json:"-" yaml:"-"` - B []B `xml:"b" json:"-" yaml:"-"` - I []I `xml:"i" json:"-" yaml:"-"` - Sub []Sub `xml:"sub" json:"-" yaml:"-"` - Sup []Sup `xml:"sup" json:"-" yaml:"-"` - Value string `xml:",chardata"` - Xref []Xref `xml:"a" json:"xrefs" yaml:"xrefs"` -} - -// Xref ... -type Xref struct { - Href *Href `xml:"href,attr" json:"href" yaml:"href"` - Q []Q `xml:"q" json:"-" yaml:"-"` - Code []Code `xml:"code" json:"-" yaml:"-"` - EM []struct { - OptionalClass string `xml:"class,attr"` - Value string `xml:",chardata"` - } `xml:"em" json:"-" yaml:"-"` - Value string `xml:",chardata" json:"value" yaml:"value"` -} - -// Assign ... -type Assign struct { - ID string `xml:"id,attr"` - ParamID string `xml:"param-id"` -} - -func formatRawProse(raw string) string { - lines := strings.Split(raw, "\n") - - value := []string{} - - for _, line := range lines { - value = append(value, strings.TrimSpace(line)) - } - - return strings.Join(value, " ") -} - -func traverseParts(part *Part, parameterID, parameterVal string) { - if part == nil { - return - } - if part.Prose == nil { - return - } - - part.Prose.ReplaceInsertParams(parameterID, parameterVal) - if len(part.Parts) == 0 { - return - } - for i := range part.Parts { - traverseParts(&part.Parts[i], parameterID, parameterVal) - } - return -} - -// ModifyProse modifies prose insert parameter template -func (part *Part) ModifyProse(parameterID, parameterVal string) { - traverseParts(part, parameterID, parameterVal) -} diff --git a/types/oscal/nominal_catalog/import.go b/types/oscal/nominal_catalog/import.go new file mode 100644 index 00000000..ed4492e3 --- /dev/null +++ b/types/oscal/nominal_catalog/import.go @@ -0,0 +1,7 @@ +package nominal_catalog + +import ( + "github.com/docker/oscalkit/types/oscal/validation_root" +) + +type Markup = validation_root.Markup diff --git a/types/oscal/nominal_catalog/prose.go b/types/oscal/nominal_catalog/prose.go new file mode 100644 index 00000000..fc174956 --- /dev/null +++ b/types/oscal/nominal_catalog/prose.go @@ -0,0 +1,6 @@ +package nominal_catalog + +// ModifyProse modifies prose insert parameter template +func (part *Part) ModifyProse(parameterID, parameterVal string) { + panic("Part.ModifyProse() needs to be re-implemented") +} diff --git a/types/oscal/system_security_plan/import.go b/types/oscal/system_security_plan/import.go new file mode 100644 index 00000000..ad721a91 --- /dev/null +++ b/types/oscal/system_security_plan/import.go @@ -0,0 +1,7 @@ +package system_security_plan + +import ( + "github.com/docker/oscalkit/types/oscal/validation_root" +) + +type Markup = validation_root.Markup diff --git a/types/oscal/validation_root/markup.go b/types/oscal/validation_root/markup.go new file mode 100644 index 00000000..e946acf2 --- /dev/null +++ b/types/oscal/validation_root/markup.go @@ -0,0 +1,6 @@ +package validation_root + +// Markup ... +type Markup struct { + Raw string +} From 8d6164eea19510ad35ef76776a0474f6085ee4f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 13 Jan 2020 13:46:24 +0100 Subject: [PATCH 057/110] Markup field has to be referred to by pointer Even though it is just a string for now. We will later need to have struct built around the string. --- metaschema/metaschema.go | 2 +- .../oscal/nominal_catalog/nominal_catalog.go | 4 +- .../system_security_plan.go | 74 +++++++++---------- .../oscal/validation_root/validation_root.go | 20 ++--- 4 files changed, 50 insertions(+), 50 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 6f3e9eff..08d45333 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -281,7 +281,7 @@ func (df *DefineField) GoName() string { } func (df *DefineField) RequiresPointer() bool { - return len(df.Flags) > 0 + return len(df.Flags) > 0 || df.IsMarkup() } func (f *DefineField) GoComment() string { diff --git a/types/oscal/nominal_catalog/nominal_catalog.go b/types/oscal/nominal_catalog/nominal_catalog.go index 31749ca0..37a9c0dd 100644 --- a/types/oscal/nominal_catalog/nominal_catalog.go +++ b/types/oscal/nominal_catalog/nominal_catalog.go @@ -44,7 +44,7 @@ type Param struct { type Guideline struct { // Prose permits multiple paragraphs, lists, tables etc. - Prose Prose `xml:"prose,omitempty" json:"prose,omitempty"` + Prose *Prose `xml:"prose,omitempty" json:"prose,omitempty"` } // Presenting a choice among alternatives @@ -74,7 +74,7 @@ type Part struct { // A value with a name, attributed to the containing control, part, or group. Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // Prose permits multiple paragraphs, lists, tables etc. - Prose Prose `xml:"prose,omitempty" json:"prose,omitempty"` + Prose *Prose `xml:"prose,omitempty" json:"prose,omitempty"` // A reference to a local or remote resource Links []Link `xml:"links,omitempty" json:"links,omitempty"` // A partition or component of a control or part diff --git a/types/oscal/system_security_plan/system_security_plan.go b/types/oscal/system_security_plan/system_security_plan.go index c2c0ca71..ac161ff3 100644 --- a/types/oscal/system_security_plan/system_security_plan.go +++ b/types/oscal/system_security_plan/system_security_plan.go @@ -32,7 +32,7 @@ type ImportProfile struct { Href string `xml:"href,attr,omitempty" json:"href,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` } // Contains the characteristics of the system, such as its name, purpose, and security impact level. @@ -45,7 +45,7 @@ type SystemCharacteristics struct { // A short name for the system, such as an acronym, that is suitable for display in a data table or summary list. SystemNameShort SystemNameShort `xml:"system-name-short,omitempty" json:"systemNameShort,omitempty"` // A free-text description of the system. - Description Description `xml:"description,omitempty" json:"description,omitempty"` + Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource @@ -55,7 +55,7 @@ type SystemCharacteristics struct { // The overall information system sensitivity categorization, such as defined by . SecuritySensitivityLevel SecuritySensitivityLevel `xml:"security-sensitivity-level,omitempty" json:"securitySensitivityLevel,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // Contains details about all information types that are stored, processed, or transmitted by the system, such as privacy information, and those defined in . @@ -98,7 +98,7 @@ type InformationType struct { Name string `xml:"name,attr,omitempty" json:"name,omitempty"` // A description supporting the parent item. - Description Description `xml:"description,omitempty" json:"description,omitempty"` + Description *Description `xml:"description,omitempty" json:"description,omitempty"` // An identifier qualified by the given identification used, such as NIST SP 800-60. InformationTypeIds []InformationTypeId `xml:"information-type-ids,omitempty" json:"informationTypeIds,omitempty"` // A value with a name, attributed to the containing control, part, or group. @@ -121,7 +121,7 @@ type ConfidentialityImpact struct { // The selected (Confidentiality, Integrity, or Availability) security impact level. Selected Selected `xml:"selected,omitempty" json:"selected,omitempty"` // If the selected security level is different from the base security level, this contains the justification for the change. - AdjustmentJustification AdjustmentJustification `xml:"adjustment-justification,omitempty" json:"adjustmentJustification,omitempty"` + AdjustmentJustification *AdjustmentJustification `xml:"adjustment-justification,omitempty" json:"adjustmentJustification,omitempty"` } // The expected level of impact resulting from the unauthorized modification of information. @@ -134,7 +134,7 @@ type IntegrityImpact struct { // The selected (Confidentiality, Integrity, or Availability) security impact level. Selected Selected `xml:"selected,omitempty" json:"selected,omitempty"` // If the selected security level is different from the base security level, this contains the justification for the change. - AdjustmentJustification AdjustmentJustification `xml:"adjustment-justification,omitempty" json:"adjustmentJustification,omitempty"` + AdjustmentJustification *AdjustmentJustification `xml:"adjustment-justification,omitempty" json:"adjustmentJustification,omitempty"` } // The expected level of impact resulting from the disruption of access to or use of information or the information system. @@ -147,7 +147,7 @@ type AvailabilityImpact struct { // The selected (Confidentiality, Integrity, or Availability) security impact level. Selected Selected `xml:"selected,omitempty" json:"selected,omitempty"` // If the selected security level is different from the base security level, this contains the justification for the change. - AdjustmentJustification AdjustmentJustification `xml:"adjustment-justification,omitempty" json:"adjustmentJustification,omitempty"` + AdjustmentJustification *AdjustmentJustification `xml:"adjustment-justification,omitempty" json:"adjustmentJustification,omitempty"` } // The overall level of expected impact resulting from unauthorized disclosure, modification, or loss of access to information. @@ -168,7 +168,7 @@ type Status struct { State string `xml:"state,attr,omitempty" json:"state,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` } // A description of another authorized system from which this system inherits capabilities that satisfy security requirements. Another term for this concept is a . @@ -188,7 +188,7 @@ type LeveragedAuthorization struct { // The date this system received its authorization. DateAuthorized DateAuthorized `xml:"date-authorized,omitempty" json:"dateAuthorized,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` } @@ -197,13 +197,13 @@ type LeveragedAuthorization struct { type AuthorizationBoundary struct { // A description supporting the parent item. - Description Description `xml:"description,omitempty" json:"description,omitempty"` + Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Commentary about the system's authorization boundary that enhances the diagram. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A visual depiction of the system's authorization boundary. @@ -217,7 +217,7 @@ type Diagram struct { Id string `xml:"id,attr,omitempty" json:"id,omitempty"` // A description of the diagram (e.g., alternate text). This can be used to support compliance with requirements from Section 508 of the United States Workforce Rehabilitation Act of 1973. - Description Description `xml:"description,omitempty" json:"description,omitempty"` + Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource @@ -225,20 +225,20 @@ type Diagram struct { // A brief caption to annotate the diagram. Caption Caption `xml:"caption,omitempty" json:"caption,omitempty"` // Commentary about the diagram that enhances it. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` } // A description of the system's network architecture, optionally supplemented by diagrams that illustrate the network architecture. type NetworkArchitecture struct { // A description supporting the parent item. - Description Description `xml:"description,omitempty" json:"description,omitempty"` + Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A graphic that provides a visual representation the system, or some aspect of it. @@ -249,13 +249,13 @@ type NetworkArchitecture struct { type DataFlow struct { // A description supporting the parent item. - Description Description `xml:"description,omitempty" json:"description,omitempty"` + Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A graphic that provides a visual representation the system, or some aspect of it. @@ -270,7 +270,7 @@ type SystemImplementation struct { // A reference to a local or remote resource Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A type of user that interacts with the system based on an associated role. @@ -296,7 +296,7 @@ type User struct { // A common name, short name or acronym ShortName ShortName `xml:"short-name,omitempty" json:"shortName,omitempty"` // A description supporting the parent item. - Description Description `xml:"description,omitempty" json:"description,omitempty"` + Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource @@ -304,7 +304,7 @@ type User struct { // A reference to the roles served by the user. RoleIds []RoleId `xml:"role-ids,omitempty" json:"roleIds,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // Identifies a specific system privilege held by the user, along with an associated description and/or rationale for the privilege. @@ -318,7 +318,7 @@ type AuthorizedPrivilege struct { Name string `xml:"name,attr,omitempty" json:"name,omitempty"` // A description supporting the parent item. - Description Description `xml:"description,omitempty" json:"description,omitempty"` + Description *Description `xml:"description,omitempty" json:"description,omitempty"` // Describes a function performed for a given authorized privilege by this user class. FunctionsPerformed []FunctionPerformed `xml:"functions-performed,omitempty" json:"functionsPerformed,omitempty"` } @@ -334,13 +334,13 @@ type Component struct { ComponentType string `xml:"component-type,attr,omitempty" json:"componentType,omitempty"` // A description of the component, including information about its function. - Description Description `xml:"description,omitempty" json:"description,omitempty"` + Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // Describes the operational status of the system. @@ -358,7 +358,7 @@ type Service struct { Name string `xml:"name,attr,omitempty" json:"name,omitempty"` // A description of what the service provides. - Description Description `xml:"description,omitempty" json:"description,omitempty"` + Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource @@ -366,7 +366,7 @@ type Service struct { // A summary of the technological or business purpose of the service. Purpose Purpose `xml:"purpose,omitempty" json:"purpose,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // Information about the protocol used to provide a service. @@ -396,7 +396,7 @@ type Interconnection struct { // A reference to a local or remote resource Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. @@ -407,7 +407,7 @@ type Interconnection struct { type SystemInventory struct { // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A single managed inventory item within the system. InventoryItems []InventoryItem `xml:"inventory-items,omitempty" json:"inventoryItems,omitempty"` } @@ -421,13 +421,13 @@ type InventoryItem struct { AssetId string `xml:"asset-id,attr,omitempty" json:"assetId,omitempty"` // A description supporting the parent item. - Description Description `xml:"description,omitempty" json:"description,omitempty"` + Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. @@ -449,7 +449,7 @@ type ImplementedComponent struct { // A reference to a local or remote resource Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. @@ -460,7 +460,7 @@ type ImplementedComponent struct { type ControlImplementation struct { // A description supporting the parent item. - Description Description `xml:"description,omitempty" json:"description,omitempty"` + Description *Description `xml:"description,omitempty" json:"description,omitempty"` // Describes how the system satisfies an individual control. ImplementedRequirements []ImplementedRequirement `xml:"implemented-requirements,omitempty" json:"implementedRequirements,omitempty"` } @@ -474,13 +474,13 @@ type ImplementedRequirement struct { ControlId string `xml:"control-id,attr,omitempty" json:"controlId,omitempty"` // A description supporting the parent item. - Description Description `xml:"description,omitempty" json:"description,omitempty"` + Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` // Defines how the referenced component implements a set of controls. @@ -500,13 +500,13 @@ type Statement struct { StatementId string `xml:"statement-id,attr,omitempty" json:"statementId,omitempty"` // A description supporting the parent item. - Description Description `xml:"description,omitempty" json:"description,omitempty"` + Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A reference to one or more roles with responsibility for performing a function relative to the control. ResponsibleRoles []ResponsibleRole `xml:"responsible-roles,omitempty" json:"responsibleRoles,omitempty"` // Defines how the referenced component implements a set of controls. @@ -526,7 +526,7 @@ type ResponsibleRole struct { // References a defined in . PartyIds []PartyId `xml:"party-ids,omitempty" json:"partyIds,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` } @@ -538,7 +538,7 @@ type ByComponent struct { ComponentId string `xml:"component-id,attr,omitempty" json:"componentId,omitempty"` // A description supporting the parent item. - Description Description `xml:"description,omitempty" json:"description,omitempty"` + Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource diff --git a/types/oscal/validation_root/validation_root.go b/types/oscal/validation_root/validation_root.go index a48dfb6e..06d01655 100644 --- a/types/oscal/validation_root/validation_root.go +++ b/types/oscal/validation_root/validation_root.go @@ -7,9 +7,9 @@ import () type VALIDATIONRoot struct { // A description supporting the parent item. - Description Description `xml:"description,omitempty" json:"description,omitempty"` + Description *Description `xml:"description,omitempty" json:"description,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // References a defined in . PartyId PartyId `xml:"party-id,omitempty" json:"partyId,omitempty"` // Provides information about the publication and availability of the containing document. @@ -42,7 +42,7 @@ type Metadata struct { // A reference to a local or remote resource Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // Defining a role to be assigned to a party Roles []Role `xml:"roles,omitempty" json:"roles,omitempty"` // A responsible entity, either singular (an organization or person) or collective (multiple persons) @@ -73,7 +73,7 @@ type Annotation struct { Value string `xml:"value,attr,omitempty" json:"value,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` } // A responsible entity, either singular (an organization or person) or collective (multiple persons) @@ -87,7 +87,7 @@ type Party struct { // A reference to a local or remote resource Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A person, with contact information Persons []Person `xml:"persons,omitempty" json:"persons,omitempty"` // An organization or legal entity (not a person), with contact information @@ -120,7 +120,7 @@ type Person struct { // A reference to a local or remote resource Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A postal address. Addresses []Address `xml:"addresses,omitempty" json:"addresses,omitempty"` // A name/value pair with optional explanatory remarks. @@ -147,7 +147,7 @@ type Org struct { // A reference to a local or remote resource Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A postal address. Addresses []Address `xml:"addresses,omitempty" json:"addresses,omitempty"` // A name/value pair with optional explanatory remarks. @@ -197,7 +197,7 @@ type Resource struct { // Base64 *Base64 `xml:"base64,omitempty" json:"base64,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A pointer to an external copy of a document with optional hash for verification Rlinks []Rlink `xml:"rlinks,omitempty" json:"rlinks,omitempty"` } @@ -219,7 +219,7 @@ type Role struct { // A reference to a local or remote resource Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` } @@ -237,7 +237,7 @@ type ResponsibleParty struct { // A reference to a local or remote resource Links []Link `xml:"links,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. - Remarks Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` } From 62816f7b908a3c929506f808b12564a65da198b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 13 Jan 2020 15:04:51 +0100 Subject: [PATCH 058/110] Fix compilation - SetParam has been renamed to Param in master OSCAL repo. --- generator/manipulation.go | 2 +- impl/implementation.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/generator/manipulation.go b/generator/manipulation.go index b1fded1a..eaa13324 100644 --- a/generator/manipulation.go +++ b/generator/manipulation.go @@ -67,7 +67,7 @@ func ProcessAlterations(alterations []profile.Alter, c *catalog.Catalog) *catalo } // ProcessSetParam processes set-param of a profile -func ProcessSetParam(setParams []profile.SetParam, c *catalog.Catalog, catalogHelper impl.Catalog) *catalog.Catalog { +func ProcessSetParam(setParams []catalog.Param, c *catalog.Catalog, catalogHelper impl.Catalog) *catalog.Catalog { for _, sp := range setParams { ctrlID := catalogHelper.GetControl(sp.Id) for i, g := range c.Groups { diff --git a/impl/implementation.go b/impl/implementation.go index 52bac6d8..1453a78c 100644 --- a/impl/implementation.go +++ b/impl/implementation.go @@ -314,7 +314,7 @@ func (*NISTCatalog) isSubControl(s string) bool { } // GenerateImplementationParameter GenerateImplementationParameter -func GenerateImplementationParameter(param profile.SetParam, guidance []string) implementation.Parameter { +func GenerateImplementationParameter(param catalog.Param, guidance []string) implementation.Parameter { return implementation.Parameter{ ParameterID: param.Id, PossibleValues: func() []string { From 82b52e52876bbaef5130e2435a74420ae65f70ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 13 Jan 2020 16:54:49 +0100 Subject: [PATCH 059/110] Fix compilation - Href is no longer struct It feels we don't need to over complicate this. Also, refactor ValidateHref to proper public instance method. --- generator/mapper.go | 8 +++--- generator/profile.go | 33 +++++++++++----------- generator/validator.go | 20 -------------- types/oscal/catalog/href.go | 52 ----------------------------------- types/oscal/profile/import.go | 28 +++++++++++++++++++ 5 files changed, 48 insertions(+), 93 deletions(-) delete mode 100644 generator/validator.go delete mode 100644 types/oscal/catalog/href.go create mode 100644 types/oscal/profile/import.go diff --git a/generator/mapper.go b/generator/mapper.go index 0c23a07b..316806cc 100644 --- a/generator/mapper.go +++ b/generator/mapper.go @@ -32,7 +32,7 @@ func CreateCatalogsFromProfile(profileArg *profile.Profile) ([]*catalog.Catalog, logrus.Debug("processing alteration and parameters... \nmapping to controls...") // Get first import of the profile (which is a catalog) for _, profileImport := range profileArg.Imports { - err := ValidateHref(profileImport.Href) + err := profileImport.ValidateHref() if err != nil { return nil, err } @@ -43,7 +43,7 @@ func CreateCatalogsFromProfile(profileArg *profile.Profile) ([]*catalog.Catalog, ctx, cancel := context.WithCancel(context.Background()) defer cancel() // ForEach Import's Href, Fetch the Catalog JSON file - getCatalogForImport(ctx, profileImport, c, e, profileImport.Href.String()) + getCatalogForImport(ctx, profileImport, c, e, profileImport.Href) select { case importedCatalog := <-c: // Prepare a new catalog object to merge into the final List of OutputCatalogs @@ -168,12 +168,12 @@ func GetMappedCatalogControlsFromImport(importedCatalog *catalog.Catalog, profil func getCatalogForImport(ctx context.Context, i profile.Import, c chan *catalog.Catalog, e chan error, basePath string) { go func(i profile.Import) { - err := ValidateHref(i.Href) + err := i.ValidateHref() if err != nil { e <- fmt.Errorf("href cannot be nil") return } - path, err := GetFilePath(i.Href.String()) + path, err := GetFilePath(i.Href) if err != nil { e <- err return diff --git a/generator/profile.go b/generator/profile.go index 931535c7..4f729e2a 100644 --- a/generator/profile.go +++ b/generator/profile.go @@ -9,7 +9,6 @@ import ( "sync" "github.com/docker/oscalkit/types/oscal" - "github.com/docker/oscalkit/types/oscal/catalog" "github.com/docker/oscalkit/types/oscal/profile" ) @@ -37,19 +36,19 @@ func findAlter(p *profile.Profile, call profile.Call) (*profile.Alter, bool, err } } for _, imp := range p.Imports { - err := ValidateHref(imp.Href) + err := imp.ValidateHref() if err != nil { return nil, false, err } - path := imp.Href.String() - if isHTTPResource(imp.Href.URL) { + path := imp.Href + if imp.IsHttpResource() { pathmap.Lock() - if v, ok := pathmap.m[imp.Href.String()]; !ok { - path, err = GetFilePath(imp.Href.String()) + if v, ok := pathmap.m[imp.Href]; !ok { + path, err = GetFilePath(imp.Href) if err != nil { return nil, false, err } - pathmap.m[imp.Href.String()] = path + pathmap.m[imp.Href] = path } else { path = v } @@ -68,7 +67,7 @@ func findAlter(p *profile.Profile, call profile.Call) (*profile.Alter, bool, err if o.Profile == nil { continue } - p, err = SetBasePath(o.Profile, imp.Href.String()) + p, err = SetBasePath(o.Profile, imp.Href) if err != nil { return nil, false, err } @@ -137,7 +136,7 @@ func GetAlters(p *profile.Profile) ([]profile.Alter, error) { // SetBasePath sets up base paths for profiles func SetBasePath(p *profile.Profile, parentPath string) (*profile.Profile, error) { for i, x := range p.Imports { - err := ValidateHref(x.Href) + err := x.ValidateHref() if err != nil { return nil, err } @@ -146,19 +145,19 @@ func SetBasePath(p *profile.Profile, parentPath string) (*profile.Profile, error return nil, err } // If the import href is http. Do nothing as it doesn't depend on the parent path - if isHTTPResource(x.Href.URL) { + if x.IsHttpResource() { continue } //if parent is HTTP, and imports are relative, modify imports to http - if !isHTTPResource(x.Href.URL) && isHTTPResource(parentURL) { - url, err := makeURL(parentURL, x.Href.URL) + if isHTTPResource(parentURL) { + url, err := makeURL(parentURL, x.Href) if err != nil { return nil, err } - p.Imports[i].Href = &catalog.Href{URL: url} + p.Imports[i].Href = url.String() continue } - path := fmt.Sprintf("%s/%s", path.Dir(parentPath), path.Base(x.Href.String())) + path := fmt.Sprintf("%s/%s", path.Dir(parentPath), path.Base(x.Href)) path, err = filepath.Abs(path) if err != nil { return nil, err @@ -167,13 +166,13 @@ func SetBasePath(p *profile.Profile, parentPath string) (*profile.Profile, error if err != nil { return nil, err } - p.Imports[i].Href = &catalog.Href{URL: uri} + p.Imports[i].Href = uri.String() } return p, nil } -func makeURL(url, child *url.URL) (*url.URL, error) { - newURL, err := url.Parse(fmt.Sprintf("%s://%s%s/%s", url.Scheme, url.Host, path.Dir(url.Path), child.String())) +func makeURL(url *url.URL, child string) (*url.URL, error) { + newURL, err := url.Parse(fmt.Sprintf("%s://%s%s/%s", url.Scheme, url.Host, path.Dir(url.Path), child)) if err != nil { return nil, err } diff --git a/generator/validator.go b/generator/validator.go deleted file mode 100644 index 0c1235b3..00000000 --- a/generator/validator.go +++ /dev/null @@ -1,20 +0,0 @@ -package generator - -import ( - "fmt" - "net/url" - - "github.com/docker/oscalkit/types/oscal/catalog" -) - -func ValidateHref(href *catalog.Href) error { - if href == nil { - return fmt.Errorf("Href cannot be empty") - } - - _, err := url.Parse(href.String()) - if err != nil { - return err - } - return nil -} diff --git a/types/oscal/catalog/href.go b/types/oscal/catalog/href.go deleted file mode 100644 index 06d54360..00000000 --- a/types/oscal/catalog/href.go +++ /dev/null @@ -1,52 +0,0 @@ -package catalog - -import ( - "encoding/json" - "encoding/xml" - "net/url" -) - -type Href struct { - *url.URL -} - -// UnmarshalXMLAttr unmarshals an href to a url.URL -func (h *Href) UnmarshalXMLAttr(attr xml.Attr) error { - url, err := url.Parse(attr.Value) - if err != nil { - return err - } - - *h = Href{url} - - return nil -} - -func (h *Href) UnmarshalJSON(b []byte) error { - s := string(b) - s = s[1 : len(s)-1] - url, err := url.Parse(s) - if err != nil { - return err - } - h.URL = url - return nil -} - -func (h *Href) MarshalJSON() ([]byte, error) { - if h.URL != nil { - return json.Marshal(h.String()) - } - - return json.Marshal("") -} - -func (h *Href) MarshalXMLAttr(name xml.Name) (xml.Attr, error) { - if h.URL != nil { - rawURI := h.URL.String() - - return xml.Attr{Name: name, Value: rawURI}, nil - } - - return xml.Attr{Name: name}, nil -} diff --git a/types/oscal/profile/import.go b/types/oscal/profile/import.go new file mode 100644 index 00000000..c241c7ae --- /dev/null +++ b/types/oscal/profile/import.go @@ -0,0 +1,28 @@ +package profile + +import ( + "errors" + "net/url" + "strings" +) + +// IsHttpResource returns true if import refers to http resource +func (i *Import) IsHttpResource() bool { + url, err := url.Parse(i.Href) + if err != nil { + return false + } + return strings.HasPrefix(url.Scheme, "http") +} + +// Validates that profile import contains valid href +func (i *Import) ValidateHref() error { + if i.Href == "" { + return errors.New("href cannot be empty") + } + _, err := url.Parse(i.Href) + if err != nil { + return err + } + return nil +} From ba40798d07a4b8020a086ef90bd2566d9fe42163 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 13 Jan 2020 19:16:53 +0100 Subject: [PATCH 060/110] Fix compilation - ParamSettings has been renamed to Settings within Modify element --- generator/mapper.go | 2 +- generator/profile.go | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/generator/mapper.go b/generator/mapper.go index 316806cc..bbff0b84 100644 --- a/generator/mapper.go +++ b/generator/mapper.go @@ -50,7 +50,7 @@ func CreateCatalogsFromProfile(profileArg *profile.Profile) ([]*catalog.Catalog, if profileArg.Modify != nil { nc := impl.NISTCatalog{} importedCatalog = ProcessAlterations(alterations, importedCatalog) - importedCatalog = ProcessSetParam(profileArg.Modify.ParamSettings, importedCatalog, &nc) + importedCatalog = ProcessSetParam(profileArg.Modify.Settings, importedCatalog, &nc) } newCatalog, err := GetMappedCatalogControlsFromImport(importedCatalog, profileImport, &catalogHelper) if err != nil { diff --git a/generator/profile.go b/generator/profile.go index 4f729e2a..833d817e 100644 --- a/generator/profile.go +++ b/generator/profile.go @@ -26,8 +26,8 @@ func findAlter(p *profile.Profile, call profile.Call) (*profile.Alter, bool, err if p.Modify == nil { p.Modify = &profile.Modify{ - Alterations: []profile.Alter{}, - ParamSettings: []profile.SetParam{}, + Alterations: []profile.Alter{}, + Settings: []profile.SetParam{}, } } for _, alt := range p.Modify.Alterations { @@ -105,8 +105,8 @@ func GetAlters(p *profile.Profile) ([]profile.Alter, error) { found := false if p.Modify == nil { p.Modify = &profile.Modify{ - Alterations: []profile.Alter{}, - ParamSettings: []profile.SetParam{}, + Alterations: []profile.Alter{}, + Settings: []profile.SetParam{}, } } for _, alt := range p.Modify.Alterations { From 456a679d21fca4467178cac47df2fc6f30e05db5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 13 Jan 2020 19:20:50 +0100 Subject: [PATCH 061/110] Fix compilation - SetParam has been renamed to Set --- generator/profile.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/generator/profile.go b/generator/profile.go index 833d817e..4c148854 100644 --- a/generator/profile.go +++ b/generator/profile.go @@ -27,7 +27,7 @@ func findAlter(p *profile.Profile, call profile.Call) (*profile.Alter, bool, err if p.Modify == nil { p.Modify = &profile.Modify{ Alterations: []profile.Alter{}, - Settings: []profile.SetParam{}, + Settings: []profile.Set{}, } } for _, alt := range p.Modify.Alterations { @@ -106,7 +106,7 @@ func GetAlters(p *profile.Profile) ([]profile.Alter, error) { if p.Modify == nil { p.Modify = &profile.Modify{ Alterations: []profile.Alter{}, - Settings: []profile.SetParam{}, + Settings: []profile.Set{}, } } for _, alt := range p.Modify.Alterations { From dd924429ed7c3a68a739f2d28b113ea4d4a2e5ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 13 Jan 2020 20:24:25 +0100 Subject: [PATCH 062/110] Fix compilation - misc fixes --- generator/manipulation.go | 6 +++--- generator/mapper.go | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/generator/manipulation.go b/generator/manipulation.go index eaa13324..693805e6 100644 --- a/generator/manipulation.go +++ b/generator/manipulation.go @@ -67,9 +67,9 @@ func ProcessAlterations(alterations []profile.Alter, c *catalog.Catalog) *catalo } // ProcessSetParam processes set-param of a profile -func ProcessSetParam(setParams []catalog.Param, c *catalog.Catalog, catalogHelper impl.Catalog) *catalog.Catalog { +func ProcessSetParam(setParams []profile.Set, c *catalog.Catalog, catalogHelper impl.Catalog) *catalog.Catalog { for _, sp := range setParams { - ctrlID := catalogHelper.GetControl(sp.Id) + ctrlID := catalogHelper.GetControl(sp.ParamId) for i, g := range c.Groups { for j, catalogCtrl := range g.Controls { if ctrlID == catalogCtrl.Id { @@ -77,7 +77,7 @@ func ProcessSetParam(setParams []catalog.Param, c *catalog.Catalog, catalogHelpe if len(sp.Constraints) == 0 { continue } - c.Groups[i].Controls[j].Parts[k].ModifyProse(sp.Id, sp.Constraints[0].Value) + c.Groups[i].Controls[j].Parts[k].ModifyProse(sp.ParamId, sp.Constraints[0].Value) } } } diff --git a/generator/mapper.go b/generator/mapper.go index bbff0b84..223c223b 100644 --- a/generator/mapper.go +++ b/generator/mapper.go @@ -99,8 +99,8 @@ func getSubControl(call profile.Call, ctrls []catalog.Control, helper impl.Catal // GetMappedCatalogControlsFromImport gets mapped controls in catalog per profile import func GetMappedCatalogControlsFromImport(importedCatalog *catalog.Catalog, profileImport profile.Import, catalogHelper impl.Catalog) (catalog.Catalog, error) { newCatalog := catalog.Catalog{ - Title: importedCatalog.Title, - Groups: []catalog.Group{}, + Metadata: importedCatalog.Metadata, + Groups: []catalog.Group{}, } for _, group := range importedCatalog.Groups { From 3a60dfafd46c18bd90ca55ea850e3e188cf6e79e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 13 Jan 2020 21:52:33 +0100 Subject: [PATCH 063/110] Remove hard-coded over abundant items Not sure why these were added, but they certainly are no longer needed. Addressing: oscal generate catalogs --profile profile.xml --- metaschema/types.tmpl | 4 ---- types/oscal/profile/profile.go | 2 -- 2 files changed, 6 deletions(-) diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index 7f1562c5..3a5e2d60 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -11,10 +11,6 @@ type {{toCamel .Name}} struct { {{if .RepresentsRootElement }} XMLName xml.Name `xml:"http://csrc.nist.gov/ns/oscal/1.0 {{ .Name }}" json:"-"` {{- end}} - {{- if eq "profile" .Name}} - ID string `xml:"id,attr,omitempty" json:"id,omitempty"` - Title string `xml:"title,omitempty" json:"title,omitempty"` - {{- end}} {{- range .Flags}} // {{ .GoComment }} {{- if and (eq "id" .Name) (eq "profile" $packageName)}} diff --git a/types/oscal/profile/profile.go b/types/oscal/profile/profile.go index c248fec8..dcc19ad5 100644 --- a/types/oscal/profile/profile.go +++ b/types/oscal/profile/profile.go @@ -12,8 +12,6 @@ import ( // Each OSCAL profile is defined by a Profile element type Profile struct { XMLName xml.Name `xml:"http://csrc.nist.gov/ns/oscal/1.0 profile" json:"-"` - ID string `xml:"id,attr,omitempty" json:"id,omitempty"` - Title string `xml:"title,omitempty" json:"title,omitempty"` // Unique identifier of the containing object Id string `xml:"id,attr,omitempty" json:"id,omitempty"` From 52b8ce92499c72c8befc8a237bcf758298421417 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Tue, 14 Jan 2020 10:20:16 +0100 Subject: [PATCH 064/110] Provide initial `oscalkit info` command With growing number of formats/components, users will be surely confused at start. Let's provide them with info command. --- cli/cmd/cmd.go | 1 + cli/cmd/info.go | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 cli/cmd/info.go diff --git a/cli/cmd/cmd.go b/cli/cmd/cmd.go index a01a279a..fb9998be 100644 --- a/cli/cmd/cmd.go +++ b/cli/cmd/cmd.go @@ -37,6 +37,7 @@ func Execute() error { return nil } app.Commands = []cli.Command{ + Info, convert.Convert, Validate, Sign, diff --git a/cli/cmd/info.go b/cli/cmd/info.go new file mode 100644 index 00000000..f912e7ba --- /dev/null +++ b/cli/cmd/info.go @@ -0,0 +1,50 @@ +package cmd + +import ( + "fmt" + "os" + + "github.com/docker/oscalkit/generator" + "github.com/docker/oscalkit/types/oscal" + "github.com/urfave/cli" +) + +// Catalog generates json/xml catalogs +var Info = cli.Command{ + Name: "info", + Usage: "Provides information about particular OSCAL resource", + ArgsUsage: "[file]", + Action: func(c *cli.Context) error { + for _, filePath := range c.Args() { + profilePath, err := generator.GetAbsolutePath(filePath) + if err != nil { + return cli.NewExitError(fmt.Sprintf("cannot get absolute path, err: %v", err), 1) + } + + _, err = os.Stat(profilePath) + if err != nil { + return cli.NewExitError(fmt.Sprintf("cannot fetch file, err %v", err), 1) + } + f, err := os.Open(profilePath) + if err != nil { + return cli.NewExitError(err, 1) + } + defer f.Close() + + o, err := oscal.New(f) + if err != nil { + return cli.NewExitError(err, 1) + } + if o.Profile != nil { + fmt.Println("OSCAL Profile") + return nil + } + if o.Catalog != nil { + fmt.Println("OSCAL Catalog") + return nil + } + return cli.NewExitError("Unrecognized OSCAL resource", 1) + } + return cli.NewExitError("No file provided", 1) + }, +} From 512f550773f0bca599385b7b90fde84c46dda348 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Tue, 14 Jan 2020 10:40:38 +0100 Subject: [PATCH 065/110] Print out metadata information about profiles and catalogs --- cli/cmd/info.go | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/cli/cmd/info.go b/cli/cmd/info.go index f912e7ba..88909f96 100644 --- a/cli/cmd/info.go +++ b/cli/cmd/info.go @@ -6,6 +6,7 @@ import ( "github.com/docker/oscalkit/generator" "github.com/docker/oscalkit/types/oscal" + "github.com/docker/oscalkit/types/oscal/catalog" "github.com/urfave/cli" ) @@ -36,11 +37,15 @@ var Info = cli.Command{ return cli.NewExitError(err, 1) } if o.Profile != nil { - fmt.Println("OSCAL Profile") + fmt.Println("OSCAL Profile (represents subset of controls from OSCAL catalog(s))") + fmt.Println("ID:\t", o.Profile.Id) + printMetadata(o.Profile.Metadata) return nil } if o.Catalog != nil { - fmt.Println("OSCAL Catalog") + fmt.Println("OSCAL Catalog (represents library of control assessment objectives and activities)") + fmt.Println("ID:\t", o.Catalog.Id) + printMetadata(o.Catalog.Metadata) return nil } return cli.NewExitError("Unrecognized OSCAL resource", 1) @@ -48,3 +53,23 @@ var Info = cli.Command{ return cli.NewExitError("No file provided", 1) }, } + +func printMetadata(m *catalog.Metadata) { + if m == nil { + return + } + fmt.Println("Metadata:") + fmt.Println("\tTitle:\t\t\t", m.Title) + if m.Published != "" { + fmt.Println("\tPublished:\t\t", m.Published) + } + if m.LastModified != "" { + fmt.Println("\tLast Modified:\t\t", m.LastModified) + } + if m.Version != "" { + fmt.Println("\tDocument Version:\t", m.Version) + } + if m.OscalVersion != "" { + fmt.Println("\tOSCAL Version:\t\t", m.OscalVersion) + } +} From 0d63e6a2ea8c156a4b74bad28418138101826349 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Tue, 14 Jan 2020 11:43:59 +0100 Subject: [PATCH 066/110] Refactor: Extract helper conduit: oscal_source --- cli/cmd/generate/catalog.go | 18 +++-------- cli/cmd/generate/code.go | 16 +++------- cli/cmd/info.go | 24 +++------------ generator/reader.go | 9 ++---- pkg/oscal_source/oscal_source.go | 53 ++++++++++++++++++++++++++++++++ 5 files changed, 68 insertions(+), 52 deletions(-) create mode 100644 pkg/oscal_source/oscal_source.go diff --git a/cli/cmd/generate/catalog.go b/cli/cmd/generate/catalog.go index 943ae810..1d77cda6 100644 --- a/cli/cmd/generate/catalog.go +++ b/cli/cmd/generate/catalog.go @@ -5,11 +5,11 @@ import ( "encoding/xml" "fmt" "io/ioutil" - "os" "github.com/sirupsen/logrus" "github.com/docker/oscalkit/generator" + "github.com/docker/oscalkit/pkg/oscal_source" "github.com/urfave/cli" ) @@ -45,23 +45,13 @@ var Catalog = cli.Command{ return nil }, Action: func(c *cli.Context) error { - - profilePath, err := generator.GetAbsolutePath(profilePath) - if err != nil { - return cli.NewExitError(fmt.Sprintf("cannot get absolute path, err: %v", err), 1) - } - - _, err = os.Stat(profilePath) - if err != nil { - return cli.NewExitError(fmt.Sprintf("cannot fetch file, err %v", err), 1) - } - f, err := os.Open(profilePath) + os, err := oscal_source.Open(profilePath) if err != nil { return cli.NewExitError(err, 1) } - defer f.Close() + defer os.Close() - profile, err := generator.ReadProfile(f) + profile, err := generator.ReadProfile(os.OSCAL()) if err != nil { return cli.NewExitError(err, 1) } diff --git a/cli/cmd/generate/code.go b/cli/cmd/generate/code.go index a9e0cb09..1bdb6826 100644 --- a/cli/cmd/generate/code.go +++ b/cli/cmd/generate/code.go @@ -8,6 +8,7 @@ import ( "regexp" "github.com/docker/oscalkit/generator" + "github.com/docker/oscalkit/pkg/oscal_source" "github.com/docker/oscalkit/templates" "github.com/docker/oscalkit/types/oscal/catalog" "github.com/sirupsen/logrus" @@ -53,22 +54,13 @@ var Code = cli.Command{ return cli.NewExitError(err, 1) } - profilePath, err := generator.GetAbsolutePath(profilePath) - if err != nil { - return cli.NewExitError(fmt.Sprintf("cannot get absolute path, err: %v", err), 1) - } - - _, err = os.Stat(profilePath) - if err != nil { - return cli.NewExitError(fmt.Sprintf("cannot fetch file, err %v", err), 1) - } - f, err := os.Open(profilePath) + osource, err := oscal_source.Open(profilePath) if err != nil { return cli.NewExitError(err, 1) } - defer f.Close() + defer osource.Close() - profile, err := generator.ReadProfile(f) + profile, err := generator.ReadProfile(osource.OSCAL()) if err != nil { return cli.NewExitError(err, 1) } diff --git a/cli/cmd/info.go b/cli/cmd/info.go index 88909f96..a008bafa 100644 --- a/cli/cmd/info.go +++ b/cli/cmd/info.go @@ -2,10 +2,8 @@ package cmd import ( "fmt" - "os" - "github.com/docker/oscalkit/generator" - "github.com/docker/oscalkit/types/oscal" + "github.com/docker/oscalkit/pkg/oscal_source" "github.com/docker/oscalkit/types/oscal/catalog" "github.com/urfave/cli" ) @@ -17,25 +15,13 @@ var Info = cli.Command{ ArgsUsage: "[file]", Action: func(c *cli.Context) error { for _, filePath := range c.Args() { - profilePath, err := generator.GetAbsolutePath(filePath) + os, err := oscal_source.Open(filePath) if err != nil { - return cli.NewExitError(fmt.Sprintf("cannot get absolute path, err: %v", err), 1) + return cli.NewExitError(fmt.Sprintf("Could not open oscal file: %v", err), 1) } + defer os.Close() - _, err = os.Stat(profilePath) - if err != nil { - return cli.NewExitError(fmt.Sprintf("cannot fetch file, err %v", err), 1) - } - f, err := os.Open(profilePath) - if err != nil { - return cli.NewExitError(err, 1) - } - defer f.Close() - - o, err := oscal.New(f) - if err != nil { - return cli.NewExitError(err, 1) - } + o := os.OSCAL() if o.Profile != nil { fmt.Println("OSCAL Profile (represents subset of controls from OSCAL catalog(s))") fmt.Println("ID:\t", o.Profile.Id) diff --git a/generator/reader.go b/generator/reader.go index c539b816..5f7a5fb9 100644 --- a/generator/reader.go +++ b/generator/reader.go @@ -37,13 +37,8 @@ func ReadCatalog(r io.Reader) (*catalog.Catalog, error) { } -// ReadProfile reads profile from byte array -func ReadProfile(r io.Reader) (*profile.Profile, error) { - - o, err := oscal.New(r) - if err != nil { - return nil, fmt.Errorf("cannot read oscal profile from file. err: %v,", err) - } +// ReadProfile reads profile from OSCAL +func ReadProfile(o *oscal.OSCAL) (*profile.Profile, error) { if o.Profile == nil { return nil, fmt.Errorf("unable to marshall profile") } diff --git a/pkg/oscal_source/oscal_source.go b/pkg/oscal_source/oscal_source.go new file mode 100644 index 00000000..5751fb1a --- /dev/null +++ b/pkg/oscal_source/oscal_source.go @@ -0,0 +1,53 @@ +package oscal_source + +import ( + "fmt" + "github.com/docker/oscalkit/types/oscal" + "os" + "path/filepath" +) + +// OSCALSource is intermediary that handles IO and low-level common operations consistently for oscalkit +type OSCALSource struct { + UserPath string + file *os.File + oscal *oscal.OSCAL +} + +// Open creates new OSCALSource and load it up +func Open(path string) (*OSCALSource, error) { + result := OSCALSource{UserPath: path} + return &result, result.open() +} + +func (s *OSCALSource) open() error { + var err error + path := s.UserPath + if !filepath.IsAbs(path) { + if path, err = filepath.Abs(path); err != nil { + return fmt.Errorf("Cannot get absolute path: %v", err) + } + } + if _, err = os.Stat(path); err != nil { + return fmt.Errorf("Cannot stat %s, %v", path, err) + } + if s.file, err = os.Open(path); err != nil { + return fmt.Errorf("Cannot open file %s: %v", path, err) + } + if s.oscal, err = oscal.New(s.file); err != nil { + return fmt.Errorf("Cannot parse file: %v", err) + } + return nil +} + +func (s *OSCALSource) OSCAL() *oscal.OSCAL { + return s.oscal +} + +// Close the OSCALSource +func (s *OSCALSource) Close() { + if s.file != nil { + s.file.Close() + s.file = nil + } +} From b7650508c261259111e7b942488c969ba8472371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Tue, 14 Jan 2020 13:32:39 +0100 Subject: [PATCH 067/110] Remove pkgName that is unused --- metaschema/generate.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/metaschema/generate.go b/metaschema/generate.go index b40700db..412f22f3 100644 --- a/metaschema/generate.go +++ b/metaschema/generate.go @@ -18,14 +18,6 @@ const ( metaschemaBaseDir = "OSCAL/src/metaschema/%s" ) -var ( - pkgName = map[string]string{ - "catalog": "catalog", - "profile": "profile", - "system-security-plan": "ssp", - } -) - func main() { rmCmd := exec.Command("rm", "-rf", "OSCAL/") if err := rmCmd.Run(); err != nil { From dc180375e83b099c791c864b8f04a3676035083a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Tue, 14 Jan 2020 13:38:16 +0100 Subject: [PATCH 068/110] Refactor: Extract constants --- types/oscal/oscal.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/types/oscal/oscal.go b/types/oscal/oscal.go index d2b2eb76..c1bac1da 100644 --- a/types/oscal/oscal.go +++ b/types/oscal/oscal.go @@ -13,6 +13,11 @@ import ( yaml "gopkg.in/yaml.v2" ) +const ( + OscalCatalog = "catalog" + OscalProfile = "profile" +) + // OSCAL contains specific OSCAL components type OSCAL struct { XMLName xml.Name `json:"-" yaml:"-"` @@ -112,14 +117,14 @@ func New(r io.Reader) (*OSCAL, error) { switch startElement := token.(type) { case xml.StartElement: switch startElement.Name.Local { - case "catalog": + case OscalCatalog: var catalog catalog.Catalog if err := d.DecodeElement(&catalog, &startElement); err != nil { return nil, err } return &OSCAL{Catalog: &catalog}, nil - case "profile": + case OscalProfile: var profile profile.Profile if err := d.DecodeElement(&profile, &startElement); err != nil { return nil, err @@ -133,14 +138,14 @@ func New(r io.Reader) (*OSCAL, error) { if err := json.Unmarshal(oscalBytes, &oscalT); err == nil { for k, v := range oscalT { switch k { - case "catalog": + case OscalCatalog: var catalog catalog.Catalog if err := json.Unmarshal(v, &catalog); err != nil { return nil, err } return &OSCAL{Catalog: &catalog}, nil - case "profile": + case OscalProfile: var profile profile.Profile if err := json.Unmarshal(v, &profile); err != nil { return nil, err From d56c6c5db5b10c91c6555031cf12036ae223de7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Tue, 14 Jan 2020 14:12:13 +0100 Subject: [PATCH 069/110] Support parsing SSPs --- cli/cmd/info.go | 6 ++++++ types/oscal/oscal.go | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/cli/cmd/info.go b/cli/cmd/info.go index a008bafa..1557cb17 100644 --- a/cli/cmd/info.go +++ b/cli/cmd/info.go @@ -22,6 +22,12 @@ var Info = cli.Command{ defer os.Close() o := os.OSCAL() + if o.SystemSecurityPlan != nil { + fmt.Println("OSCAL System Security Plan") + fmt.Println("ID:\t", o.SystemSecurityPlan.Id) + printMetadata(o.SystemSecurityPlan.Metadata) + return nil + } if o.Profile != nil { fmt.Println("OSCAL Profile (represents subset of controls from OSCAL catalog(s))") fmt.Println("ID:\t", o.Profile.Id) diff --git a/types/oscal/oscal.go b/types/oscal/oscal.go index c1bac1da..d9955fb8 100644 --- a/types/oscal/oscal.go +++ b/types/oscal/oscal.go @@ -10,12 +10,14 @@ import ( "github.com/docker/oscalkit/types/oscal/catalog" "github.com/docker/oscalkit/types/oscal/profile" + ssp "github.com/docker/oscalkit/types/oscal/system_security_plan" yaml "gopkg.in/yaml.v2" ) const ( OscalCatalog = "catalog" OscalProfile = "profile" + OscalSSP = "system-security-plan" ) // OSCAL contains specific OSCAL components @@ -24,6 +26,7 @@ type OSCAL struct { Catalog *catalog.Catalog `json:"catalog,omitempty" yaml:"catalog,omitempty"` // Declarations *Declarations `json:"declarations,omitempty" yaml:"declarations,omitempty"` Profile *profile.Profile `json:"profile,omitempty" yaml:"profile,omitempty"` + *ssp.SystemSecurityPlan } // MarshalXML marshals either a catalog or a profile @@ -130,6 +133,12 @@ func New(r io.Reader) (*OSCAL, error) { return nil, err } return &OSCAL{Profile: &profile}, nil + case OscalSSP: + var ssp ssp.SystemSecurityPlan + if err := d.DecodeElement(&ssp, &startElement); err != nil { + return nil, err + } + return &OSCAL{SystemSecurityPlan: &ssp}, nil } } } From d049c3278f992c5d704d89c79414602ace6bac7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Tue, 14 Jan 2020 14:38:16 +0100 Subject: [PATCH 070/110] Do not bind plural method to metaschema template It is not used. --- metaschema/template.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/metaschema/template.go b/metaschema/template.go index b18bfc86..fc436449 100644 --- a/metaschema/template.go +++ b/metaschema/template.go @@ -10,14 +10,12 @@ import ( "text/template" "github.com/iancoleman/strcase" - "github.com/jinzhu/inflection" ) func GenerateTypes(metaschema *Metaschema) error { t, err := template.New("types.tmpl").Funcs(template.FuncMap{ "toCamel": strcase.ToCamel, "toLowerCamel": strcase.ToLowerCamel, - "plural": inflection.Plural, "getImports": getImports, }).ParseFiles("types.tmpl") if err != nil { From 507466168ea5de1b356c9919a368682ab9286775 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Tue, 14 Jan 2020 14:42:55 +0100 Subject: [PATCH 071/110] Refactor: Extract methods: JsonName --- metaschema/metaschema.go | 11 +++++++++++ metaschema/template.go | 5 ++--- metaschema/types.tmpl | 12 ++++++------ 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 08d45333..25f4f508 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -356,6 +356,10 @@ func (a *Assembly) GoMemLayout() string { return "*" } +func (a *Assembly) JsonName() string { + return strcase.ToLowerCamel(a.XmlName()) +} + func (a *Assembly) XmlName() string { if a.GroupAs != nil { return a.GroupAs.Name @@ -425,6 +429,10 @@ func (f *Field) GoMemLayout() string { return "" } +func (f *Field) JsonName() string { + return strcase.ToLowerCamel(f.XmlName()) +} + func (f *Field) XmlName() string { if f.GroupAs != nil { return f.GroupAs.Name @@ -478,6 +486,9 @@ func (f *Flag) GoName() string { return f.Def.GoName() } +func (f *Flag) JsonName() string { + return strcase.ToLowerCamel(f.XmlName()) +} func (f *Flag) XmlName() string { if f.Name != "" { return f.Name diff --git a/metaschema/template.go b/metaschema/template.go index fc436449..2fede513 100644 --- a/metaschema/template.go +++ b/metaschema/template.go @@ -14,9 +14,8 @@ import ( func GenerateTypes(metaschema *Metaschema) error { t, err := template.New("types.tmpl").Funcs(template.FuncMap{ - "toCamel": strcase.ToCamel, - "toLowerCamel": strcase.ToLowerCamel, - "getImports": getImports, + "toCamel": strcase.ToCamel, + "getImports": getImports, }).ParseFiles("types.tmpl") if err != nil { return err diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index 3a5e2d60..bec0d67f 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -16,29 +16,29 @@ type {{toCamel .Name}} struct { {{- if and (eq "id" .Name) (eq "profile" $packageName)}} Id string `xml:"param-id,attr,omitempty" json:"id,omitempty"` {{- else}} - {{toCamel .XmlName}} {{.GoDatatype}} `xml:"{{.XmlName}},attr,omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{toCamel .XmlName}} {{.GoDatatype}} `xml:"{{.XmlName}},attr,omitempty" json:"{{.JsonName}},omitempty"` {{- end}} {{- end}} {{if .Model}} {{ range .Model.Field}} // {{ .GoComment }} - {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{ .XmlName }},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{ .XmlName }},omitempty" json:"{{.JsonName}},omitempty"` {{- end}} {{- range .Model.Assembly}} // {{ .GoComment }} - {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{.JsonName}},omitempty"` {{- end}} {{- range .Model.Choice}} {{- range .Field}} // {{ .GoComment }} - {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{.JsonName}},omitempty"` {{- end}} {{- range .Assembly}} // {{ .GoComment }} - {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{.JsonName}},omitempty"` {{- end}} {{- end}} @@ -54,7 +54,7 @@ type {{toCamel .Name}} struct { type {{toCamel .Name}} struct { {{- range .Flags}} // {{ .GoComment }} - {{toCamel .XmlName}} {{.GoDatatype}} `xml:"{{.XmlName}},attr,omitempty" json:"{{toLowerCamel .XmlName}},omitempty"` + {{toCamel .XmlName}} {{.GoDatatype}} `xml:"{{.XmlName}},attr,omitempty" json:"{{.JsonName}},omitempty"` {{end -}} Value string `xml:",chardata" json:"value,omitempty"` From 466ffe2714907887213abb57f198afba28f6b7f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Tue, 14 Jan 2020 14:46:40 +0100 Subject: [PATCH 072/110] Drop dependency on github.com/jinzhu/inflection It is no longer used. --- go.mod | 2 + vendor/github.com/jinzhu/inflection/LICENSE | 21 -- vendor/github.com/jinzhu/inflection/README.md | 55 ---- .../jinzhu/inflection/inflections.go | 273 ------------------ .../jinzhu/inflection/inflections_test.go | 213 -------------- .../github.com/jinzhu/inflection/wercker.yml | 23 -- 6 files changed, 2 insertions(+), 585 deletions(-) delete mode 100644 vendor/github.com/jinzhu/inflection/LICENSE delete mode 100644 vendor/github.com/jinzhu/inflection/README.md delete mode 100644 vendor/github.com/jinzhu/inflection/inflections.go delete mode 100644 vendor/github.com/jinzhu/inflection/inflections_test.go delete mode 100644 vendor/github.com/jinzhu/inflection/wercker.yml diff --git a/go.mod b/go.mod index 7a5258e6..eaeeeb90 100644 --- a/go.mod +++ b/go.mod @@ -14,3 +14,5 @@ require ( gopkg.in/square/go-jose.v2 v2.2.2 gopkg.in/yaml.v2 v2.2.2 ) + +go 1.13 diff --git a/vendor/github.com/jinzhu/inflection/LICENSE b/vendor/github.com/jinzhu/inflection/LICENSE deleted file mode 100644 index a1ca9a0f..00000000 --- a/vendor/github.com/jinzhu/inflection/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 - Jinzhu - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/vendor/github.com/jinzhu/inflection/README.md b/vendor/github.com/jinzhu/inflection/README.md deleted file mode 100644 index a3de3361..00000000 --- a/vendor/github.com/jinzhu/inflection/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# Inflection - -Inflection pluralizes and singularizes English nouns - -[![wercker status](https://app.wercker.com/status/f8c7432b097d1f4ce636879670be0930/s/master "wercker status")](https://app.wercker.com/project/byKey/f8c7432b097d1f4ce636879670be0930) - -## Basic Usage - -```go -inflection.Plural("person") => "people" -inflection.Plural("Person") => "People" -inflection.Plural("PERSON") => "PEOPLE" -inflection.Plural("bus") => "buses" -inflection.Plural("BUS") => "BUSES" -inflection.Plural("Bus") => "Buses" - -inflection.Singular("people") => "person" -inflection.Singular("People") => "Person" -inflection.Singular("PEOPLE") => "PERSON" -inflection.Singular("buses") => "bus" -inflection.Singular("BUSES") => "BUS" -inflection.Singular("Buses") => "Bus" - -inflection.Plural("FancyPerson") => "FancyPeople" -inflection.Singular("FancyPeople") => "FancyPerson" -``` - -## Register Rules - -Standard rules are from Rails's ActiveSupport (https://github.com/rails/rails/blob/master/activesupport/lib/active_support/inflections.rb) - -If you want to register more rules, follow: - -``` -inflection.AddUncountable("fish") -inflection.AddIrregular("person", "people") -inflection.AddPlural("(bu)s$", "${1}ses") # "bus" => "buses" / "BUS" => "BUSES" / "Bus" => "Buses" -inflection.AddSingular("(bus)(es)?$", "${1}") # "buses" => "bus" / "Buses" => "Bus" / "BUSES" => "BUS" -``` - -## Contributing - -You can help to make the project better, check out [http://gorm.io/contribute.html](http://gorm.io/contribute.html) for things you can do. - -## Author - -**jinzhu** - -* -* -* - -## License - -Released under the [MIT License](http://www.opensource.org/licenses/MIT). diff --git a/vendor/github.com/jinzhu/inflection/inflections.go b/vendor/github.com/jinzhu/inflection/inflections.go deleted file mode 100644 index 606263bb..00000000 --- a/vendor/github.com/jinzhu/inflection/inflections.go +++ /dev/null @@ -1,273 +0,0 @@ -/* -Package inflection pluralizes and singularizes English nouns. - - inflection.Plural("person") => "people" - inflection.Plural("Person") => "People" - inflection.Plural("PERSON") => "PEOPLE" - - inflection.Singular("people") => "person" - inflection.Singular("People") => "Person" - inflection.Singular("PEOPLE") => "PERSON" - - inflection.Plural("FancyPerson") => "FancydPeople" - inflection.Singular("FancyPeople") => "FancydPerson" - -Standard rules are from Rails's ActiveSupport (https://github.com/rails/rails/blob/master/activesupport/lib/active_support/inflections.rb) - -If you want to register more rules, follow: - - inflection.AddUncountable("fish") - inflection.AddIrregular("person", "people") - inflection.AddPlural("(bu)s$", "${1}ses") # "bus" => "buses" / "BUS" => "BUSES" / "Bus" => "Buses" - inflection.AddSingular("(bus)(es)?$", "${1}") # "buses" => "bus" / "Buses" => "Bus" / "BUSES" => "BUS" -*/ -package inflection - -import ( - "regexp" - "strings" -) - -type inflection struct { - regexp *regexp.Regexp - replace string -} - -// Regular is a regexp find replace inflection -type Regular struct { - find string - replace string -} - -// Irregular is a hard replace inflection, -// containing both singular and plural forms -type Irregular struct { - singular string - plural string -} - -// RegularSlice is a slice of Regular inflections -type RegularSlice []Regular - -// IrregularSlice is a slice of Irregular inflections -type IrregularSlice []Irregular - -var pluralInflections = RegularSlice{ - {"([a-z])$", "${1}s"}, - {"s$", "s"}, - {"^(ax|test)is$", "${1}es"}, - {"(octop|vir)us$", "${1}i"}, - {"(octop|vir)i$", "${1}i"}, - {"(alias|status)$", "${1}es"}, - {"(bu)s$", "${1}ses"}, - {"(buffal|tomat)o$", "${1}oes"}, - {"([ti])um$", "${1}a"}, - {"([ti])a$", "${1}a"}, - {"sis$", "ses"}, - {"(?:([^f])fe|([lr])f)$", "${1}${2}ves"}, - {"(hive)$", "${1}s"}, - {"([^aeiouy]|qu)y$", "${1}ies"}, - {"(x|ch|ss|sh)$", "${1}es"}, - {"(matr|vert|ind)(?:ix|ex)$", "${1}ices"}, - {"^(m|l)ouse$", "${1}ice"}, - {"^(m|l)ice$", "${1}ice"}, - {"^(ox)$", "${1}en"}, - {"^(oxen)$", "${1}"}, - {"(quiz)$", "${1}zes"}, -} - -var singularInflections = RegularSlice{ - {"s$", ""}, - {"(ss)$", "${1}"}, - {"(n)ews$", "${1}ews"}, - {"([ti])a$", "${1}um"}, - {"((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)$", "${1}sis"}, - {"(^analy)(sis|ses)$", "${1}sis"}, - {"([^f])ves$", "${1}fe"}, - {"(hive)s$", "${1}"}, - {"(tive)s$", "${1}"}, - {"([lr])ves$", "${1}f"}, - {"([^aeiouy]|qu)ies$", "${1}y"}, - {"(s)eries$", "${1}eries"}, - {"(m)ovies$", "${1}ovie"}, - {"(c)ookies$", "${1}ookie"}, - {"(x|ch|ss|sh)es$", "${1}"}, - {"^(m|l)ice$", "${1}ouse"}, - {"(bus)(es)?$", "${1}"}, - {"(o)es$", "${1}"}, - {"(shoe)s$", "${1}"}, - {"(cris|test)(is|es)$", "${1}is"}, - {"^(a)x[ie]s$", "${1}xis"}, - {"(octop|vir)(us|i)$", "${1}us"}, - {"(alias|status)(es)?$", "${1}"}, - {"^(ox)en", "${1}"}, - {"(vert|ind)ices$", "${1}ex"}, - {"(matr)ices$", "${1}ix"}, - {"(quiz)zes$", "${1}"}, - {"(database)s$", "${1}"}, -} - -var irregularInflections = IrregularSlice{ - {"person", "people"}, - {"man", "men"}, - {"child", "children"}, - {"sex", "sexes"}, - {"move", "moves"}, - {"mombie", "mombies"}, -} - -var uncountableInflections = []string{"equipment", "information", "rice", "money", "species", "series", "fish", "sheep", "jeans", "police"} - -var compiledPluralMaps []inflection -var compiledSingularMaps []inflection - -func compile() { - compiledPluralMaps = []inflection{} - compiledSingularMaps = []inflection{} - for _, uncountable := range uncountableInflections { - inf := inflection{ - regexp: regexp.MustCompile("^(?i)(" + uncountable + ")$"), - replace: "${1}", - } - compiledPluralMaps = append(compiledPluralMaps, inf) - compiledSingularMaps = append(compiledSingularMaps, inf) - } - - for _, value := range irregularInflections { - infs := []inflection{ - inflection{regexp: regexp.MustCompile(strings.ToUpper(value.singular) + "$"), replace: strings.ToUpper(value.plural)}, - inflection{regexp: regexp.MustCompile(strings.Title(value.singular) + "$"), replace: strings.Title(value.plural)}, - inflection{regexp: regexp.MustCompile(value.singular + "$"), replace: value.plural}, - } - compiledPluralMaps = append(compiledPluralMaps, infs...) - } - - for _, value := range irregularInflections { - infs := []inflection{ - inflection{regexp: regexp.MustCompile(strings.ToUpper(value.plural) + "$"), replace: strings.ToUpper(value.singular)}, - inflection{regexp: regexp.MustCompile(strings.Title(value.plural) + "$"), replace: strings.Title(value.singular)}, - inflection{regexp: regexp.MustCompile(value.plural + "$"), replace: value.singular}, - } - compiledSingularMaps = append(compiledSingularMaps, infs...) - } - - for i := len(pluralInflections) - 1; i >= 0; i-- { - value := pluralInflections[i] - infs := []inflection{ - inflection{regexp: regexp.MustCompile(strings.ToUpper(value.find)), replace: strings.ToUpper(value.replace)}, - inflection{regexp: regexp.MustCompile(value.find), replace: value.replace}, - inflection{regexp: regexp.MustCompile("(?i)" + value.find), replace: value.replace}, - } - compiledPluralMaps = append(compiledPluralMaps, infs...) - } - - for i := len(singularInflections) - 1; i >= 0; i-- { - value := singularInflections[i] - infs := []inflection{ - inflection{regexp: regexp.MustCompile(strings.ToUpper(value.find)), replace: strings.ToUpper(value.replace)}, - inflection{regexp: regexp.MustCompile(value.find), replace: value.replace}, - inflection{regexp: regexp.MustCompile("(?i)" + value.find), replace: value.replace}, - } - compiledSingularMaps = append(compiledSingularMaps, infs...) - } -} - -func init() { - compile() -} - -// AddPlural adds a plural inflection -func AddPlural(find, replace string) { - pluralInflections = append(pluralInflections, Regular{find, replace}) - compile() -} - -// AddSingular adds a singular inflection -func AddSingular(find, replace string) { - singularInflections = append(singularInflections, Regular{find, replace}) - compile() -} - -// AddIrregular adds an irregular inflection -func AddIrregular(singular, plural string) { - irregularInflections = append(irregularInflections, Irregular{singular, plural}) - compile() -} - -// AddUncountable adds an uncountable inflection -func AddUncountable(values ...string) { - uncountableInflections = append(uncountableInflections, values...) - compile() -} - -// GetPlural retrieves the plural inflection values -func GetPlural() RegularSlice { - plurals := make(RegularSlice, len(pluralInflections)) - copy(plurals, pluralInflections) - return plurals -} - -// GetSingular retrieves the singular inflection values -func GetSingular() RegularSlice { - singulars := make(RegularSlice, len(singularInflections)) - copy(singulars, singularInflections) - return singulars -} - -// GetIrregular retrieves the irregular inflection values -func GetIrregular() IrregularSlice { - irregular := make(IrregularSlice, len(irregularInflections)) - copy(irregular, irregularInflections) - return irregular -} - -// GetUncountable retrieves the uncountable inflection values -func GetUncountable() []string { - uncountables := make([]string, len(uncountableInflections)) - copy(uncountables, uncountableInflections) - return uncountables -} - -// SetPlural sets the plural inflections slice -func SetPlural(inflections RegularSlice) { - pluralInflections = inflections - compile() -} - -// SetSingular sets the singular inflections slice -func SetSingular(inflections RegularSlice) { - singularInflections = inflections - compile() -} - -// SetIrregular sets the irregular inflections slice -func SetIrregular(inflections IrregularSlice) { - irregularInflections = inflections - compile() -} - -// SetUncountable sets the uncountable inflections slice -func SetUncountable(inflections []string) { - uncountableInflections = inflections - compile() -} - -// Plural converts a word to its plural form -func Plural(str string) string { - for _, inflection := range compiledPluralMaps { - if inflection.regexp.MatchString(str) { - return inflection.regexp.ReplaceAllString(str, inflection.replace) - } - } - return str -} - -// Singular converts a word to its singular form -func Singular(str string) string { - for _, inflection := range compiledSingularMaps { - if inflection.regexp.MatchString(str) { - return inflection.regexp.ReplaceAllString(str, inflection.replace) - } - } - return str -} diff --git a/vendor/github.com/jinzhu/inflection/inflections_test.go b/vendor/github.com/jinzhu/inflection/inflections_test.go deleted file mode 100644 index 689e1dfb..00000000 --- a/vendor/github.com/jinzhu/inflection/inflections_test.go +++ /dev/null @@ -1,213 +0,0 @@ -package inflection - -import ( - "strings" - "testing" -) - -var inflections = map[string]string{ - "star": "stars", - "STAR": "STARS", - "Star": "Stars", - "bus": "buses", - "fish": "fish", - "mouse": "mice", - "query": "queries", - "ability": "abilities", - "agency": "agencies", - "movie": "movies", - "archive": "archives", - "index": "indices", - "wife": "wives", - "safe": "saves", - "half": "halves", - "move": "moves", - "salesperson": "salespeople", - "person": "people", - "spokesman": "spokesmen", - "man": "men", - "woman": "women", - "basis": "bases", - "diagnosis": "diagnoses", - "diagnosis_a": "diagnosis_as", - "datum": "data", - "medium": "media", - "stadium": "stadia", - "analysis": "analyses", - "node_child": "node_children", - "child": "children", - "experience": "experiences", - "day": "days", - "comment": "comments", - "foobar": "foobars", - "newsletter": "newsletters", - "old_news": "old_news", - "news": "news", - "series": "series", - "species": "species", - "quiz": "quizzes", - "perspective": "perspectives", - "ox": "oxen", - "photo": "photos", - "buffalo": "buffaloes", - "tomato": "tomatoes", - "dwarf": "dwarves", - "elf": "elves", - "information": "information", - "equipment": "equipment", - "criterion": "criteria", -} - -// storage is used to restore the state of the global variables -// on each test execution, to ensure no global state pollution -type storage struct { - singulars RegularSlice - plurals RegularSlice - irregulars IrregularSlice - uncountables []string -} - -var backup = storage{} - -func init() { - AddIrregular("criterion", "criteria") - copy(backup.singulars, singularInflections) - copy(backup.plurals, pluralInflections) - copy(backup.irregulars, irregularInflections) - copy(backup.uncountables, uncountableInflections) -} - -func restore() { - copy(singularInflections, backup.singulars) - copy(pluralInflections, backup.plurals) - copy(irregularInflections, backup.irregulars) - copy(uncountableInflections, backup.uncountables) -} - -func TestPlural(t *testing.T) { - for key, value := range inflections { - if v := Plural(strings.ToUpper(key)); v != strings.ToUpper(value) { - t.Errorf("%v's plural should be %v, but got %v", strings.ToUpper(key), strings.ToUpper(value), v) - } - - if v := Plural(strings.Title(key)); v != strings.Title(value) { - t.Errorf("%v's plural should be %v, but got %v", strings.Title(key), strings.Title(value), v) - } - - if v := Plural(key); v != value { - t.Errorf("%v's plural should be %v, but got %v", key, value, v) - } - } -} - -func TestSingular(t *testing.T) { - for key, value := range inflections { - if v := Singular(strings.ToUpper(value)); v != strings.ToUpper(key) { - t.Errorf("%v's singular should be %v, but got %v", strings.ToUpper(value), strings.ToUpper(key), v) - } - - if v := Singular(strings.Title(value)); v != strings.Title(key) { - t.Errorf("%v's singular should be %v, but got %v", strings.Title(value), strings.Title(key), v) - } - - if v := Singular(value); v != key { - t.Errorf("%v's singular should be %v, but got %v", value, key, v) - } - } -} - -func TestAddPlural(t *testing.T) { - defer restore() - ln := len(pluralInflections) - AddPlural("", "") - if ln+1 != len(pluralInflections) { - t.Errorf("Expected len %d, got %d", ln+1, len(pluralInflections)) - } -} - -func TestAddSingular(t *testing.T) { - defer restore() - ln := len(singularInflections) - AddSingular("", "") - if ln+1 != len(singularInflections) { - t.Errorf("Expected len %d, got %d", ln+1, len(singularInflections)) - } -} - -func TestAddIrregular(t *testing.T) { - defer restore() - ln := len(irregularInflections) - AddIrregular("", "") - if ln+1 != len(irregularInflections) { - t.Errorf("Expected len %d, got %d", ln+1, len(irregularInflections)) - } -} - -func TestAddUncountable(t *testing.T) { - defer restore() - ln := len(uncountableInflections) - AddUncountable("", "") - if ln+2 != len(uncountableInflections) { - t.Errorf("Expected len %d, got %d", ln+2, len(uncountableInflections)) - } -} - -func TestGetPlural(t *testing.T) { - plurals := GetPlural() - if len(plurals) != len(pluralInflections) { - t.Errorf("Expected len %d, got %d", len(plurals), len(pluralInflections)) - } -} - -func TestGetSingular(t *testing.T) { - singular := GetSingular() - if len(singular) != len(singularInflections) { - t.Errorf("Expected len %d, got %d", len(singular), len(singularInflections)) - } -} - -func TestGetIrregular(t *testing.T) { - irregular := GetIrregular() - if len(irregular) != len(irregularInflections) { - t.Errorf("Expected len %d, got %d", len(irregular), len(irregularInflections)) - } -} - -func TestGetUncountable(t *testing.T) { - uncountables := GetUncountable() - if len(uncountables) != len(uncountableInflections) { - t.Errorf("Expected len %d, got %d", len(uncountables), len(uncountableInflections)) - } -} - -func TestSetPlural(t *testing.T) { - defer restore() - SetPlural(RegularSlice{{}, {}}) - if len(pluralInflections) != 2 { - t.Errorf("Expected len 2, got %d", len(pluralInflections)) - } -} - -func TestSetSingular(t *testing.T) { - defer restore() - SetSingular(RegularSlice{{}, {}}) - if len(singularInflections) != 2 { - t.Errorf("Expected len 2, got %d", len(singularInflections)) - } -} - -func TestSetIrregular(t *testing.T) { - defer restore() - SetIrregular(IrregularSlice{{}, {}}) - if len(irregularInflections) != 2 { - t.Errorf("Expected len 2, got %d", len(irregularInflections)) - } -} - -func TestSetUncountable(t *testing.T) { - defer restore() - SetUncountable([]string{"", ""}) - if len(uncountableInflections) != 2 { - t.Errorf("Expected len 2, got %d", len(uncountableInflections)) - } -} diff --git a/vendor/github.com/jinzhu/inflection/wercker.yml b/vendor/github.com/jinzhu/inflection/wercker.yml deleted file mode 100644 index 5e6ce981..00000000 --- a/vendor/github.com/jinzhu/inflection/wercker.yml +++ /dev/null @@ -1,23 +0,0 @@ -box: golang - -build: - steps: - - setup-go-workspace - - # Gets the dependencies - - script: - name: go get - code: | - go get - - # Build the project - - script: - name: go build - code: | - go build ./... - - # Test the project - - script: - name: go test - code: | - go test ./... From f48dc7dcac775c975f59a873d9b3fdf2a8b8ae28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Tue, 14 Jan 2020 17:15:53 +0100 Subject: [PATCH 073/110] Do not pluralize names of the XML elements OSCAL XML elements remain in singular form like while on the other hand, JSON contains pluralized items, like responsible-parties: [ ... ], --- metaschema/metaschema.go | 14 +- metaschema/types.tmpl | 12 +- types/oscal/catalog/catalog.go | 26 +-- .../oscal/nominal_catalog/nominal_catalog.go | 16 +- types/oscal/profile/profile.go | 54 +++--- .../system_security_plan.go | 178 +++++++++--------- .../oscal/validation_root/validation_root.go | 88 ++++----- 7 files changed, 195 insertions(+), 193 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 25f4f508..a538f839 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -357,13 +357,14 @@ func (a *Assembly) GoMemLayout() string { } func (a *Assembly) JsonName() string { + if a.GroupAs != nil { + return a.GroupAs.Name + } return strcase.ToLowerCamel(a.XmlName()) } func (a *Assembly) XmlName() string { - if a.GroupAs != nil { - return a.GroupAs.Name - } else if a.Named != "" { + if a.Named != "" { return a.Named } else { return a.Def.Name @@ -430,13 +431,14 @@ func (f *Field) GoMemLayout() string { } func (f *Field) JsonName() string { + if f.GroupAs != nil { + return f.GroupAs.Name + } return strcase.ToLowerCamel(f.XmlName()) } func (f *Field) XmlName() string { - if f.GroupAs != nil { - return f.GroupAs.Name - } else if f.Named != "" { + if f.Named != "" { return f.Named } else { return f.Def.Name diff --git a/metaschema/types.tmpl b/metaschema/types.tmpl index bec0d67f..eea29b39 100644 --- a/metaschema/types.tmpl +++ b/metaschema/types.tmpl @@ -16,29 +16,29 @@ type {{toCamel .Name}} struct { {{- if and (eq "id" .Name) (eq "profile" $packageName)}} Id string `xml:"param-id,attr,omitempty" json:"id,omitempty"` {{- else}} - {{toCamel .XmlName}} {{.GoDatatype}} `xml:"{{.XmlName}},attr,omitempty" json:"{{.JsonName}},omitempty"` + {{toCamel .JsonName}} {{.GoDatatype}} `xml:"{{.XmlName}},attr,omitempty" json:"{{.JsonName}},omitempty"` {{- end}} {{- end}} {{if .Model}} {{ range .Model.Field}} // {{ .GoComment }} - {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{ .XmlName }},omitempty" json:"{{.JsonName}},omitempty"` + {{ toCamel .JsonName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{ .XmlName }},omitempty" json:"{{.JsonName}},omitempty"` {{- end}} {{- range .Model.Assembly}} // {{ .GoComment }} - {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{.JsonName}},omitempty"` + {{ toCamel .JsonName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{.JsonName}},omitempty"` {{- end}} {{- range .Model.Choice}} {{- range .Field}} // {{ .GoComment }} - {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{.JsonName}},omitempty"` + {{ toCamel .JsonName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{.JsonName}},omitempty"` {{- end}} {{- range .Assembly}} // {{ .GoComment }} - {{ toCamel .XmlName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{.JsonName}},omitempty"` + {{ toCamel .JsonName}} {{.GoMemLayout}}{{.GoName}} `xml:"{{.XmlName}},omitempty" json:"{{.JsonName}},omitempty"` {{- end}} {{- end}} @@ -54,7 +54,7 @@ type {{toCamel .Name}} struct { type {{toCamel .Name}} struct { {{- range .Flags}} // {{ .GoComment }} - {{toCamel .XmlName}} {{.GoDatatype}} `xml:"{{.XmlName}},attr,omitempty" json:"{{.JsonName}},omitempty"` + {{toCamel .JsonName}} {{.GoDatatype}} `xml:"{{.XmlName}},attr,omitempty" json:"{{.JsonName}},omitempty"` {{end -}} Value string `xml:",chardata" json:"value,omitempty"` diff --git a/types/oscal/catalog/catalog.go b/types/oscal/catalog/catalog.go index 3d9ee99c..d6d58f78 100644 --- a/types/oscal/catalog/catalog.go +++ b/types/oscal/catalog/catalog.go @@ -20,9 +20,9 @@ type Catalog struct { // Back matter including references and resources. BackMatter *BackMatter `xml:"back-matter,omitempty" json:"backMatter,omitempty"` // A group of controls, or of groups of controls. - Groups []Group `xml:"groups,omitempty" json:"groups,omitempty"` + Groups []Group `xml:"group,omitempty" json:"groups,omitempty"` // A structured information object representing a security or privacy control. Each security or privacy control within the Catalog is defined by a distinct control instance. - Controls []Control `xml:"controls,omitempty" json:"controls,omitempty"` + Controls []Control `xml:"control,omitempty" json:"controls,omitempty"` } // A group of controls, or of groups of controls. @@ -36,15 +36,15 @@ type Group struct { // A title for display and navigation Title Title `xml:"title,omitempty" json:"title,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // Parameters provide a mechanism for the dynamic assignment of value(s) in a control. - Parameters []Param `xml:"parameters,omitempty" json:"parameters,omitempty"` + Parameters []Param `xml:"param,omitempty" json:"parameters,omitempty"` // A partition or component of a control or part - Parts []Part `xml:"parts,omitempty" json:"parts,omitempty"` + Parts []Part `xml:"part,omitempty" json:"parts,omitempty"` // A group of controls, or of groups of controls. - Groups []Group `xml:"groups,omitempty" json:"groups,omitempty"` + Groups []Group `xml:"group,omitempty" json:"groups,omitempty"` // A structured information object representing a security or privacy control. Each security or privacy control within the Catalog is defined by a distinct control instance. - Controls []Control `xml:"controls,omitempty" json:"controls,omitempty"` + Controls []Control `xml:"control,omitempty" json:"controls,omitempty"` } // A structured information object representing a security or privacy control. Each security or privacy control within the Catalog is defined by a distinct control instance. @@ -58,17 +58,17 @@ type Control struct { // A title for display and navigation Title Title `xml:"title,omitempty" json:"title,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // Parameters provide a mechanism for the dynamic assignment of value(s) in a control. - Parameters []Param `xml:"parameters,omitempty" json:"parameters,omitempty"` + Parameters []Param `xml:"param,omitempty" json:"parameters,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` // A partition or component of a control or part - Parts []Part `xml:"parts,omitempty" json:"parts,omitempty"` + Parts []Part `xml:"part,omitempty" json:"parts,omitempty"` // A structured information object representing a security or privacy control. Each security or privacy control within the Catalog is defined by a distinct control instance. - Controls []Control `xml:"controls,omitempty" json:"controls,omitempty"` + Controls []Control `xml:"control,omitempty" json:"controls,omitempty"` } type Annotation = validation_root.Annotation diff --git a/types/oscal/nominal_catalog/nominal_catalog.go b/types/oscal/nominal_catalog/nominal_catalog.go index 37a9c0dd..57d5168f 100644 --- a/types/oscal/nominal_catalog/nominal_catalog.go +++ b/types/oscal/nominal_catalog/nominal_catalog.go @@ -27,13 +27,13 @@ type Param struct { // A short name for the parameter. Label Label `xml:"label,omitempty" json:"label,omitempty"` // Indicates and explains the purpose and use of a parameter - Descriptions []Usage `xml:"descriptions,omitempty" json:"descriptions,omitempty"` + Descriptions []Usage `xml:"usage,omitempty" json:"descriptions,omitempty"` // A formal or informal expression of a constraint or test - Constraints []Constraint `xml:"constraints,omitempty" json:"constraints,omitempty"` + Constraints []Constraint `xml:"constraint,omitempty" json:"constraints,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // A prose statement that provides a recommendation for the use of a parameter. - Guidance []Guideline `xml:"guidance,omitempty" json:"guidance,omitempty"` + Guidance []Guideline `xml:"guideline,omitempty" json:"guidance,omitempty"` // A recommended parameter value or set of values. Value Value `xml:"value,omitempty" json:"value,omitempty"` // A set of parameter value choices, that may be picked from to set the parameter value. @@ -54,7 +54,7 @@ type Select struct { HowMany string `xml:"how-many,attr,omitempty" json:"howMany,omitempty"` // A value selection among several such options - Alternatives []Choice `xml:"alternatives,omitempty" json:"alternatives,omitempty"` + Alternatives []Choice `xml:"choice,omitempty" json:"alternatives,omitempty"` } // A partition or component of a control or part @@ -72,13 +72,13 @@ type Part struct { // A title for display and navigation Title Title `xml:"title,omitempty" json:"title,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // Prose permits multiple paragraphs, lists, tables etc. Prose *Prose `xml:"prose,omitempty" json:"prose,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // A partition or component of a control or part - Parts []Part `xml:"parts,omitempty" json:"parts,omitempty"` + Parts []Part `xml:"part,omitempty" json:"parts,omitempty"` } // A placeholder for a missing value, in display. diff --git a/types/oscal/profile/profile.go b/types/oscal/profile/profile.go index dcc19ad5..85a4dc4d 100644 --- a/types/oscal/profile/profile.go +++ b/types/oscal/profile/profile.go @@ -19,7 +19,7 @@ type Profile struct { Metadata *Metadata `xml:"metadata,omitempty" json:"metadata,omitempty"` // An Import element designates a catalog, profile, or other resource to be // included (referenced and potentially modified) by this profile. - Imports []Import `xml:"imports,omitempty" json:"imports,omitempty"` + Imports []Import `xml:"import,omitempty" json:"imports,omitempty"` // A Merge element merges controls in resolution. Merge *Merge `xml:"merge,omitempty" json:"merge,omitempty"` // Set parameters or amend controls in resolution @@ -60,11 +60,11 @@ type Merge struct { type Custom struct { // Call a control by its ID - IdSelectors []Call `xml:"id-selectors,omitempty" json:"idSelectors,omitempty"` + IdSelectors []Call `xml:"call,omitempty" json:"id-selectors,omitempty"` // Select controls by (regular expression) match on ID - PatternSelectors []Match `xml:"pattern-selectors,omitempty" json:"patternSelectors,omitempty"` + PatternSelectors []Match `xml:"match,omitempty" json:"pattern-selectors,omitempty"` // As in catalogs, a group of (selected) controls or of groups of controls - Groups []Group `xml:"groups,omitempty" json:"groups,omitempty"` + Groups []Group `xml:"group,omitempty" json:"groups,omitempty"` } // As in catalogs, a group of (selected) controls or of groups of controls @@ -78,26 +78,26 @@ type Group struct { // A title for display and navigation Title Title `xml:"title,omitempty" json:"title,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // Parameters provide a mechanism for the dynamic assignment of value(s) in a control. - Parameters []Param `xml:"parameters,omitempty" json:"parameters,omitempty"` + Parameters []Param `xml:"param,omitempty" json:"parameters,omitempty"` // A partition or component of a control or part - Parts []Part `xml:"parts,omitempty" json:"parts,omitempty"` + Parts []Part `xml:"part,omitempty" json:"parts,omitempty"` // Call a control by its ID - IdSelectors []Call `xml:"id-selectors,omitempty" json:"idSelectors,omitempty"` + IdSelectors []Call `xml:"call,omitempty" json:"id-selectors,omitempty"` // Select controls by (regular expression) match on ID - PatternSelectors []Match `xml:"pattern-selectors,omitempty" json:"patternSelectors,omitempty"` + PatternSelectors []Match `xml:"match,omitempty" json:"pattern-selectors,omitempty"` // As in catalogs, a group of (selected) controls or of groups of controls - Groups []Group `xml:"groups,omitempty" json:"groups,omitempty"` + Groups []Group `xml:"group,omitempty" json:"groups,omitempty"` } // Set parameters or amend controls in resolution type Modify struct { // A parameter setting, to be propagated to points of insertion - Settings []Set `xml:"settings,omitempty" json:"settings,omitempty"` + Settings []Set `xml:"set,omitempty" json:"settings,omitempty"` // An Alter element specifies changes to be made to an included control when a profile is resolved. - Alterations []Alter `xml:"alterations,omitempty" json:"alterations,omitempty"` + Alterations []Alter `xml:"alter,omitempty" json:"alterations,omitempty"` } // Specifies which controls to include from the resource (source catalog) being @@ -107,9 +107,9 @@ type Include struct { // Include all controls from the imported resource (catalog) All *All `xml:"all,omitempty" json:"all,omitempty"` // Call a control by its ID - IdSelectors []Call `xml:"id-selectors,omitempty" json:"idSelectors,omitempty"` + IdSelectors []Call `xml:"call,omitempty" json:"id-selectors,omitempty"` // Select controls by (regular expression) match on ID - PatternSelectors []Match `xml:"pattern-selectors,omitempty" json:"patternSelectors,omitempty"` + PatternSelectors []Match `xml:"match,omitempty" json:"pattern-selectors,omitempty"` } // Which controls to exclude from the resource (source catalog) being @@ -117,9 +117,9 @@ type Include struct { type Exclude struct { // Call a control by its ID - IdSelectors []Call `xml:"id-selectors,omitempty" json:"idSelectors,omitempty"` + IdSelectors []Call `xml:"call,omitempty" json:"id-selectors,omitempty"` // Select controls by (regular expression) match on ID - PatternSelectors []Match `xml:"pattern-selectors,omitempty" json:"patternSelectors,omitempty"` + PatternSelectors []Match `xml:"match,omitempty" json:"pattern-selectors,omitempty"` } // A parameter setting, to be propagated to points of insertion @@ -135,13 +135,13 @@ type Set struct { // A placeholder for a missing value, in display. Label Label `xml:"label,omitempty" json:"label,omitempty"` // Indicates and explains the purpose and use of a parameter - Descriptions []Usage `xml:"descriptions,omitempty" json:"descriptions,omitempty"` + Descriptions []Usage `xml:"usage,omitempty" json:"descriptions,omitempty"` // A formal or informal expression of a constraint or test - Constraints []Constraint `xml:"constraints,omitempty" json:"constraints,omitempty"` + Constraints []Constraint `xml:"constraint,omitempty" json:"constraints,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // A prose statement that provides a recommendation for the use of a parameter. - Guidance []Guideline `xml:"guidance,omitempty" json:"guidance,omitempty"` + Guidance []Guideline `xml:"guideline,omitempty" json:"guidance,omitempty"` // Indicates a permissible value for a parameter or property Value Value `xml:"value,omitempty" json:"value,omitempty"` // Presenting a choice among alternatives @@ -155,9 +155,9 @@ type Alter struct { ControlId string `xml:"control-id,attr,omitempty" json:"controlId,omitempty"` // Specifies elements to be removed from a control, in resolution - Removals []Remove `xml:"removals,omitempty" json:"removals,omitempty"` + Removals []Remove `xml:"remove,omitempty" json:"removals,omitempty"` // Specifies contents to be added into controls, in resolution - Additions []Add `xml:"additions,omitempty" json:"additions,omitempty"` + Additions []Add `xml:"add,omitempty" json:"additions,omitempty"` } // Specifies contents to be added into controls, in resolution @@ -171,15 +171,15 @@ type Add struct { // A title for display and navigation Title Title `xml:"title,omitempty" json:"title,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // Parameters provide a mechanism for the dynamic assignment of value(s) in a control. - Parameters []Param `xml:"parameters,omitempty" json:"parameters,omitempty"` + Parameters []Param `xml:"param,omitempty" json:"parameters,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` // A partition or component of a control or part - Parts []Part `xml:"parts,omitempty" json:"parts,omitempty"` + Parts []Part `xml:"part,omitempty" json:"parts,omitempty"` } // A Combine element defines whether and how to combine multiple (competing) diff --git a/types/oscal/system_security_plan/system_security_plan.go b/types/oscal/system_security_plan/system_security_plan.go index ac161ff3..87622a84 100644 --- a/types/oscal/system_security_plan/system_security_plan.go +++ b/types/oscal/system_security_plan/system_security_plan.go @@ -39,7 +39,7 @@ type ImportProfile struct { type SystemCharacteristics struct { // A unique identifier for the system described by this system security plan. - SystemIds []SystemId `xml:"system-ids,omitempty" json:"systemIds,omitempty"` + SystemIds []SystemId `xml:"system-id,omitempty" json:"system-ids,omitempty"` // The full name of the system. SystemName SystemName `xml:"system-name,omitempty" json:"systemName,omitempty"` // A short name for the system, such as an acronym, that is suitable for display in a data table or summary list. @@ -47,9 +47,9 @@ type SystemCharacteristics struct { // A free-text description of the system. Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // The date this system received its authorization. DateAuthorized DateAuthorized `xml:"date-authorized,omitempty" json:"dateAuthorized,omitempty"` // The overall information system sensitivity categorization, such as defined by . @@ -57,7 +57,7 @@ type SystemCharacteristics struct { // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` // Contains details about all information types that are stored, processed, or transmitted by the system, such as privacy information, and those defined in . SystemInformation *SystemInformation `xml:"system-information,omitempty" json:"systemInformation,omitempty"` // The overall level of expected impact resulting from unauthorized disclosure, modification, or loss of access to information. @@ -65,7 +65,7 @@ type SystemCharacteristics struct { // Describes the operational status of the system. Status *Status `xml:"status,omitempty" json:"status,omitempty"` // A description of another authorized system from which this system inherits capabilities that satisfy security requirements. Another term for this concept is a . - LeveragedAuthorizations []LeveragedAuthorization `xml:"leveraged-authorizations,omitempty" json:"leveragedAuthorizations,omitempty"` + LeveragedAuthorizations []LeveragedAuthorization `xml:"leveraged-authorization,omitempty" json:"leveraged-authorizations,omitempty"` // A description of this system's authorization boundary, optionally supplemented by diagrams that illustrate the authorization boundary. AuthorizationBoundary *AuthorizationBoundary `xml:"authorization-boundary,omitempty" json:"authorizationBoundary,omitempty"` // A description of the system's network architecture, optionally supplemented by diagrams that illustrate the network architecture. @@ -73,20 +73,20 @@ type SystemCharacteristics struct { // A description of the logical flow of information within the system and across its boundaries, optionally supplemented by diagrams that illustrate these flows. DataFlow *DataFlow `xml:"data-flow,omitempty" json:"dataFlow,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. - ResponsibleParties []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` + ResponsibleParties []ResponsibleParty `xml:"responsible-party,omitempty" json:"responsible-parties,omitempty"` } // Contains details about all information types that are stored, processed, or transmitted by the system, such as privacy information, and those defined in . type SystemInformation struct { // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` // Contains details about one information type that is stored, processed, or transmitted by the system, such as privacy information, and those defined in . - InformationTypes []InformationType `xml:"information-types,omitempty" json:"informationTypes,omitempty"` + InformationTypes []InformationType `xml:"information-type,omitempty" json:"information-types,omitempty"` } // Contains details about one information type that is stored, processed, or transmitted by the system, such as privacy information, and those defined in . @@ -100,9 +100,9 @@ type InformationType struct { // A description supporting the parent item. Description *Description `xml:"description,omitempty" json:"description,omitempty"` // An identifier qualified by the given identification used, such as NIST SP 800-60. - InformationTypeIds []InformationTypeId `xml:"information-type-ids,omitempty" json:"informationTypeIds,omitempty"` + InformationTypeIds []InformationTypeId `xml:"information-type-id,omitempty" json:"information-type-ids,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // The expected level of impact resulting from the unauthorized disclosure of information. ConfidentialityImpact *ConfidentialityImpact `xml:"confidentiality-impact,omitempty" json:"confidentialityImpact,omitempty"` // The expected level of impact resulting from the unauthorized modification of information. @@ -115,7 +115,7 @@ type InformationType struct { type ConfidentialityImpact struct { // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // The prescribed base (Confidentiality, Integrity, or Availability) security impact level. Base Base `xml:"base,omitempty" json:"base,omitempty"` // The selected (Confidentiality, Integrity, or Availability) security impact level. @@ -128,7 +128,7 @@ type ConfidentialityImpact struct { type IntegrityImpact struct { // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // The prescribed base (Confidentiality, Integrity, or Availability) security impact level. Base Base `xml:"base,omitempty" json:"base,omitempty"` // The selected (Confidentiality, Integrity, or Availability) security impact level. @@ -141,7 +141,7 @@ type IntegrityImpact struct { type AvailabilityImpact struct { // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // The prescribed base (Confidentiality, Integrity, or Availability) security impact level. Base Base `xml:"base,omitempty" json:"base,omitempty"` // The selected (Confidentiality, Integrity, or Availability) security impact level. @@ -180,9 +180,9 @@ type LeveragedAuthorization struct { Name string `xml:"name,attr,omitempty" json:"name,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // A reference to the party that manages the leveraged system. PartyId PartyId `xml:"party-id,omitempty" json:"partyId,omitempty"` // The date this system received its authorization. @@ -190,7 +190,7 @@ type LeveragedAuthorization struct { // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` } // A description of this system's authorization boundary, optionally supplemented by diagrams that illustrate the authorization boundary. @@ -199,15 +199,15 @@ type AuthorizationBoundary struct { // A description supporting the parent item. Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // Commentary about the system's authorization boundary that enhances the diagram. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` // A visual depiction of the system's authorization boundary. - Diagrams []Diagram `xml:"diagrams,omitempty" json:"diagrams,omitempty"` + Diagrams []Diagram `xml:"diagram,omitempty" json:"diagrams,omitempty"` } // A graphic that provides a visual representation the system, or some aspect of it. @@ -219,9 +219,9 @@ type Diagram struct { // A description of the diagram (e.g., alternate text). This can be used to support compliance with requirements from Section 508 of the United States Workforce Rehabilitation Act of 1973. Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // A brief caption to annotate the diagram. Caption Caption `xml:"caption,omitempty" json:"caption,omitempty"` // Commentary about the diagram that enhances it. @@ -234,15 +234,15 @@ type NetworkArchitecture struct { // A description supporting the parent item. Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` // A graphic that provides a visual representation the system, or some aspect of it. - Diagrams []Diagram `xml:"diagrams,omitempty" json:"diagrams,omitempty"` + Diagrams []Diagram `xml:"diagram,omitempty" json:"diagrams,omitempty"` } // A description of the logical flow of information within the system and across its boundaries, optionally supplemented by diagrams that illustrate these flows. @@ -251,36 +251,36 @@ type DataFlow struct { // A description supporting the parent item. Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` // A graphic that provides a visual representation the system, or some aspect of it. - Diagrams []Diagram `xml:"diagrams,omitempty" json:"diagrams,omitempty"` + Diagrams []Diagram `xml:"diagram,omitempty" json:"diagrams,omitempty"` } // Provides information as to how the system is implemented. type SystemImplementation struct { // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` // A type of user that interacts with the system based on an associated role. - Users []User `xml:"users,omitempty" json:"users,omitempty"` + Users []User `xml:"user,omitempty" json:"users,omitempty"` // A defined component that can be part of an implemented system. - Components []Component `xml:"components,omitempty" json:"components,omitempty"` + Components []Component `xml:"component,omitempty" json:"components,omitempty"` // A collection of the ports, protocols, and services used within the system. - Services []Service `xml:"services,omitempty" json:"services,omitempty"` + Services []Service `xml:"service,omitempty" json:"services,omitempty"` // Details on an individual system interconnection. - SspInterconnection []Interconnection `xml:"ssp-interconnection,omitempty" json:"sspInterconnection,omitempty"` + SspInterconnection []Interconnection `xml:"interconnection,omitempty" json:"ssp-interconnection,omitempty"` // A set of entries that represent the managed inventory instances of the system. SystemInventory *SystemInventory `xml:"system-inventory,omitempty" json:"systemInventory,omitempty"` } @@ -298,17 +298,17 @@ type User struct { // A description supporting the parent item. Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // A reference to the roles served by the user. - RoleIds []RoleId `xml:"role-ids,omitempty" json:"roleIds,omitempty"` + RoleIds []RoleId `xml:"role-id,omitempty" json:"role-ids,omitempty"` // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` // Identifies a specific system privilege held by the user, along with an associated description and/or rationale for the privilege. - AuthorizedPrivileges []AuthorizedPrivilege `xml:"authorized-privileges,omitempty" json:"authorizedPrivileges,omitempty"` + AuthorizedPrivileges []AuthorizedPrivilege `xml:"authorized-privilege,omitempty" json:"authorized-privileges,omitempty"` } // Identifies a specific system privilege held by the user, along with an associated description and/or rationale for the privilege. @@ -320,7 +320,7 @@ type AuthorizedPrivilege struct { // A description supporting the parent item. Description *Description `xml:"description,omitempty" json:"description,omitempty"` // Describes a function performed for a given authorized privilege by this user class. - FunctionsPerformed []FunctionPerformed `xml:"functions-performed,omitempty" json:"functionsPerformed,omitempty"` + FunctionsPerformed []FunctionPerformed `xml:"function-performed,omitempty" json:"functions-performed,omitempty"` } // A defined component that can be part of an implemented system. @@ -336,17 +336,17 @@ type Component struct { // A description of the component, including information about its function. Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` // Describes the operational status of the system. Status *Status `xml:"status,omitempty" json:"status,omitempty"` // Defines a role that has responsibility for the component. - ResponsibleRoles []ResponsibleRole `xml:"responsible-roles,omitempty" json:"responsibleRoles,omitempty"` + ResponsibleRoles []ResponsibleRole `xml:"responsible-role,omitempty" json:"responsible-roles,omitempty"` } // Information about an individual service within the system. @@ -360,17 +360,17 @@ type Service struct { // A description of what the service provides. Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // A summary of the technological or business purpose of the service. Purpose Purpose `xml:"purpose,omitempty" json:"purpose,omitempty"` // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` // Information about the protocol used to provide a service. - SspProtocol []Protocol `xml:"ssp-protocol,omitempty" json:"sspProtocol,omitempty"` + SspProtocol []Protocol `xml:"protocol,omitempty" json:"ssp-protocol,omitempty"` } // Information about the protocol used to provide a service. @@ -380,7 +380,7 @@ type Protocol struct { Name string `xml:"name,attr,omitempty" json:"name,omitempty"` // Where applicable this is the IPv4 port range on which the service operates. - PortRanges []PortRange `xml:"port-ranges,omitempty" json:"portRanges,omitempty"` + PortRanges []PortRange `xml:"port-range,omitempty" json:"port-ranges,omitempty"` } // Details on an individual system interconnection. @@ -392,15 +392,15 @@ type Interconnection struct { // The name of the remote interconnected system. RemoteSystemName RemoteSystemName `xml:"remote-system-name,omitempty" json:"remoteSystemName,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. - ResponsibleParties []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` + ResponsibleParties []ResponsibleParty `xml:"responsible-party,omitempty" json:"responsible-parties,omitempty"` } // A set of entries that represent the managed inventory instances of the system. @@ -409,7 +409,7 @@ type SystemInventory struct { // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A single managed inventory item within the system. - InventoryItems []InventoryItem `xml:"inventory-items,omitempty" json:"inventoryItems,omitempty"` + InventoryItems []InventoryItem `xml:"inventory-item,omitempty" json:"inventory-items,omitempty"` } // A single managed inventory item within the system. @@ -423,17 +423,17 @@ type InventoryItem struct { // A description supporting the parent item. Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. - ResponsibleParties []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` + ResponsibleParties []ResponsibleParty `xml:"responsible-party,omitempty" json:"responsible-parties,omitempty"` // The set of componenets that are implemented in a given system inventory item. - ImplementedComponents []ImplementedComponent `xml:"implemented-components,omitempty" json:"implementedComponents,omitempty"` + ImplementedComponents []ImplementedComponent `xml:"implemented-component,omitempty" json:"implemented-components,omitempty"` } // The set of componenets that are implemented in a given system inventory item. @@ -445,15 +445,15 @@ type ImplementedComponent struct { Use string `xml:"use,attr,omitempty" json:"use,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. - ResponsibleParties []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` + ResponsibleParties []ResponsibleParty `xml:"responsible-party,omitempty" json:"responsible-parties,omitempty"` } // Describes how the system satisfies a set of controls. @@ -462,7 +462,7 @@ type ControlImplementation struct { // A description supporting the parent item. Description *Description `xml:"description,omitempty" json:"description,omitempty"` // Describes how the system satisfies an individual control. - ImplementedRequirements []ImplementedRequirement `xml:"implemented-requirements,omitempty" json:"implementedRequirements,omitempty"` + ImplementedRequirements []ImplementedRequirement `xml:"implemented-requirement,omitempty" json:"implemented-requirements,omitempty"` } // Describes how the system satisfies an individual control. @@ -476,21 +476,21 @@ type ImplementedRequirement struct { // A description supporting the parent item. Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` // Defines how the referenced component implements a set of controls. - ByComponents []ByComponent `xml:"by-components,omitempty" json:"byComponents,omitempty"` + ByComponents []ByComponent `xml:"by-component,omitempty" json:"by-components,omitempty"` // A reference to one or more roles with responsibility for performing a function relative to the control. - ResponsibleRoles []ResponsibleRole `xml:"responsible-roles,omitempty" json:"responsibleRoles,omitempty"` + ResponsibleRoles []ResponsibleRole `xml:"responsible-role,omitempty" json:"responsible-roles,omitempty"` // Identifies the parameter that will be filled in by the enclosed value element. - SetParams []SetParam `xml:"set-params,omitempty" json:"setParams,omitempty"` + SetParams []SetParam `xml:"set-param,omitempty" json:"set-params,omitempty"` // Identifies which statements within a control are addressed. - Statements []Statement `xml:"statements,omitempty" json:"statements,omitempty"` + Statements []Statement `xml:"statement,omitempty" json:"statements,omitempty"` } // Identifies which statements within a control are addressed. @@ -502,15 +502,15 @@ type Statement struct { // A description supporting the parent item. Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A reference to one or more roles with responsibility for performing a function relative to the control. - ResponsibleRoles []ResponsibleRole `xml:"responsible-roles,omitempty" json:"responsibleRoles,omitempty"` + ResponsibleRoles []ResponsibleRole `xml:"responsible-role,omitempty" json:"responsible-roles,omitempty"` // Defines how the referenced component implements a set of controls. - ByComponents []ByComponent `xml:"by-components,omitempty" json:"byComponents,omitempty"` + ByComponents []ByComponent `xml:"by-component,omitempty" json:"by-components,omitempty"` } // A reference to one or more roles with responsibility for performing a function relative to the control. @@ -520,15 +520,15 @@ type ResponsibleRole struct { RoleId string `xml:"role-id,attr,omitempty" json:"roleId,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // References a defined in . - PartyIds []PartyId `xml:"party-ids,omitempty" json:"partyIds,omitempty"` + PartyIds []PartyId `xml:"party-id,omitempty" json:"party-ids,omitempty"` // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` } // Defines how the referenced component implements a set of controls. @@ -540,15 +540,15 @@ type ByComponent struct { // A description supporting the parent item. Description *Description `xml:"description,omitempty" json:"description,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` // A reference to one or more roles with responsibility for performing a function relative to the control. - ResponsibleRoles []ResponsibleRole `xml:"responsible-roles,omitempty" json:"responsibleRoles,omitempty"` + ResponsibleRoles []ResponsibleRole `xml:"responsible-role,omitempty" json:"responsible-roles,omitempty"` // Identifies the parameter that will be filled in by the enclosed value element. - SetParams []SetParam `xml:"set-params,omitempty" json:"setParams,omitempty"` + SetParams []SetParam `xml:"set-param,omitempty" json:"set-params,omitempty"` } // Identifies the parameter that will be filled in by the enclosed value element. diff --git a/types/oscal/validation_root/validation_root.go b/types/oscal/validation_root/validation_root.go index 06d01655..969800d2 100644 --- a/types/oscal/validation_root/validation_root.go +++ b/types/oscal/validation_root/validation_root.go @@ -19,7 +19,7 @@ type VALIDATIONRoot struct { // A name/value pair with optional explanatory remarks. Annotation *Annotation `xml:"annotation,omitempty" json:"annotation,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. - ResponsibleParties []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` + ResponsibleParties []ResponsibleParty `xml:"responsible-party,omitempty" json:"responsible-parties,omitempty"` } // Provides information about the publication and availability of the containing document. @@ -36,28 +36,28 @@ type Metadata struct { // OSCAL model version. OscalVersion OscalVersion `xml:"oscal-version,omitempty" json:"oscalVersion,omitempty"` // A document identifier qualified by an identifier . - DocumentIds []DocId `xml:"document-ids,omitempty" json:"documentIds,omitempty"` + DocumentIds []DocId `xml:"doc-id,omitempty" json:"document-ids,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // Defining a role to be assigned to a party - Roles []Role `xml:"roles,omitempty" json:"roles,omitempty"` + Roles []Role `xml:"role,omitempty" json:"roles,omitempty"` // A responsible entity, either singular (an organization or person) or collective (multiple persons) - Parties []Party `xml:"parties,omitempty" json:"parties,omitempty"` + Parties []Party `xml:"party,omitempty" json:"parties,omitempty"` // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. - ResponsibleParties []ResponsibleParty `xml:"responsible-parties,omitempty" json:"responsibleParties,omitempty"` + ResponsibleParties []ResponsibleParty `xml:"responsible-party,omitempty" json:"responsible-parties,omitempty"` } // A collection of citations and resource references. type BackMatter struct { // A citation to resources, either external or internal (by means of internal cross-reference). - Citations []Citation `xml:"citations,omitempty" json:"citations,omitempty"` + Citations []Citation `xml:"citation,omitempty" json:"citations,omitempty"` // A resource associated with the present document. - Resources []Resource `xml:"resources,omitempty" json:"resources,omitempty"` + Resources []Resource `xml:"resource,omitempty" json:"resources,omitempty"` } // A name/value pair with optional explanatory remarks. @@ -83,17 +83,17 @@ type Party struct { Id string `xml:"id,attr,omitempty" json:"id,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A person, with contact information - Persons []Person `xml:"persons,omitempty" json:"persons,omitempty"` + Persons []Person `xml:"person,omitempty" json:"persons,omitempty"` // An organization or legal entity (not a person), with contact information Org *Org `xml:"org,omitempty" json:"org,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` } // A person, with contact information @@ -106,25 +106,25 @@ type Person struct { // Affiliated organization OrgName OrgName `xml:"org-name,omitempty" json:"orgName,omitempty"` // An identifier for a person (such as an ORCID) using a designated scheme. - PersonIds []PersonId `xml:"person-ids,omitempty" json:"personIds,omitempty"` + PersonIds []PersonId `xml:"person-id,omitempty" json:"person-ids,omitempty"` // An identifier for an organization using a designated scheme. - OrganizationIds []OrgId `xml:"organization-ids,omitempty" json:"organizationIds,omitempty"` + OrganizationIds []OrgId `xml:"org-id,omitempty" json:"organization-ids,omitempty"` // Email address - EmailAddresses []Email `xml:"email-addresses,omitempty" json:"emailAddresses,omitempty"` + EmailAddresses []Email `xml:"email,omitempty" json:"email-addresses,omitempty"` // Contact number by telephone - TelephoneNumbers []Phone `xml:"telephone-numbers,omitempty" json:"telephoneNumbers,omitempty"` + TelephoneNumbers []Phone `xml:"phone,omitempty" json:"telephone-numbers,omitempty"` // URL for web site or Internet presence - URLs []Url `xml:"URLs,omitempty" json:"uRLs,omitempty"` + URLs []Url `xml:"url,omitempty" json:"URLs,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A postal address. - Addresses []Address `xml:"addresses,omitempty" json:"addresses,omitempty"` + Addresses []Address `xml:"address,omitempty" json:"addresses,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` } // An organization or legal entity (not a person), with contact information @@ -135,23 +135,23 @@ type Org struct { // A common name, short name or acronym ShortName ShortName `xml:"short-name,omitempty" json:"shortName,omitempty"` // An identifier for an organization using a designated scheme. - OrganizationIds []OrgId `xml:"organization-ids,omitempty" json:"organizationIds,omitempty"` + OrganizationIds []OrgId `xml:"org-id,omitempty" json:"organization-ids,omitempty"` // Email address - EmailAddresses []Email `xml:"email-addresses,omitempty" json:"emailAddresses,omitempty"` + EmailAddresses []Email `xml:"email,omitempty" json:"email-addresses,omitempty"` // Contact number by telephone - TelephoneNumbers []Phone `xml:"telephone-numbers,omitempty" json:"telephoneNumbers,omitempty"` + TelephoneNumbers []Phone `xml:"phone,omitempty" json:"telephone-numbers,omitempty"` // URL for web site or Internet presence - URLs []Url `xml:"URLs,omitempty" json:"uRLs,omitempty"` + URLs []Url `xml:"url,omitempty" json:"URLs,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A postal address. - Addresses []Address `xml:"addresses,omitempty" json:"addresses,omitempty"` + Addresses []Address `xml:"address,omitempty" json:"addresses,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` } // A pointer to an external copy of a document with optional hash for verification @@ -163,7 +163,7 @@ type Rlink struct { MediaType string `xml:"media-type,attr,omitempty" json:"mediaType,omitempty"` // A representation of a cryptographic digest generated over a resource using a hash algorithm. - Hashes []Hash `xml:"hashes,omitempty" json:"hashes,omitempty"` + Hashes []Hash `xml:"hash,omitempty" json:"hashes,omitempty"` } // A postal address. @@ -173,7 +173,7 @@ type Address struct { Type string `xml:"type,attr,omitempty" json:"type,omitempty"` // A single line of an address. - PostalAddress []AddrLine `xml:"postal-address,omitempty" json:"postalAddress,omitempty"` + PostalAddress []AddrLine `xml:"addr-line,omitempty" json:"postal-address,omitempty"` // City, town or geographical region for mailing address City City `xml:"city,omitempty" json:"city,omitempty"` // State, province or analogous geographical region for mailing address @@ -193,13 +193,13 @@ type Resource struct { // A short textual description Desc Desc `xml:"desc,omitempty" json:"desc,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // Base64 *Base64 `xml:"base64,omitempty" json:"base64,omitempty"` // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A pointer to an external copy of a document with optional hash for verification - Rlinks []Rlink `xml:"rlinks,omitempty" json:"rlinks,omitempty"` + Rlinks []Rlink `xml:"rlink,omitempty" json:"rlinks,omitempty"` } // Defining a role to be assigned to a party @@ -215,13 +215,13 @@ type Role struct { // A short textual description Desc Desc `xml:"desc,omitempty" json:"desc,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` } // A reference to a set of organizations or persons that have responsibility for performing a referenced role relative to the parent context. @@ -231,15 +231,15 @@ type ResponsibleParty struct { RoleId string `xml:"role-id,attr,omitempty" json:"roleId,omitempty"` // References a defined in . - PartyIds []PartyId `xml:"party-ids,omitempty" json:"partyIds,omitempty"` + PartyIds []PartyId `xml:"party-id,omitempty" json:"party-ids,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` // A reference to a local or remote resource - Links []Link `xml:"links,omitempty" json:"links,omitempty"` + Links []Link `xml:"link,omitempty" json:"links,omitempty"` // Additional commentary on the parent item. Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` // A name/value pair with optional explanatory remarks. - Annotations []Annotation `xml:"annotations,omitempty" json:"annotations,omitempty"` + Annotations []Annotation `xml:"annotation,omitempty" json:"annotations,omitempty"` } // A citation to resources, either external or internal (by means of internal cross-reference). @@ -249,15 +249,15 @@ type Citation struct { Id string `xml:"id,attr,omitempty" json:"id,omitempty"` // An address for retrieval of a citation - Targets []Target `xml:"targets,omitempty" json:"targets,omitempty"` + Targets []Target `xml:"target,omitempty" json:"targets,omitempty"` // A title for display and navigation Title Title `xml:"title,omitempty" json:"title,omitempty"` // A short textual description Desc Desc `xml:"desc,omitempty" json:"desc,omitempty"` // A document identifier qualified by an identifier . - DocumentIds []DocId `xml:"document-ids,omitempty" json:"documentIds,omitempty"` + DocumentIds []DocId `xml:"doc-id,omitempty" json:"document-ids,omitempty"` // A value with a name, attributed to the containing control, part, or group. - Properties []Prop `xml:"properties,omitempty" json:"properties,omitempty"` + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` } // A reference to a local or remote resource From 9d80bd34bea492ecbded96eb47f2a96420e9e786 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 15 Jan 2020 10:17:47 +0100 Subject: [PATCH 074/110] Fix golang camelCase naming Co-Authored-By: anweiss <2326106+anweiss@users.noreply.github.com> --- metaschema/metaschema.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index a538f839..f1b275ac 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -19,8 +19,8 @@ const ( AsTypeMarkupLine AsType = "markup-line" AsTypeMarkupMultiLine AsType = "markup-multiline" AsTypeDate AsType = "date" - AsTypeDateTimeTz AsType = "dateTime-with-timezone" - AsTypeNcName AsType = "NCName" + AsTypeDateTimeTZ AsType = "dateTime-with-timezone" + AsTypeNCName AsType = "NCName" AsTypeEmail AsType = "email" AsTypeURI AsType = "uri" AsTypeBase64 AsType = "base64Binary" From 84b265a9dcc89098201d4895c97aee5fa5678b51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 15 Jan 2020 10:53:18 +0100 Subject: [PATCH 075/110] Refactor: Extract method DocumentType() With growing number of document types in OSCAL standard, we will need to recognize the document type more often than not. --- cli/cmd/info.go | 10 +++++----- types/oscal/oscal.go | 36 ++++++++++++++++++++++++++++-------- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/cli/cmd/info.go b/cli/cmd/info.go index 1557cb17..7ee7b6a9 100644 --- a/cli/cmd/info.go +++ b/cli/cmd/info.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/docker/oscalkit/pkg/oscal_source" + "github.com/docker/oscalkit/types/oscal" "github.com/docker/oscalkit/types/oscal/catalog" "github.com/urfave/cli" ) @@ -22,19 +23,18 @@ var Info = cli.Command{ defer os.Close() o := os.OSCAL() - if o.SystemSecurityPlan != nil { + switch o.DocumentType() { + case oscal.SSPDocument: fmt.Println("OSCAL System Security Plan") fmt.Println("ID:\t", o.SystemSecurityPlan.Id) printMetadata(o.SystemSecurityPlan.Metadata) return nil - } - if o.Profile != nil { + case oscal.ProfileDocument: fmt.Println("OSCAL Profile (represents subset of controls from OSCAL catalog(s))") fmt.Println("ID:\t", o.Profile.Id) printMetadata(o.Profile.Metadata) return nil - } - if o.Catalog != nil { + case oscal.CatalogDocument: fmt.Println("OSCAL Catalog (represents library of control assessment objectives and activities)") fmt.Println("ID:\t", o.Catalog.Id) printMetadata(o.Catalog.Metadata) diff --git a/types/oscal/oscal.go b/types/oscal/oscal.go index d9955fb8..d9785ffc 100644 --- a/types/oscal/oscal.go +++ b/types/oscal/oscal.go @@ -14,10 +14,17 @@ import ( yaml "gopkg.in/yaml.v2" ) +type DocumentType int + const ( - OscalCatalog = "catalog" - OscalProfile = "profile" - OscalSSP = "system-security-plan" + CatalogDocument DocumentType = iota + ProfileDocument + SSPDocument + UnknownDocument = -1 + + catalogRootElement = "catalog" + profileRootElement = "profile" + sspRootElement = "system-security-plan" ) // OSCAL contains specific OSCAL components @@ -27,6 +34,19 @@ type OSCAL struct { // Declarations *Declarations `json:"declarations,omitempty" yaml:"declarations,omitempty"` Profile *profile.Profile `json:"profile,omitempty" yaml:"profile,omitempty"` *ssp.SystemSecurityPlan + documentType DocumentType +} + +func (o *OSCAL) DocumentType() DocumentType { + if o.Catalog != nil { + return CatalogDocument + } else if o.Profile != nil { + return ProfileDocument + } else if o.SystemSecurityPlan != nil { + return SSPDocument + } else { + return UnknownDocument + } } // MarshalXML marshals either a catalog or a profile @@ -120,20 +140,20 @@ func New(r io.Reader) (*OSCAL, error) { switch startElement := token.(type) { case xml.StartElement: switch startElement.Name.Local { - case OscalCatalog: + case catalogRootElement: var catalog catalog.Catalog if err := d.DecodeElement(&catalog, &startElement); err != nil { return nil, err } return &OSCAL{Catalog: &catalog}, nil - case OscalProfile: + case profileRootElement: var profile profile.Profile if err := d.DecodeElement(&profile, &startElement); err != nil { return nil, err } return &OSCAL{Profile: &profile}, nil - case OscalSSP: + case sspRootElement: var ssp ssp.SystemSecurityPlan if err := d.DecodeElement(&ssp, &startElement); err != nil { return nil, err @@ -147,14 +167,14 @@ func New(r io.Reader) (*OSCAL, error) { if err := json.Unmarshal(oscalBytes, &oscalT); err == nil { for k, v := range oscalT { switch k { - case OscalCatalog: + case catalogRootElement: var catalog catalog.Catalog if err := json.Unmarshal(v, &catalog); err != nil { return nil, err } return &OSCAL{Catalog: &catalog}, nil - case OscalProfile: + case profileRootElement: var profile profile.Profile if err := json.Unmarshal(v, &profile); err != nil { return nil, err From 7815d74512b2881e742aa0db5cf9d14f5755edc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 15 Jan 2020 16:03:20 +0100 Subject: [PATCH 076/110] Introduce `oscal convert html` to covert oscal file to human readable html --- cli/cmd/convert/convert.go | 1 + cli/cmd/convert/html.go | 68 ++++++++++++++++++++++++++++++++++++++ go.mod | 3 +- go.sum | 19 +++++++++++ pkg/bundled/oscal.go | 36 ++++++++++++++++++++ pkg/bundled/pkged.go | 8 +++++ pkg/oscal_source/html.go | 22 ++++++++++++ pkg/xslt/process.go | 22 ++++++++++++ 8 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 cli/cmd/convert/html.go create mode 100644 pkg/bundled/oscal.go create mode 100644 pkg/bundled/pkged.go create mode 100644 pkg/oscal_source/html.go create mode 100644 pkg/xslt/process.go diff --git a/cli/cmd/convert/convert.go b/cli/cmd/convert/convert.go index 4874cfa3..787eb460 100644 --- a/cli/cmd/convert/convert.go +++ b/cli/cmd/convert/convert.go @@ -12,6 +12,7 @@ var Convert = cli.Command{ Usage: "convert between one or more OSCAL file formats and from OpenControl format", Subcommands: []cli.Command{ ConvertOSCAL, + ConvertHTML, // ConvertOpenControl, }, } diff --git a/cli/cmd/convert/html.go b/cli/cmd/convert/html.go new file mode 100644 index 00000000..30718e9d --- /dev/null +++ b/cli/cmd/convert/html.go @@ -0,0 +1,68 @@ +package convert + +import ( + "fmt" + "github.com/docker/oscalkit/pkg/oscal_source" + "github.com/urfave/cli" + "os" +) + +// ConvertHTML ... +var ConvertHTML = cli.Command{ + Name: "html", + Usage: "convert OSCAL file to human readable HTML", + Description: `The command accepts source file and generates HTML representation of given file`, + ArgsUsage: "[source-file]", + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "output-path, o", + Usage: "Output path for converted file(s). Defaults to current working directory", + Destination: &outputPath, + }, + }, + Before: func(c *cli.Context) error { + if c.NArg() != 1 { + // Check for stdin + stat, _ := os.Stdin.Stat() + if (stat.Mode() & os.ModeCharDevice) == 0 { + return nil + } + + return cli.NewExitError("oscalkit convert html requires at one argument", 1) + } + + return nil + }, + Action: func(c *cli.Context) error { + for _, sourcePath := range c.Args() { + source, err := oscal_source.Open(sourcePath) + if err != nil { + return cli.NewExitError(fmt.Sprintf("could not load input file: %s", err), 1) + } + defer source.Close() + + buffer, err := source.HTML() + if err != nil { + return cli.NewExitError(fmt.Sprintf("could convert to HTML: %s", err), 1) + } + if outputPath == "" { + fmt.Println(buffer.String()) + return nil + } + + f, err := os.Create(outputPath) + if err != nil { + return cli.NewExitError(fmt.Sprintf("could write to file: %s", err), 1) + } + _, err = f.WriteString(buffer.String()) + if err != nil { + return cli.NewExitError(fmt.Sprintf("could write to file: %s", err), 1) + } + err = f.Close() + if err != nil { + return cli.NewExitError(fmt.Sprintf("failed to close file: %s", err), 1) + } + } + return nil + }, +} diff --git a/go.mod b/go.mod index eaeeeb90..5c78effa 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/docker/oscalkit require ( github.com/fatih/color v1.7.0 github.com/iancoleman/strcase v0.0.0-20180726023541-3605ed457bf7 + github.com/markbates/pkger v0.14.0 github.com/mattn/go-colorable v0.0.9 // indirect github.com/mattn/go-isatty v0.0.4 // indirect github.com/santhosh-tekuri/jsonschema v0.0.0-20181206154329-5d49c9dfc783 @@ -12,7 +13,7 @@ require ( golang.org/x/crypto v0.0.0-20190103213133-ff983b9c42bc // indirect golang.org/x/sys v0.0.0-20190109145017-48ac38b7c8cb // indirect gopkg.in/square/go-jose.v2 v2.2.2 - gopkg.in/yaml.v2 v2.2.2 + gopkg.in/yaml.v2 v2.2.7 ) go 1.13 diff --git a/go.sum b/go.sum index 2d602977..e455ce9d 100644 --- a/go.sum +++ b/go.sum @@ -1,14 +1,26 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/gobuffalo/here v0.6.0 h1:hYrd0a6gDmWxBM4TnrGw8mQg24iSVoIkHEk7FodQcBI= +github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= github.com/iancoleman/strcase v0.0.0-20180726023541-3605ed457bf7 h1:ux/56T2xqZO/3cP1I2F86qpeoYPCOzk+KF/UH/Ar+lk= github.com/iancoleman/strcase v0.0.0-20180726023541-3605ed457bf7/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/markbates/pkger v0.14.0 h1:z6KCEBkr3zJTkAMz5SJzjA9Izo+Ipb6XXvOIjQEW+PU= +github.com/markbates/pkger v0.14.0/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/santhosh-tekuri/jsonschema v0.0.0-20181206154329-5d49c9dfc783 h1:OR+Kamj42IgYXAJDh+6Dthdf0DKzqJvtvswnnGENJDg= github.com/santhosh-tekuri/jsonschema v0.0.0-20181206154329-5d49c9dfc783/go.mod h1:TEAUOeZSmIxTTuHatJzrvARHiuO9LYd+cIxzgEHCQI4= @@ -16,8 +28,11 @@ github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sirupsen/logrus v1.3.0 h1:hI/7Q+DtNZ2kINb6qt/lS+IyXnHQe9e90POfeewL/ME= github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/urfave/cli v0.0.0-20181029213200-b67dcf995b6a h1:qzVPM2q9ifOxaIVx4kyJvCHXsMNDTLgzu/29aqIuyB8= github.com/urfave/cli v0.0.0-20181029213200-b67dcf995b6a/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -27,7 +42,11 @@ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190109145017-48ac38b7c8cb h1:1w588/yEchbPNpa9sEvOcMZYbWHedwJjg4VOAdDHWHk= golang.org/x/sys v0.0.0-20190109145017-48ac38b7c8cb/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/square/go-jose.v2 v2.2.2 h1:orlkJ3myw8CN1nVQHBFfloD+L3egixIa4FvUP6RosSA= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.7 h1:VUgggvou5XRW9mHwD/yXxIYSMtY0zoKQf/v226p2nyo= +gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/pkg/bundled/oscal.go b/pkg/bundled/oscal.go new file mode 100644 index 00000000..42f0e23a --- /dev/null +++ b/pkg/bundled/oscal.go @@ -0,0 +1,36 @@ +package bundled + +import ( + "github.com/markbates/pkger" + "io" + "io/ioutil" + "os" +) + +type BundledFile struct { + Path string +} + +func HtmlXslt() (*BundledFile, error) { + in, err := pkger.Open("/OSCAL/src/utils/util/publish/XSLT/oscal-browser-display.xsl") + if err != nil { + return nil, err + } + defer in.Close() + + out, err := ioutil.TempFile("/tmp", "oscal_xslt") + if err != nil { + return nil, err + } + defer out.Close() + + _, err = io.Copy(out, in) + if err != nil { + return nil, err + } + return &BundledFile{Path: out.Name()}, nil +} + +func (f *BundledFile) Cleanup() { + os.Remove(f.Path) +} diff --git a/pkg/bundled/pkged.go b/pkg/bundled/pkged.go new file mode 100644 index 00000000..98c72500 --- /dev/null +++ b/pkg/bundled/pkged.go @@ -0,0 +1,8 @@ +package bundled + +import ( + "github.com/markbates/pkger" + "github.com/markbates/pkger/pkging/mem" +) + +var _ = pkger.Apply(mem.UnmarshalEmbed([]byte(`1f8b08000000000000ffec7c6d73a2c8dbef77f1ed6477789024a4eabc101c11a324624203a74e6dd1e002d23cfc03a2b835dffd5437a080989899ec7d4edd75bf98dda8d87df5f5f0bb1edb7f067ef4779c0e1efe19e07f63ff6df030f8eec5e1fa7b8ab68195fac11f7f33fc77c7caacef6f6bc7b3b2efae9f7df7b6f0bb13dbc1faed7b9cda160afc6c703390c3247ecb9eadcc1b3c0c063703c50ad7838741e389716c971fbd586fee3a2bff56e3b8fa6b6165b6377888b608dd0c569985d68387bf2d94aeab57eada4ae3a87c568a273e5aa7f5d3e5dec797e37572fcfb659d669da7f15b9d6f2c62678bf7fb67501dc0f5336f0bffb4e3b0e7a80bcb8f060fd9db767df3bb5c93e245ecfcf202dfddf8cf3076c83adafa2df5097fe83f6976f0f3e7cf9bc1dfe5b1ff79e7380fdf9f56e268fe3d7db3bf6f331fa5e4bfdf932d447eea7dd757f397f2d93fe05bbc4bd76f7f387e9a20abf8739f22bc34d621fc7f679d593e22bb450dd1f77eed6690fa87f5e081e6f87bfe6610c6ce7af030646fc99f7f653ef93a43d1fc1f34fd07c3bdd0f403c73fb0dc9f147fcb53772c477fa3e8078a1adc0cfcf42f078ba0d294b420148cd7f9e0e1767877c7dc0ce4281e3cf0d4f096e1f99b8182fc28183cd044e6ebc103cb32d4f066f0ea3b83079aa2a89b8174fa53ffebafc472a8c1037533501dbc2675335835491750501e6548f1b7f8656c07e9e081656e06a3cc0f312dabb58d1fbfe3a9bbfbe12d77335052fc0e4bdf7377147bcffdbc192c3a8f0e6fef78eeeef8687de89f3703b1bb284d0d198aa99f1cdeddf314cfd0fc4f42fc36daa66b67f0f0bfa91bea86fa3f4427bcf5dbef5afbc72a73190faa4fff070bfe4bb1e0669090b3fc33780edc8f8e5449eab780e1e7cd00d33c78183c8ff921043bd709b5c266500e3794bf580d77b22f20182ab929a1ad79a07c4d53a5f98beb3f1f868fcf53ef00c7c9c199a2d4d495d8041a254fbd0c4adce129c29f51be3555297b1ce773d6619d8263170597dba19d2f5e02ee69c51bafd42ed7a6330f464a08d95926bbb12b4f4d64474a0299212f6f7e6c17a2fc288bc21082fdd63e7cb8e6d09aaa1924df1935be97e436a3782d9a18e560878b2d0cd1c111b908b2460ea3450e596563805d4ece8fe991b4a1c1ec69537acdec503b38604fcd75a1308199ac25edf0bc9a956b8bf237d11fb9f85fc51bca04f40e4a13ca5c0999a1ab1b6b4cf9f3a27c4e1647f784d6f110d38a5fbbcf92870cb0ac3f2fdf9baa8923edd133a6a57a4f1eef8736b3bb75c249ea80d70c32866b335a6a02857a5ecd0253573626e0020370d4d3a63e7b4259ba9a9a5abad75772de5e6f973b12a2a0f4dad95ba1d6608fe4a9cad9d22b2f472a5a4f97b9c12a0779337c7c167f64f395b034f55966e9ea419634cf6610b27d21c7ba04a50967012e92452aeba3df60f8dd7a45e7a62f1c4cb04706bbe4655fddd8ecc29f1f4e7cc1bc9ab3252d8d75eee74c875fe3bd0f1995932525357405cbe60e4a3c966706c34966aedcfcd1473ca6bdb9f67aaaa44fe164674b7b6eaeab08ea426ae82ab28bfbc6dabbdc08f960fd527d77bccb1bf2bb9fb31d9997cf3d1ed78f4eebca12ed3992121f75679c6c0c5df5a0c447f274e7563a88f9934249db3812caa17fd29b8fe87d16f9523f242db3a5bde75472fd4837eb7d2b5df06b5e3f4b6ed1e069a9472bb9c9f7529ebab083d3203bedab1d8e72c4fc1acb97e9c37b9df4bab0c0c487d2ab4be4f642f9b5ced5723be929b7810c47d9219fcad3d4856052980cda3e6d2608bea4ae2d4d8212bf627701b4eca9107cc8621b916fe5a91a5b60e8da0c9f5a60e91ae1de3398d4fd7b79d4b1adcd6abec1f05b673acba128dc61d9d9a193409fa6203bba95c7a3ad52aebb33801a607d7ff2477b135077b234cbed5045f626761dc94ba02f04905529f3c25ea77d46df6431be354354d8ec3233182f81d2329545eee080d9e9bce3a1fbb849424b9f1d1c91de58124acd5e1a050457027fe4d9a8de538817ab9d6b8de55496dcc35c146245c4af5ff16b06f3d30cf9ad23d2a101e8044e835b79aa78305a6436a31516309a7bf9f86c90a1cef793dc4363ad83a52708f368b11921794af5c8f43e97253571fc1dc6b54aff85133f7d3a3581493df9026549682b4f951c4a2890a5596a00e5ad298b39d823335a36e59419fa2cb2c0308392163ae3d85d8843da04545316f9bc10024b37b6b634291c5168c91286fcd6ecea96d45afb9c0722b733f41985f9d07be6a9820c56c57ecfb5c68beabd739e291d9e35f8132f8af2bd7521845847e6ba92acc3d75b79fc835a88af8df391b39df629dfbb93253387d132b319746bbec4eee265b19bb5e48865d2f9ee15723525c474bfdb43e3be4de3e874467147d6984782678793ac69e7735dcded52865469737dfa38da2e422d6bf18d9c779fc0f035b3242d31198feae32fa1fd1376b6167bedeca84b06a0f0d94f1824d1c894100d57c20132fbc41485c80e350437677c1d2ec4d73b792a78a6a42630b4cb7331ed7375f4cd832b61d7c2457fb4ebe87a83275c6e8409f6c398c61e1b9a114c75246de8887402431541fcbe4815efac995a807b237a22a103c6fbf54bec5a80bc8fe6609642a66db398c67985df4638d9588c534056db9a22bd81cc3ec73668807d62309a0fa71a7a7a9f9ff533a7f3e8b35adebbf9a63cd3499f3a9f35f57f3ada42096dad82f3ed907f33c190c812638ec9ce720770c11c602ce28b275f484d40e73054620b982164866d0c015a60e958763576a99e1d66b91d4eb62683e54c62adcc94b40d64671eb171fc3d8c372b9ab2a6783f276eca9ed847b4741d89c88f31f51965011c9bd21e945004891f22b2c3fadad4a5cc91f85da51badf78d90a71c89cfded39b7988b6d81f38e2ce9d874a0c19b43157429fff3bc9449a6cac430743c5e1beb3c7d6019c67b34a62321c32c577d72c4cb0c49f7b06934576c8d330c4be934f218b7dbd90c0306be2318993b15e1e9f296550da9fdfc2ee04460ac2bc9de3bd993efc0ada5829728c01f674c9870a57599583d2ebad2c218ae8efe1684b8109142c7bca02fcf6c917686c5b7648f0a99fe71516ce010a7a3098235851ed6b8693cc027beec9170e06e00e735d417688c2a7e3191c640127c6bed008f9d41ca7cdf8f8b20d9631cc9d2c1d759eb52444b57c6351fb6a6c4f1a5a8f5b9f15f5bec407eb6e4bf616e00e58874f584627668f9f7a1a5f8a2338d6d2d5d89cce3c871936647676de23ff483e8bf189c4e36873615d1fb2ee451b830005a6b4c798c35a40a52c7cbe8eff99470a6d440a55fadd23ff320ba85b429b34c3b9dd276458e6474fbeb0c5b9b40176c7ef3a4ceddfce3f2b7998ba4fe357cc43f7dc776139d03b0328d45c573d23c4f960ea3a0c0a1cc9c57e7b57ea1a3ec3deb3a70aa601eb486ae838af5b7e7886165f4294d9d2648331ca00b3d45c09149179c7ef55b1dc45ec2d79e814a61e7c8c43459fcf1e9d62bfaecfdd681d9f718c41e85f89fbcb7d2eed27f4ef2575721989cbdb5821d4fc6bc6cd27b9bcc425ee49939dcdb4be975aab3236c2b94785599933453bfc1d9b9dd0863e6bd99b819fbfe4af70acdccd3dc6bbbccc894dcf0e11d129926b8ee26bf3658c9729c604b24fd4a8178c1a79e429bfc4fca30cc6e5e5903f18cc04af4fea2ab22f649051514f5e7b5fd388e38739e0431ca3937c7c4cf973bfaaa11ccf72a217bfff997c9be8af3e3ae5db8d5cc060f69ecd2e783924f8bb937d2131c794bf664bfcb04382a3be09ccdc0e5fe346eda0cc2527e95e5ff1230b2cd359318c1e75ca6fd650aea87ddccfd9233d1fd717c41fd9fca5e4bfc5689c2c711e04afbc1caa889ca5f27176219fcb24547218a905647699cd0ac82864d7d1152c9b11d1bfba6ed590f1a7f7888402b202b223956bd65a6c56f5f0794cc051adf749cc4e2347d20ab9e25b4513cec33786be8c9712a11beb7f3a2b16d1fc875040668f1e31bd7e55fbba48b386e3441c47674614641658fab278d29147948d2ca03ab22fd036f3cacb819098e2391fded5f5135f1b351d928f6da03439d807ca5f33fb1c3f3b0784aeb85f4f94dc9e06dd7a23d6ad56bdaed2f98d01f66953a74e67a63d8b79cdba75a6566d93419425d2750eb3c532785ecd0a07e0586ce1376df128abe92cb727d9a8b219f779358acaba9fe3c87ebb96579dc783d22eebeaf1d535add35913d317285327fca831aa5dabe9d41ccb9cf858534330f43c182a08026deb4c176d9e943538ea3938cad13501171b80db94baa31e9e453e56c6ad3dde3d432fff5ab52e6c3b7c60be50be05b80d9c6a81d95337c6e768d564d98a1f9b331e79f65448d72bfa8485faa2a94735df0a1398c80eb5adc16887063e2730545207a8a82dcbcaa6808163e903394fc8538f526def3364865a61625ee98ba42b076bbcfcf61a6aa1a9631928c83ec4eeb314b895dfe3e5f0620ce53f07c4e7decf99e05b97ff35465ac068ea9d375f516e1d4fc9d33a9e72b0fdbb96a415e66a94cd1b35e6237f2ff899ca9f92754dacff5301e74924e63081e939608ff7290c9df4553c281ed7bfc6cfb675b8e2fbb57eed0a7d3afa988e3d74ebf6c9df7df5e6befe41131fdbd8d5b5f5636d1982c91bc9a9bb75ed93ee923c62ae57f5a71ac7a2190d71ee5bc87d7abcb3437e07a823c6febb58f4495d59321ec271286449dfae2d4b2d1b55b28abab1ff8cc6fa3bc4712d92251ee76f090c27a93c51964fe3d16efef27a90a7d89670fe8a6313c178a576279b93ccdcf685c00e272ce90d4dd5d85c0909d405cf6097ae2395757fbcc76aa22a2f277d253a2bafa84c9e0889c16458cf69bbd475ec27880dcd57d4b76bf5f3a49b7cbb47b612eee5237e28b471f29f79b74782f97f8c7b56c2d201fb14c7f916e0285808d57a9fb2b9a3bdcd9956cc029747fb70883fc4b2f85b147a6df58aefd63efb025deffbea8abf57f9e77931dc3674fede1a2faed2ede61ab3e9c9d66a1cb1236d3b0768dbe70fcc902fe640f30cc6edb3cdf76cbdcf4fe53d3e2e84ac9c9960b2b1c6cd1ed7e24b7a70652e78111fab5e421deb28ad9e661d7f4156e0ba79cb5242411fbf3ee2ffdc3ff1bda9fb9ff3f1f2b6e1cfc919e680a3219821dbefc3ec0ff212464d9ccd97f45f092d4dacc67c3675e540e231d171deb1a7ccd4d51832cba8eaabffd6becd3ca463df67cf5a982fd89f74f215e71403f33386f7ad90f48818e27b6a3d19ef492fe6985f96b5e35f8bf9bf4287c6fbaa5e316aea26d5eab997f31045275fa0cc5f8c7b9bf494f6466f1d40fba62ef7cc1fa8c1efecfbc17af875d1794d66198e782bf2257f3e1d1b9ee787f6749640769638d38097373f76d826fbf1e73eefe0d125f97d4adf3fc480ab6b385867557821ffe3670cf16191ae51be2cd1b9496658889e6730d23223d48a863d5c9c3db000179bfa2c71242d98032e979bf1663821798a23f1c5d326fe0ff8d0efd20e384cdec393ae7fbe9e365d2d2c40672658b6fcaf53ce5811993c8a6a02430fc766940996190cefd359318ae6a21d3d36f2bbe7e9a88b0de73c3be17ed5ebe8c4e251ab46e599918a6cdfa3ec70b2b51922d3f843d9ad76912cdae9acb09379877607eb31a09129067e330eb6bf6626a7d4cddf8ea37ad7f5604f9db1ae859ef20bd5b3430761bb6b60ef9ba907f18c39ab1b45f31f0265e8b3c8d4974933deea891d9afb7f369ffaaa7ce493fce24fb55f5dd934ec76d7385bfbb3b296ba3340a38e5af75d36dc92ac0b34cad4e5db67913fd8d2647be6ffcabadeb7e619f0ebcfc74fc3360655bdbbbaff7d6d4cf62fe97993bf952d9ff4d3164f75c26ae6b01527d8ace0c1462d11e7fd36bbf49f51593b7fdaec72f2cc396e50a6ee51cf7ee30cf8f5a7ebd3a32f8bb90d401d7d9e2969a1a16b69330e6ff2a2e7732c3ba2470d9dc479d9013fa3d6cf8fe3fb394bf4f24ce6a41f3c1e36cf825f5f1367e78d5861f72b7141a33e4366332ec5051d1e1d8cc64c6b57173a9f5fafdb277df9ac7e973616a26d392bd1db0328edef88eda59e3630a52bc3ae4dfcff798e50456638a1e174d9ec25b5f1afe7992ed63d5ec6baffe7ba7d46eb4b2fad2d1adec38556dfeabc7e735697fa4c7de92ca66185c2027c61e92ad7cdedbab542239c601f5ccea75535b84eac7135bee3b52ff8cbf2b3f7eb089fc9e95303cc10ecadbffe0686bb57e7030564470d3f3ba3a14f27cdd9e9335f55d790a6755cf069ac6dc50d1ffab54f63f2d9198f31a83ca6dc637e2fb672fba68ceb99be96bd5b80db39fad22dfbfa946f907a70e643d6f51bdf25afafacf37c81fff9409ee1de33422d7d07a78f7874863dfd77256adbec3b6329b34ddc8f57bf87ed9fad033574ba9a5b38f12056c6dcb8aefb36fa505f4e93c96a8929e17c17e765e7b580c67d01ea192934d691aa3fe94151881c8002d2b37cd9e5d678f97575d2f7ea5defcc77d4349cfb28eeb9b4193571c2d70f625314ca5315d9a416d0ac4b2cfde76871de0f1dff9b679f1c6c463bd80cc90b3f96d1059fba6cd63ec717f4ffa3dc3fbcba5e5a63c6bfa6b79099fd07dbbba59b385fcf1b393da91f3568cb1b7227fc6bd7cae4733b3ce56d1fd027ffe757678d8e78efffdefd9ec79efa6bc76ff5cb32a87859bc3ff3f421aefbf17b38f6199cfe6d1db9140ffd82ff7fcfd75577e446513dcb3a2b84c42e044f9e2a09e10d63e058b3d44fc06fabfea8274fcbd8dec471922f9472a967f42444d98550f7de48cfcf00684bd6955464334a61e942b5de646b8aa318b2e56b03ecd3f52a708d55b5e6e77a93f51cf4b9dee8b3a49a37ac7b811b28f11847a863dffc8837fdf5d339e08bb98ef5deb87df2e3bc33830597120a9e8142db11e9f5c68f2b7e54e5a399055407101d59c68f5ab3765af6bb5fa7b3dc095150f69ccb58cfd255baba3bc358e0874b6617f17a7a397b07439e92a70839a27070709ec7cec80c679d03bc5fbbd3b658a72ce06c4dd0d75769fa0d2e77443730987d8ef1db39ce3d05fe339905c7b88e22186a41cf5c496d0b2719bc5c8c8f2af9a977b369933eb52fee3ff537c5f6fdcc33b976666a8c9510dba1163eafe4cd9a1212734a9dcf33fd5abfb09a01a77d28f11bab389f47325eaebddbd99c2b2279d659cfa75f4e5ea74ed6981538e5d6dd39a3eb6a0abf38b755d7e4ceea8b7a55d768d616c56be7a6caef3eaee46f80e29ee58920bc061345d5d4c9ab2f80e5eb5e5357c274a599931744f5ce7df5c4c9dd1e7a7b4eacd2ed46effee3392ff15c1f2fd02cbcd2ca4ca5b8893ae9a1f78a78fe9375c4f7ebbd977398869e5f9fc7b4fbb11d9e7f5c7f79cf9f5eeb1b72d8a8934266d7a839b5e71faff4abf90777abafa129b51a31169482064dfbe417684aad972f893fbc86fcbdab7beed319327f694ee2c797e41be5ddb7fe5a78e7b3eeb93eea31117fd1c5a97a8ec592f8dc665ebb1856f1d9894d328f76c4840282496ae9099aebcace000a7a148333ff73f5bdff365eb196a46d2ff8b2dc913c64474ed243ebc7f67b2edb162642568d4d7dc65aba82ba3eafd2991832fcc17c69e1a9f7e53519e22b3368b32ace9d0e73dd491cc98d97925798c020f3ef38feba223eac7b95ad5eb5c568dca3e8e0d7a4f63107330ee3e6acd897b51d9c8f85766600933275b9bdefaad9076ec5f5e51dd4737b6fce6d6f21bb8c67d3bae71af4cea51bba4ad921f29dd68c5c959f6d4ef742893d1c6ad94c284cb7116954473e3d33c2976b5a06639cd51b49bcd51bf35c8d210ddbf470cc8d2ee837d1fd662c6487e4cedbadb9a2314d1b73e59ec73dd7d7f55b3c71180fc1f35882c4f22f046b042c2fd78866b9c568dbb3df18b944b7af1ef5ee7398d08a814fba7baa4d26304cb3f23ee7653bee3fd7fe7d1b17afa911103be8c6b00d7ce0294bd20a87412d8c6860db39ce36e3e9dfee37b7ea1fc41e317fd7d3b35cb2878efd8977e7f72c2ecf59f7fdcecb05fe7d3c8722f7cd8076fdc1fd39af39a8eab3a2bc5fcce5b258cd8d1402a1dbd467d47a25e01cb4ba275fe1cf2946edf32bbd32bbe4df6b1e34fa5c01dedb96b44096d056968e798beb4c675ef93b5093f4685357d5ea5bf72c3e3b13f3f19d8f46bc7caa951c31b2fdfd26ce935a748bb6fb39d353fbfcca3b70d7e40838deb9388b4930faebe7ffaf92a3429917e61d6c560dbeba3e76a57e34ef715fee6d473816f1c8dd02d8c3bfaab6af37d6bafd95b99e2feaef77cf889a336126a01ab98a96fd02df117c3f57b9eafe4fe5f32ede1bac638b5fa00febfcbbb674dd1d0e2fb780822ed473313e2606f3fa0b775ebfa01f1d2a89239577512fd2a7ab5ee7f7bdfeabe7bf4e78fa3ec66279fdbb7787afbbb313b4efe7fc68ce51f8cd5978ab559bd3b2f67d5f6dd779ed777b1158f7cbf9ff63ce72d5bdb40b774f8e3d8ccfe715fdf1627f2e296fcff2e88ae7cd3daebacf22b66387cfe866a91bc719d5f76ce9233d3de3db39ee672924bfc14813393d8aa8af9edddfdbf28797ea6617edaa3e477947543b5892869cf1f07f0d6e0689f5b68eb2d3af789e7eab7350ffb4ebfa7f7ec9f9bfdfafb7fefcbf000000ffff010000ffff7f72fea3aa5b0000`))) diff --git a/pkg/oscal_source/html.go b/pkg/oscal_source/html.go new file mode 100644 index 00000000..19af3b6b --- /dev/null +++ b/pkg/oscal_source/html.go @@ -0,0 +1,22 @@ +package oscal_source + +import ( + "bytes" + "errors" + "github.com/docker/oscalkit/pkg/bundled" + "github.com/docker/oscalkit/pkg/xslt" + "github.com/docker/oscalkit/types/oscal" +) + +func (s *OSCALSource) HTML() (*bytes.Buffer, error) { + if s.OSCAL().DocumentType() != oscal.CatalogDocument { + return nil, errors.New("HTML is supported only for OSCAL Catalog") + } + transformation, err := bundled.HtmlXslt() + if err != nil { + return nil, err + } + defer transformation.Cleanup() + + return xslt.Transform(transformation.Path, s.UserPath) +} diff --git a/pkg/xslt/process.go b/pkg/xslt/process.go new file mode 100644 index 00000000..31316181 --- /dev/null +++ b/pkg/xslt/process.go @@ -0,0 +1,22 @@ +package xslt + +import ( + "bytes" + "fmt" + "os/exec" +) + +// Transform inputFile using stylesheet +func Transform(stylesheetPath, inputFile string) (*bytes.Buffer, error) { + xsltprocCmd := exec.Command("xsltproc", stylesheetPath, inputFile) + xsltprocCmdOutput := &bytes.Buffer{} + xsltprocCmdErr := &bytes.Buffer{} + xsltprocCmd.Stdout = xsltprocCmdOutput + xsltprocCmd.Stderr = xsltprocCmdErr + + err := xsltprocCmd.Run() + if err != nil || xsltprocCmdErr.Len() > 0 { + return nil, fmt.Errorf("Error running xsltproc: %v, stderr was: %s", err, xsltprocCmdErr.String()) + } + return xsltprocCmdOutput, nil +} From dd0e05ee233b6d4721e5a5737ae03f8096fa68dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 16 Jan 2020 10:28:36 +0100 Subject: [PATCH 077/110] Remove bundled FedRAMP profiles These files are already dated and none of them conform to the latest oscal. --- Makefile | 3 - .../FedRAMP_HIGH-baseline_profile.xml | 4869 ----------------- .../FedRAMP_LOW-baseline_profile.xml | 836 --- .../FedRAMP_MODERATE-baseline_profile.xml | 1685 ------ 4 files changed, 7393 deletions(-) delete mode 100644 test_util/artifacts/FedRAMP_HIGH-baseline_profile.xml delete mode 100644 test_util/artifacts/FedRAMP_LOW-baseline_profile.xml delete mode 100644 test_util/artifacts/FedRAMP_MODERATE-baseline_profile.xml diff --git a/Makefile b/Makefile index c26e198a..3b378f25 100644 --- a/Makefile +++ b/Makefile @@ -23,9 +23,6 @@ test: @sh test_util/RunTest.sh -p test_util/artifacts/NIST_SP-800-53_rev4_HIGH-baseline_profile.xml @sh test_util/RunTest.sh -p test_util/artifacts/NIST_SP-800-53_rev4_MODERATE-baseline_profile.xml @sh test_util/RunTest.sh -p test_util/artifacts/NIST_SP-800-53_rev4_LOW-baseline_profile.xml - @sh test_util/RunTest.sh -p test_util/artifacts/FedRAMP_HIGH-baseline_profile.xml - @sh test_util/RunTest.sh -p test_util/artifacts/FedRAMP_MODERATE-baseline_profile.xml - @sh test_util/RunTest.sh -p test_util/artifacts/FedRAMP_LOW-baseline_profile.xml @echo "Running remaining tests" @go test -race -coverprofile=coverage.txt -covermode=atomic -v $(shell go list ./... | grep -v "/vendor/\|/test_util/src") diff --git a/test_util/artifacts/FedRAMP_HIGH-baseline_profile.xml b/test_util/artifacts/FedRAMP_HIGH-baseline_profile.xml deleted file mode 100644 index 2757d403..00000000 --- a/test_util/artifacts/FedRAMP_HIGH-baseline_profile.xml +++ /dev/null @@ -1,4869 +0,0 @@ - - - FedRAMP HIGH Baseline PROFILE - - Federal Risk and Authorization Management Program (FedRAMP) - info@fedramp.gov - https://fedramp.gov - FedRAMP High Baseline - 8/6/2018 - 1.0 - FedRAMP PMO - No notes. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - at least annually or whenever a significant change occurs - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - monthly for privileged accessed, every six (6) months for non-privileged access - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - Selection: disables - - - 24 hours from last use - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: The service provider defines the time period for non-user accounts (e.g., accounts associated with devices). The time periods are approved and accepted by the JAB/AO. Where user management is a function of the service, reports of activity of consumer users shall be made available.

-
-
-
- - 35 days for user accounts - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - organization and/or service provider system owner - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: Should use a shorter timeframe than AC-12.

-
-
-
- - inactivity is anticipated to exceed Fifteen (15) minutes - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - disables/revokes access within a organization-specified timeframe - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
- -

Required if shared/group accounts are deployed

-
-
-
- - organization-defined need with justification statement that explains why such accounts are necessary - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
- -

Required if shared/group accounts are deployed

-
-
-
- - - - -

NIST added this control to the NIST High Baseline during the 1/15/2015

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

(a) Guidance: Required for privileged accounts.

-

(b) Guidance: Required for privileged accounts.

-
-
-
- - at a minimum, the ISSO and/or similar role within the organization - - - at a minimum, the ISSO and/or similar role within the organization - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - one (1) hour - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

NEED. If there is a significant high-impact risk of inadvertent or intentional data leakage with a system deployed in a shared-service environment, this control is justified to mitigate that risk. Similar justification applies when an organization needs to ensure data isolation between different types of information enclaves within the organization.

-

ANALYSIS. Although this control is usually employed to control flows between different classified enclaves, it can also apply to non-classified scenarios (e.g., the need to isolate legal, personnel, health-related, financial, or other information or files deemed sensitive.

-

SAMPLE THREAT VECTORS. Sensitive free-text information passes from the personnel department to the rest of the organization. Law-enforcement sensitive information is inadvertently pulled from the organization's general counsel case management system and passed outside the department to users without authorization to view that information. HIPAA-protected health information flows freely from the HR department to all employees. Privacy-Act information flows from an HR system into a publicly released report.

-

RELEVANT SECURITY CONTROL ATTRIBUTES. Integrity-Assured, Adaptive, Manageable, Assessed, Auditable, Regulated, Controlled, Monitored, Providing Good Data Stewardship, Assured, Competent, Confidential, Data Controllable, Access-Controlled.

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: CSPs have the option to provide a separation of duties matrix as an attachment to the SSP.

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - all functions not publicly accessible and all security-relevant information not publicly available - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: Examples of security functions include but are not limited to: establishing system accounts, configuring access authorizations (i.e., permissions, privileges), setting events to be audited, and setting intrusion detection parameters, system programming, system and security administration, other privileged functions.

-
-
-
- - all security functions - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - all privileged commands - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

CSP Insider Threat mitigation; Good housekeeping and a best business practice for the protection of the CSP and customer alike. In a cloud environment, the power (and potentially harm) of the privileged users is greatly magnified because of the scale. For that reason periodic review of privileges is important.

-

Priority for adding to FedRAMP-M: HIGH

-
-
-
- - at a minimum, annually - - - all users with privileges - - - - - -

This control is not part of the NIST high baseline and was added for FedRAMP at the recommendation of DoD and NIST. This is a CNSSI 1253 control.

-
-
-
- - any software except software explicitly documented - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - not more than three (3) - - - fifteen (15) minutes - - - locks the account/node for a minimum of three (3) hours or until unlocked by an administrator - - - a minimum of three (3) hours - - - - - -

NEED. If an organization's mobile devices carry information whose loss would have a high impact, this control is warranted in order to mitigate the risk of such loss.

-

ANALYSIS. The technologies associated with this control are well established COTS hardware and software.

-

SAMPLE THREAT VECTORS. Mobile device is lost, falls into the hands of people without authorization to view the information contained on the device.

-

RELEVANT SECURITY CONTROL ATTRIBUTES. Integrity-Assured, Usable, Adaptive, Manageable, Agile, Supported, Assessed, Auditable, Regulated, Controlled, Monitored, Providing Good Data Stewardship, Assured, Confidential, Data Controllable, Access-Controlled, Mission Assured.

-
-
-
- - mobile devices as defined by organization policy - - - three (3) - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: The service provider shall determine elements of the cloud environment that require the System Use Notification control. The elements of the cloud environment that require System Use Notification are approved and accepted by the JAB/AO.

-

Requirement: The service provider shall determine how System Use Notification is going to be verified and provide appropriate periodicity of the check. The System Use Notification verification and periodicity are approved and accepted by the JAB/AO.

-

Guidance: If performed as part of a Configuration Baseline check, then the % of items requiring setting that are checked and that pass (or fail) check can be provided.

-

Requirement: If not performed as part of a Configuration Baseline check, then there must be documented agreement on how to provide results of verification and the necessary periodicity of the verification by the service provider. The documented agreement on how to provide verification of the results are approved and accepted by the JAB/AO.

-
-
-
- - see additional Requirements and Guidance - - - see additional Requirements and Guidance - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - three (3) sessions for privileged access and two (2) sessions for non-privileged access - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - fifteen (15) minutes - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Recommended by High Baseline Tiger Team. vulnerabilities associated with not having a logout button are well-documented.

-
- -

Guidance: https://www.owasp.org/index.php/Testing_for_logout_functionality_%28OTG-SESS-006%29

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - fifteen (15) minutes - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Rationale for Selection: Best business practice for the protection of the CSP and customer alike " when not intended for use". This is an unanticipated vector for attack if present and active. While probably not an issue with data center servers and networking devices, wireless is becoming embedded in many components and devices such as printers, fax devices, copiers, scanners, communications devices, etc. There is the additional potential that wireless capabilities may become available in air conditioners, power centers, power controllers, lighting, alarm systems, etc. There is a potential that these capabilities could exist without organizational awareness. Selection drivedsawareness. It's better to perform the check than to make assumptions about what devices are in the IS.

-

ECSB Supplemental Guidance as the C/CE relates to CSPs

-

The application of this control enchancement should include all systems and devices in the CSP facility such as printers, fax devices, copiers, scanners, communications devices, air conditioners, power centers, power controllers, lighting, alarm systems, etc. Wireless networking capabilities should be disabled when they are near or networked with systems supporting customer's services.

-

Priority for adding to FedRAMP-M: Moderate

-

(Low L1/2)

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least quarterly - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually or whenever a significant change occurs - - - at least annually or whenever a significant change occurs - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - - - -

NEED. High-impact systems warrant significantly elevated protection; one of these elevated protections is provided through simulated no-notice attacks that exercise users' ability to detect and respond correctly to attempts to steal internal information in their possession.

-

ANALYSIS. These controls are well understood and widely installed; COTS components keep implementation time and cost low.

-

SAMPLE THREAT VECTORS. Cybersecurity staff do not know how to monitor, respond, and manage complex enforcement systems and subsystems. Cybersecurity staff is not properly trained to understand how the controls are to operate. Staff does not understand the event alarms/logs. Staff is not able to protect from unauthorized disclosure. Staff is careless with handling data, or unwilling to follow the established security protocols, or willing to cut corners to save time.

-

RELEVANT SECURITY CONTROL ATTRIBUTES. Integrity-Assured, Assessed, Auditable, Controlled, Monitored, Providing Good Data Stewardship, Assured, Competent, Confidential.

-
-
-
- - - - -

NEED. High-impact systems warrant significantly elevated protection.

-

ANALYSIS. These controls are well understood and widely installed.

-

THREAT VECTORS ADDRESSED. Staff does not know how to monitor or manage complex systems in a way that supports effective management decision or control. Malicious actors manipulate the system to appear as if functioning normally when in reality, it is not. People fail to review event logs. People make unauthorized changes to event logger.

-

RELEVANT SECURITY CONTROL ATTRIBUTES. Integrity-Assured, Assessed, Auditable, Controlled, Monitored, Providing Good Data Stewardship, Assured, Competent, Confidential.

-
-
-
- - malicious code indicators as defined by organization incident policy/capability. - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - five (5) years or 5 years after completion of a specific training program - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - at least annually or whenever a significant change occurs - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: Coordination between service provider and consumer shall be documented and accepted by the JAB/AO.

-
-
-
- - successful and unsuccessful account logon events, account management events, object access, policy change, privilege functions, process tracking, and system events. For Web applications: all administrator activity, authentication checks, authorization checks, data deletions, data access, data changes, and permission changes - - - organization-defined subset of the auditable events defined in AU-2a to be audited continually for each identified event - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: Annually or whenever changes in the threat environment are communicated to the service provider by the JAB/AO.

-
-
-
- - annually or whenever there is a change in the threat environment - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: For client-server transactions, the number of bytes sent and received gives bidirectional transfer information that can be helpful during an investigation or inquiry.

-
-
-
- - session, connection, transaction, or activity duration; for client-server transactions, the number of bytes received and bytes sent; additional informational messages to diagnose or identify the event; characteristics that describe or identify the object or resource being acted upon; individual identities of group account users; full-text of privileged commands - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - all network, data storage, and computing devices - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - organization-defined actions to be taken (overwrite oldest record) - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - real-time - - - service provider personnel with authority to address failed audit events - - - audit failure events requiring real-time alerts, as defined by organization audit policy - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: Coordination between service provider and consumer shall be documented and accepted by the JAB/AO. In multi-tennant environments, capability and means for providing review, analysis, and reporting to consumer for data pertaining to consumer shall be documented.

-
-
-
- - at least weekly - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

NEED. Due to the complexity of independent systems exchanging security-related monitoring data, and high-impact systems implemented in shared-service environments, the responsible organization needs a centralized capability that integrates these various data sources into a unified whole permitting central review and analysis of diverse log data relevant to security audits.

-

ANALYSIS. This control permits analysts and auditors to focus on their primary duty of analyzing log data, and relieves them of the usual burden of discovery, collection, validation, aggregation, and indexing of large log datasets relevant to system security. Since these latter collection tasks have been automated under this control, less time and funding will be required to execute this core audit/analysis activity.

-

SAMPLE THREAT VECTORS. Staff does not know how to monitor or manage complex systems in a way that supports effective management decision or control. Malicious actors manipulate the system to appear as if functioning normally, when it is not. People fail to review event logs. People make unauthorized changes to event logger."

-

RELEVANT SECURITY CONTROL ATTRIBUTES. Monitored.

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - Selection (one or more): vulnerability scanning information; performance data; information system monitoring information; penetration test data; [Organization -defined data/information collected from other sources] - - - Organization -defined data/information collected from other sources - - - - - -

Included in NIST High Baseline, Rev 4

-
- -

Requirement: Coordination between service provider and consumer shall be documented and accepted by the JAB/AO.

-
-
-
- - - - -

This control is not part of the NIST high baseline and was added for FedRAMP.

-
-
-
- - information system process; role; user - - - - - -

Rationale for Selection L3-6: In support of cyber security threat / incident response activities. Supports flexibility in auditing levels based on threat level. Supports CSP integration with DoD security architecture. The sensitivity of the information at levels 3-6 warrents the adjustment of auditing levels based on threat level.

-

ECSB Supplemental Guidance as the C/CE relates to CSPs: This CE supports cyber security threat / incident response activities and flexibility in auditing levels based on threat level. This CE also supports CSP integration with DoD security architecture and the ability to respond to USCYBERCOM and DoD CNDSP alerts and directives.

-

NOTE L1/2: The handling of alerts from US-CERT and other credible sources is sufficient to change auditing activities if this CE is tailored in via an SLA.

-

NOTE: L3-6: The handling of alerts and directives from USCYBERCOM and DoD CNDSPs is required at these levels in addition to handling of alerts from US-CERTand other credible sources.

-

Priority for adding to FedRAMP-M: High

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - one second granularity of time measurement - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: The service provider selects primary and secondary time servers used by the NIST Internet time service. The secondary server is selected from a different geographic region than the primary server.

-

Requirement: The service provider synchronizes the system clocks of network computers that run operating systems other than Windows to the Windows Server Domain Controller emulator or to the same time source for that server.

-

Guidance: Synchronization of system clocks improves the accuracy of log analysis.

-
-
-
- - At least hourly - - - http://tfnistgov/tf-cgi/serverscgi - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least weekly - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - minimum actions including the addition, modification, deletion, approval, sending, or receiving of data - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: The service provider retains audit records on-line for at least ninety days and further preserves audit records off-line for a period that is in accordance with NARA requirements.

-
-
-
- - at least one (1) year - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - all information system and network components where audit capability is deployed/available - - - all information system and network components where audit capability is deployed/available - - - - - -

Non-repudiation

-
-
-
- - all network, data storage, and computing devices - - - all network, data storage, and computing devices - - - - - -

Non-repudiation

-
-
-
- - service provider-defined individuals or roles with audit configuration responsibilities - - - all network, data storage, and computing devices - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - at least annually or whenever a significant change occurs - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - individuals or roles to include FedRAMP PMO - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: For JAB Authorization, must use an accredited 3PAO.

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: To include 'announced', 'vulnerability scanning'

-
-
-
- - at least annually - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - any FedRAMP Accredited 3PAO - - - any FedRAMP Accredited 3PAO - - - the conditions of the JAB/AO in the FedRAMP Repository - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - At least annually and on input from FedRAMP - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: Refer to Appendix H - Cloud Considerations of the TIC 2.0 Reference Architecture document.

-
-
-
- - boundary protections which meet the Trusted Internet Connection (TIC) requirements - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: For JAB Authorization, CSPs shall include details of this control in their Architecture Briefing

-
-
-
- - deny-all, permit by exception - - - any systems - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: Requirement: POA&Ms must be provided at least monthly.

-
-
-
- - at least monthly - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

(c) Guidance: Significant change is defined in NIST Special Publication 800-37 Revision 1, Appendix F. The service provider describes the types of changes to the information system or the environment of operations that would impact the risk posture. The types of changes are approved and accepted by the JAB/AO.

-
-
-
- - at least every three (3) years or when a significant change occurs - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: Operating System Scans: at least monthly Database and Web Application Scans: at least monthly All scans performed by Independent Assessor: at least annually

-

Guidance: CSPs must provide evidence of closure and remediation of high vulnerabilities within the timeframe for standard POA&M updates.

-

Operating System Scans: at least monthly

-

Database and Web Application Scans: at least monthly

-

All scans performed by Independent Assessor: at least annually

-
-
-
- - to meet Federal and FedRAMP requirements (See additional guidance) - - - to meet Federal and FedRAMP requirements (See additional guidance) - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

NEED. Organization requires independent data to validate that current security monitoring continues to target the right data, and that no gaps have opened between what is currently measured and what needs to be measured given the constantly evolving threat environment. In particular, the organization determines that security management will need trend analytics tuned to the current security climate to ensure the organization's security officials maintain general situational awareness of larger security trends that may pose a threat to the organization's high-impact systems fielded in shared-service environments.

-

ANALYSIS. Implementation of this control should provide security management with a technical advantage by forcing them to maintain continual current awareness of the larger security threat-scape, rather than become lost in the lower-level details of specific security metrics.

-

SAMPLE THREAT VECTORS ADDRESSED. Stakeholders do not have the information they need to make sound decisions due to technology capability. System fails to send alarms, logs, and other pertinent data to the event manager. Control processes involve too many layers of review, concurrence, and revision to support effective and timely conveyance of relevant information to decision-makers. Monitoring not effectively linked to control processes.

-

RELEVANT SECURITY CONTROL ATTRIBUTES. Monitored, Controlled

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - at least annually - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - at least annually or whenever a significant change occurs - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

(a) Guidance: Significant change is defined in NIST Special Publication 800-37 Revision 1, Appendix F, page F-7.

-
-
-
- - at least annually or when a significant change occurs - - - to include when directed by the JAB - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - organization-defined previous versions of baseline configurations of the previously approved baseline configuration of IS components - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: The service provider establishes a central means of communicating major changes to or developments in the information system or environment of operations that may affect its services to the federal government and associated service consumers (e.g., electronic bulletin board, web status page). The means of communication are approved and accepted by the JAB/AO.

-

(e) Guidance: In accordance with record retention policies and procedures.

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - organization agreed upon time period - - - organization defined configuration management approval authorities - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Rationale for De-Selection L1/2: The sensitivity of the information at these levels may not require a information security representative to be a member of the organization-defined configuration change control element.

-

Rationale for Selection L3-6: This is a best business practice for the protection of the CSP and customer alike in that the security representative will be more aware of IA issues that configuration changes can introduce and he/she can more easily provide IA guidance for issues spotted.

-
-
-
- - Configuration control board (CCB) or similar (as defined in CM-3) - - - - - -

Rationale for SA L1: Cryptographic mechanisms are only required at this level for priviledged user (system administrator / SA) access control and the transport of privileged commands or configuration files. Not the publicly released information served at this level.

-

Rationale for Selection L2-6: Best practice. Supplemental guidance for this CE refers primarily to the processes surrounding the management of the cryptographic mechanisms used. These processes need to be under change management that addresses security concerns to ensure they remain secure.

-

CE supplemental guidance.

-

Regardless of the cryptographic means employed (e.g., public key, private key, shared secrets), organizations ensure that there are processes and procedures in place to effectively manage those means. For example, if devices use certificates as a basis for identification and authentication, there needs to be a process in place to address the expiration of those certificates.

-

Priority for adding to FedRAMP-M: High

-
-
-
- - All security safeguards that rely on cryptography - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - at least every thirty (30) days - - - at least every thirty (30) days - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: If digital signatures/certificates are unavailable, alternative cryptographic integrity checks (hashes, self-signed certs, etc.) can be utilized.

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least quarterly - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

(a)-1 Requirement 1: The service provider shall use the Center for Internet Security guidelines (Level 1) to establish configuration settings or establishes its own configuration settings if USGCB is not available.

-

(a)-2 Requirement 2: The service provider shall ensure that checklists for configuration settings are Security Content Automation Protocol (SCAP) validated or SCAP compatible (if validated checklists are not available).

-

(a) Guidance: Information on the USGCB checklists can be found at: http://usgcb.nist.gov/usgcb_faq.html#usgcbfaq_usgcbfdcc

-
-
-
- - United States Government Configuration Baseline (USGCB) - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

(b) Requirement: The service provider shall use the Center for Internet Security guidelines (Level 1) to establish list of prohibited or restricted functions, ports, protocols, and/or services or establishes its own list of prohibited or restricted functions, ports, protocols, and/or services if USGCB is not available.

-

Guidance: Information on the USGCB checklists can be found at: http://usgcb.nist.gov/usgcb_faq.html#usgcbfaq_usgcbfdcc

-

(Partially derived from AC-17(8).

-
-
-
- - United States Government Configuration Baseline (USGCB) - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least monthly - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: This control shall be implemented in a technical manner on the information system to only allow programs to run that adhere to the policy (i.e. white listing). This control is not to be based off of strictly written policy on what is allowed or not allowed to run.

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least quarterly or when there is a change - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: must be provided at least monthly or when there is a change.

-
-
-
- - at least monthly - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - Continuously, using automated mechanisms with a maximum five-minute delay in detection. - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - position and role - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - Continuously (via CM-7 (5)) - - - - - -

NEED. High-impact systems will require special measures to ensure users cannot place the overall system at risk by installing unauthorized software. This control supports that need.

-

ANALYSIS. Implementation of these controls is well understood, and relies on capabilities provided in COTS operating systems.

-

SAMPLE THREAT VECTORS. The system executes malicious and harmful software. Software updates could render the system unstable or cause it to function incorrectly. Software is not designed with adequate safeguards to protect PII and other sensitive information. Users could make mistakes in following policy. Users could intentionally install unapproved/unvetted software.

-

RELEVANT SECURITY CONTROL ATTRIBUTES. Quality Assured, Substantiated Integrity, Maintainable, Testable, Configuration Managed, Change Managed, Supported, Assessed, Auditable, Authorized, Regulated, Enforcement, Controlled, Reliable, Providing Good Data Stewardship, Assured, Confidential, Access-Controlled

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - at least annually or whenever a significant change occurs - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: For JAB authorizations the contingency lists include designated FedRAMP personnel.

-
-
-
- - at least annually - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - time period defined in service provider and organization SLA - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - ten (10) days - - - at least annually - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

(a) Requirement: The service provider develops test plans in accordance with NIST Special Publication 800-34 (as amended); plans are approved by the JAB/AO prior to initiating testing.

-
-
-
- - at least annually - - - functional exercises - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

(a) Requirement: The service provider defines a time period consistent with the recovery time objectives and business impact analysis.

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: The service provider may determine what is considered a sufficient degree of separation between the primary and alternate processing sites, based on the types of threats that are of concern. For one particular type of threat (i.e., hostile cyber attack), the degree of separation between sites will be less relevant.

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: The service provider defines a time period consistent with the recovery time objectives and business impact analysis.

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - annually - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: The service provider shall determine what elements of the cloud environment require the Information System Backup control. The service provider shall determine how Information System Backup is going to be verified and appropriate periodicity of the check.

-

(a) Requirement: The service provider maintains at least three backup copies of user-level information (at least one of which is available online) or provides an equivalent alternative.

-

(b) Requirement: The service provider maintains at least three backup copies of system-level information (at least one of which is available online) or provides an equivalent alternative.

-

(c) Requirement: The service provider maintains at least three backup copies of information system documentation including security information (at least one of which is available online) or provides an equivalent alternative.

-
-
-
- - daily incremental; weekly full - - - daily incremental; weekly full - - - daily incremental; weekly full - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least monthly - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - time period and transfer rate consistent with the recovery time and recovery point objectives defined in the service provider and organization SLA - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - time period consistent with the restoration time-periods defined in the service provider and organization SLA - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - at least annually or whenever a significant change occurs - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: PIV=separate device. Please refer to NIST SP 800-157 Guidelines for Derived Personal Identity Verification (PIV) Credentials.

-
-
-
- - FIPS 140-2, NIAP Certification, or NSA approval - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: Include Common Access Card (CAC), i.e., the DoD technical implementation of PIV/FIPS 201/HSPD-12.

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

(e) Requirement: The service provider defines the time period of inactivity for device identifiers.

-

Guidance: For DoD clouds, see DoD cloud website for specific DoD requirements that go above and beyond FedRAMP http://iase.disa.mil/cloud_security/Pages/index.aspx.

-
-
-
- - at a minimum, the ISSO (or similar role within the organization) - - - at least two (2) years - - - thirty-five (35) days (See additional requirements and guidance.) - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - contractors; foreign nationals] - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: Authenticators must be compliant with NIST SP 800-63-2 Electronic Authentication Guideline assurance Level 4 (Link http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-63-2.pdf)

-
-
-
- - to include sixty (60) days for passwords - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - case sensitive, minimum of fourteen (14) characters, and at least one (1) each of upper-case letters, lower-case letters, numbers, and special characters - - - at least fifty percent (50%) - - - one (1) day minimum, sixty (60) day maximum - - - twenty four (24) - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - All hardware/biometric (multifactor authenticators) - - - in person - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: If automated mechanisms which enforce password authenticator strength at creation are not used, automated mechanisms must be used to audit strength of created password authenticators.

-
-
-
- - complexity as identified in IA-5 (1) Control Enhancement Part (a) - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

NEED. In those cases where an organization's user accounts authenticate to more than one system, and at least one of those systems is a high-impact system implemented in a shared-service environment, then this control is warranted as a baseline capability to guard against loss of high-impact, sensitive information.

-

ANALYSIS. Organizations can use COTS tools and techniques to implement this control in many ways. Agencies should be prepared to document their plan and approach to this control technique.

-

THREAT VECTORS ADDRESSED. A user's account password is cracked, permitting attackers to identify all systems to which the user has access, and to gain access to the information in those systems.

-

RELEVANT SECURITY CONTROL ATTRIBUTES. Monitored, Assessed

-
-
-
- - different authenticators on different systems - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Rationale for Selection: Best practice for authenticated web services and best business practice for the protection of the CSP and customer alike. ECSB sees this as a significant value add toward the protection of customer accounts on SaaS or customer service / managent interfaces/portals.

-

L1 Rationale for SA: No authenticators are required for user access to public informationl. Info sensitivity does not warrant. However this CE would be required priviledged user access to manage the system server(s) containing public information.

-

ECSB Supplemental Guidance as the C/CE relates to CSPs: CSP must minimally implement this control enhancement on all SaaS offerings and customer service / managent interfaces. The time period can be negotiated in the SLA.

-

NOTE: while the browser or other client cashes the authenticator, the server must enforce its expiration if the client does not.

-

Priority for adding to FedRAMP-M: Low

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - at least annually or whenever a significant change occurs - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - within ten (10) days - - - at least annually - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

-2 Requirement: The service provider defines tests and/or exercises in accordance with NIST Special Publication 800-61 (as amended). For JAB authorization, the service provider provides test plans to the JAB/AO annually. Test plans are approved and accepted by the JAB/AO prior to test commencing.

-
-
-
- - at least every six (6) months - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: The service provider ensures that individuals conducting incident handling meet personnel security requirements commensurate with the criticality/sensitivity of the information being processed, stored, and transmitted by the information system.

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

NEED. Organization requires near real-time subsystem reconfiguration for high-impact systems, especially those deployed wholly or partially into shared-service environments. This dynamic reconfiguration is required for core infrastructure components such as routers, firewalls, messaging gateways, or access control/authentication servers, especially when these core components are under cyber-attack.

-

ANALYSIS. These critical cyber controls are well understood, and to some extent their automated capability has been established. Other aspects still require human decisions. Since this technology area is rapidly changing to meet new cyber-threat scenarios, it is expected that implementation of this control will be subject to significant change for the foreseeable future. Even so, its technology advantages are clear, especially for high-impact systems infrastructure.

-

SAMPLE THREAT VECTORS. System does not have error-correcting or self-recovery capabilities. The system is not designed to allow for quick remediation of threats that will impact the system.

-

RELEVANT SECURITY CONTROL ATTRIBUTES. Survivable, Absorptive, Adaptive, Restorable

-
-
-
- - all network, data storage, and computing devices - - - - - -

NEED. Due to the direct connection between system function and critical mission/business capability, the system requires Continuity-of-Operations (COOP) controls.

-

ANALYSIS. These critical cyber controls are well understood, and to some extent their automated capability has been established. Other aspects still require human decisions. Since this technology area is rapidly changing to meet new cyber-threat scenarios and also changes in subsystem technology, it is expected that implementation of this control will be subject to significant change for the foreseeable future. Even so, its technology advantages are fundamental, especially for high-impact systems infrastructure.

-

SAMPLE THREAT VECTORS. The system does not have error-correcting or self-recovery capabilities. The system is not designed to allow for quick remediation of threats that will impact the system. Time does not allow for the design in error handling, self-recovery, or to capitalize on system diversity to restore a system. Also, the organization lacks the expertise to develop or implement a plan for restoring system. A malicious change may be implemented to counter the ability to restore the system.

-

RELEVANT SECURITY CONTROL ATTRIBUTES. Survivable, Absorptive, Adaptable, Restorable

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

NEED. High-impact systems will require special measures to ensure security incidents are correctly and effectively handled in a timely manner. This high-level control supports that need, and is therefore warranted as a baseline for high-impact systems in shared-service environments.

-

ANALYSIS. Implementation of this general control is well understood among Departments and Agencies. However, it may require special funding and time to implement in a shared service environment, where response roles and responsibilities demand vigilant analysis and definition.

-

SAMPLE THREAT VECTORS. Insiders gain access to information for which they have no authorization. Insiders push sensitive information to outside networks not authorized to receive it. Insiders violate agency information-security policies. Insider actions are not monitored.

-

RELEVANT SECURITY CONTROL ATTRIBUTES. Agile, Owned, Enforcement

-
-
-
- - - - -

This control was recommended ecommended by the High Baseline Tiger Team.

-
-
-
- - external organizations including consumer incident responders and network defenders and the appropriate CIRT/CERT (such as US-CERT, DOD CERT, IC CERT) - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: Reports security incident information according to FedRAMP Incident Communications Procedure.

-
-
-
- - US-CERT incident reporting timelines as specified in NIST Special Publication 800-61 (as amended) - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

(b) Requirement: The service provider defines a list of incident response personnel (identified by name and/or by role) and organizational elements. The incident response list includes designated FedRAMP personnel.

-

(e) Requirement: The service provider defines a list of incident response personnel (identified by name and/or by role) and organizational elements. The incident response list includes designated FedRAMP personnel.

-
-
-
- - see additional FedRAMP Requirements and Guidance - - - at least annually - - - see additional FedRAMP Requirements and Guidance - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - at least annually or whenever a significant change occurs - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - the information owner explicitly authorizing removal of the equipment from the facility - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Rationale for Selection: Best practice business practice for the protection of the CSP and customer alike. Protects against unauthorized access and compromise of the CSP infrastructure. See Supplemental Guidance

-

ECSB Supplemental Guidance as the C/CE relates to CSPs: While AC-17(2) is similar to this CE and implements cryptographic mechanisms to protect the confidentiality and integrity of remote access sessions, System configuration, maintenance and diagnostic communications can be considered sensitive information and it is in DoD. Maintaining the confidrntiality and integrity of nonlocal maintenance and diagnostic communications helps maintain the health of the system, prevents unauthorized access from sniffing and MITM atacks, etc. While beneficial this selection may not be required for nonlocal maintenance and diagnostic communications over the CSP's private network and particularly if that network is out of band. Encryption is required if such communications are over a network external to the CSP (e.g., the Internet).

-

Priority for adding to FedRAMP-M: High

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - at least annually or whenever a significant change occurs - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - any digital and non-digital media deemed sensitive - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

(b) Guidance: Second parameter not-applicable

-
-
-
- - no removable media types - - - organization-defined security safeguards not applicable - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

(a) Requirement: The service provider defines controlled areas within facilities where the information and information system reside.

-
-
-
- - all types of digital and non-digital media with sensitive information - - - see additional FedRAMP requirements and guidance - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

(a) Requirement: The service provider defines security measures to protect digital and non-digital media in transport. The security measures are approved and accepted by the JAB.

-
-
-
- - all media with sensitive information - - - prior to leaving secure/controlled environment: for digital media, encryption using a FIPS 140-2 validated encryption module; for non-digital media, secured in locked container - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - techniques and procedures IAW NIST SP 800-88 and Section 5.9: Reuse and Disposal of Storage Media and Hardware - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: Equipment and procedures may be tested or validated for effectiveness

-
-
-
- - at least every six (6) months - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - at least annually or whenever a significant change occurs - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least every ninety (90) days - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - CSP defined physical access control systems/devices AND guards - - - CSP defined physical access control systems/devices - - - in all circumstances within restricted access area where the information system resides - - - at least annually - - - at least annually - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least monthly - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - for a minimum of one (1) year - - - at least monthly - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - service provider building maintenance/physical security personnel - - - service provider emergency responders with incident response responsibilities - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

(a) Requirements: The service provider measures temperature at server inlets and humidity levels by dew point.

-
-
-
- - consistent with American Society of Heating, Refrigerating and Air-conditioning Engineers (ASHRAE) document entitled Thermal Guidelines for Data Processing Environments - - - continuously - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - service provider building maintenance/physical security personnel - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - all information system components - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - physical and environmental hazards identified during threat assessment - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - at least annually or whenever a significant change occurs - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - annually - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

(b) Guidance: Significant change is defined in NIST Special Publication 800-37 Revision 1, Appendix F, page F-7.

-
-
-
- - at least annually or when a significant change occurs - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - at least annually or whenever a significant change occurs - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - for national security clearances; a reinvestigation is required during the fifth (5th) year for top secret security clearance, the tenth (10th) year for secret security clearance, and fifteenth (15th) year for confidential security clearance. For moderate risk law enforcement and high impact public trust level, a reinvestigation is required during the fifth (5th) year. There is no reinvestigation for other moderate risk positions or any low risk positions - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - personnel screening criteria - as required by specific information - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - eight (8) hours - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - access control personnel responsible for disabling access to the system - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - twenty-four (24) hours - - - twenty-four (24) hours - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - at least annually and any time there is a change to the user's level of access - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - terminations: immediately; transfers: within twenty-four (24) hours - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at a minimum, the ISSO and/or similar role within the organization - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - at least annually or whenever a significant change occurs - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: Significant change is defined in NIST Special Publication 800-37 Revision 1, Appendix F.

-

(d) Requirement: Include all Authoring Officials and FedRAMP ISSOs.

-
-
-
- - security assessment report - - - at least annually or whenever a significant change occurs - - - annually - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

(a) Requirement: an accredited independent assessor scans operating systems/infrastructure, web applications, and databases once annually.

-

(e) Requirement: to include the Risk Executive; for JAB authorizations to include FedRAMP

-
-
-
- - monthly operating system/infrastructure; monthly web applications and databases - - - high-risk vulnerabilities mitigated within thirty (30) days from date of discovery; moderate-risk vulnerabilities mitigated within ninety (90) days from date of discovery - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - prior to a new scan - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - notify appropriate service provider personnel and follow procedures for organization and service provider-defined corrective actions - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - operating systems / web applications / databases - - - all scans - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: include in Continuous Monitoring ISSO digest/report to JAB/AO

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
- -

Requirements: This enhancement is required for all high vulnerability scan findings.

-

Guidance: While scanning tools may label findings as high or critical, the intent of the control is based around NIST's definition of high vulnerability.

-
-
-
- - - - -

NEED. Organizations commonly run vulnerability scanning tools against diverse enterprise systems and subsystems. These tools are often attuned to the specific subsystems, and often provided by different manufacturers. Because there is no single-vendor consolidation of all scanning tools, organizations need to correlate the outputs of these tools in order to triangulate on potential threats that may be related, or identical at their source. When the security impact is high a shared-service environment may increase the number of independent scanning tools, implementation of this control is warranted.

-

ANALYSIS. Although this control is well understood by vendors, its implementation takes many forms, depending on the scanning tools adopted by a particular organization.

-

SAMPLE THREAT VECTORS. Different scanning tools discover low-impact vulnerabilities in multiple subsystems of a system. Considered individually, none of them warrants immediate action,; yet when considered together, they constitute a significant attack pattern.

-

RELEVANT SECURITY CONTROL ATTRIBUTES. Interoperable, Change Managed, Agile, Supported, Assessed, Monitored

-
- -

Guidance: If multiple tools are not used, this control is not applicable.

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - at least annually or whenever a significant change occurs - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: The use of Common Criteria (ISO/IEC 15408) evaluated products is strongly preferred.

-

See http://www.niap-ccevs.org/vpl or http://www.commoncriteriaportal.org/products.html.

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at a minimum to include security-relevant external system interfaces; high-level design; low-level design; source code or network and data flow diagram; [organization-defined design/implementation information] - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: CSP must use the same security standards regardless of where the system component or information system service is acquired.

-
-
-
- - at least the minimum requirement as defined in control CA-7 - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at a minimum, the ISSO (or similar role within the organization) - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - FedRAMP Security Controls Baseline(s) if Federal information is processed or stored within the external system - - - Federal/FedRAMP Continuous Monitoring requirements must be met for external systems where Federal information is processed or stored - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - all external systems where Federal information is processed or stored - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - all external systems where Federal information is processed or stored - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - information processing, information data, AND information services - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

(e) Requirement: for JAB authorizations, track security flaws and flaw resolution within the system, component, or service and report findings to organization-defined personnel, to include FedRAMP.

-
-
-
- - development, implementation, AND operation - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: The service provider documents in the Continuous Monitoring Plan, how newly developed code for the information system is reviewed.

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: The service provider documents in the Continuous Monitoring Plan, how newly developed code for the information system is reviewed.

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - organization and service provider-defined personnel security requirements, approved HW/SW vendor list/process, and secure SDLC procedures - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - as needed and as dictated by the current threat posture - - - organization and service provider- defined security requirements - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - at least annually or whenever a significant change occurs - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least every ninety (90) days or whenever there is a change in the threat environment that warrants a review of the exceptions] - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

NEED. High-impact systems warrant careful attention to scenarios associated with exfiltration of sensitive organizational information. Different systems and implementation will trigger different scenarios, but regardless of the specific system context, organizations are warranted in establishing this control for high-impact systems with subsystems deployed into shared-service environments.

-

ANALYSIS. Organizations should devote careful attention to design considerations relative to this control.

-

SAMPLE THREAT VECTORS. Authorized processes push very large volumes of data to external networks. Internal devices send address/status/security information to external networks.

-

RELEVANT SECURITY CONTROL ATTRIBUTES: Integrity-Assured, Absorptive, Survivable, Adaptive, Agile, Auditable, Monitored, Controlled, Data Controllable, Access-Controlled

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - Host Intrusion Prevention System (HIPS), Host Intrusion Detection System (HIDS), or minimally a host-based firewall - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: The service provider defines key information security tools, mechanisms, and support components associated with system and security administration and isolates those tools, mechanisms, and support components from other internal information system components via physically or logically separate subnets.

-

Guidance: Examples include: information security tools, mechanisms, and support components such as, but not limited to PKI, patching infrastructure, cyber defense tools, special purpose gateway, vulnerability tracking systems, internet access points (IAPs); network element and data center administrative/management traffic; Demilitarized Zones (DMZs), Server farms/computing centers, centralized audit log servers etc.

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

NEED. High-impact systems warrant careful attention to situations where specific sources or methods become suspect. Such situations can involve specific user accounts, messages, message payloads, data, applications, or even entire subsystems. Under these circumstances, a capability for dynamic segregation is highly justified.

-

ANALYSIS. Isolation techniques are well understood in the cyber market, and constantly evolving. Example techniques include honey pots and honey nets. Both techniques can isolate a user, an autonomous application, or an entire subsystem.

-

SAMPLE THREAT VECTORS. Anomalous user behavior is detected Messages arrive from suspect domains. Messages arrive with suspect attachments. Applications begin to behave anomalously. Subsystems begin moving data anomalously.

-

RELEVANT SECURITY CONTROL ATTRIBUTES. Integrity-Assured, Absorptive, Survivable, Adaptive, Agile, Auditable, Monitored, Controlled, Data Controllable, Access-Controlled

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - confidentiality AND integrity - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - prevent unauthorized disclosure of information AND detect changes to information - - - a hardened or alarmed carrier Protective Distribution System (PDS) - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - no longer than ten (10) minutes for privileged sessions and no longer than fifteen (15) minutes for user sessions - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: Federally approved cryptography

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - NIST FIPS-compliant - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - FIPS-validated or NSA-approved cryptography - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Requirement: The information system provides disablement (instead of physical disconnect) of collaborative computing devices in a manner that supports ease of use.

-
-
-
- - no exceptions - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Rationale for Selection: Rationale for Selection for SA L1: At L1 this CE is only applicable to privileged user sessions.

-

Rationale for Selection L1-6: Best Practice; APT. This CE mitigates the threat/vulnerability inherant in authenticated sessions whereby If an adversary captures a session identifier that remains valid after the session is terminated, the adversary could use it to reinitiate the session thus gaining unauthorized access to CSP and CSP customer resources and information/data.

-

ECSB Supplemental Guidance as the C/CE relates to CSPs: If an adversary captures a session identifier that remains valid after the session is terminated, the adversary could use it to reinitiate the session thus gaining unauthorized access to CSP and/or CSP customer resources and information/data. While unnessary for user sessions at L1, this enhancement is selected for System Administrator sessions.

-

Priority for adding to FedRAMP-M: High

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: The organization supports the capability to use cryptographic mechanisms to protect information at rest.

-
-
-
- - confidentiality AND integrity - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - all information system components storing customer data deemed sensitive - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least annually - - - at least annually or whenever a significant change occurs - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - thirty (30) days of release of updates - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least monthly - - - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - at least weekly - - - to include endpoints - - - to include blocking and quarantining malicious code and alerting administrator or defined security personnel near-realtime - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: See US-CERT Incident Response Reporting Guidelines.

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - continuously - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
- -

Guidance: In accordance with the incident response plan.

-
-
-
- - - - -

NEED. When a high-impact system is implemented in a shared-service environment, organizations should ensure their sensitive data is properly protected against classic threats to the confidentiality of its sensitive information. This control partially meets that need.

-

ANALYSIS. The tools and techniques for implementing this monitoring control are now well understood and embedded in COTS operating systems and software.

-

SAMPLE THREAT VECTORS. Large outbound file transfers execute without being detected. External malware network sites are accessed from within the organization without detection. Network sessions remain connected for long periods of time without detection. Esoteric protocols are active and undetected on ports not defined by the organization.

-

RELEVANT SECURITY CONTROL ATTRIBUTES. Monitored

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

NEED. When a high-impact system is implemented in a shared-service environment, organizations should ensure their sensitive data is properly protected against classic threats to the confidentiality of sensitive information. This control partially meets that need.

-

ANALYSIS. The tools and techniques for implementing this monitoring control are now well understood, and embedded in COTS operating systems and software.

-

SAMPLE THREAT VECTORS. Large outbound files are disguised to transfer without being detected. Communications with external malware network sites are embedded to avoid detection.

-

RELEVANT SECURITY CONTROL ATTRIBUTES. Substantiated Integrity, Monitored, Assessed

-
-
-
- - - - -

Rationale for De-Selection L1-3: The information sensitivity at these levels does not seem to warrant implementation of this CE. The costs for instituting fine-grained monitoring per individual far may outweigh the risks

-

Rationale for selection L4-6: SP Insider Threat mitigation; The information sensitivity at these levels warrants implementation of this CE.Best business practice for the protection of the CSP and customer alike. This enhancement works in conjunction with AC-2 (13) account disablement for such individuals and IR-4 (6).

-

ECSB Supplemental Guidance as the C/CE relates to CSPs: This enhancement works in conjunction with or opposite of AC-2 (13) which requires acount disablement within a specific time frame of discovering or identifying an individual posing a significant insider threat. In some instances the best action is not to terminate the individual's account, but rather to monitor their actions. This allows for the ability to collect evidence (for prosecution) and obtain insight into the TTPs that they may be using and others they may working with. Termination of the account is often best left as a final act.

-

Priority for adding to FedRAMP-M: Moderate

-
-
-
- - - - -

Rationale for Selection: Best business practice for the protection of the CSP and customer alike. Given the scale of a cloud, the possible harm by an malicious insider is greatly magnified over normal systems.

-

ECSB Supplemental Guidance as the C/CE relates to CSPs: his CE is on a par with SI-4 (9), IR-4 (6) and the various other insider threat Cs/CEs. Supports the mitigation of insider threat from those that can do the most damage. While CSPs typically claim they only have privileged users in their infrastructure (other than customers), this CEadds value for privilege users that have higher privilege than others. These higher privileged users should be subject to additional monitoring.

-

Priority for adding to FedRAMP-M: High

-
-
-
- - - - -

NEED. When a high-impact system is implemented across networks in a shared-service environment, organizations should monitor network services to protect against unauthorized services capable of exfiltrating sensitive information. This control meets that monitoring need.

-

ANALYSIS. The tools and techniques for implementing this monitoring control are well understood, and embedded in COTS operating systems and software.

-

SAMPLE THREAT VECTORS. Systems daemons and application services running in the background, exfiltrating sensitive information to external networks.

-

RELEVANT SECURITY CONTROL ATTRIBUTES. Monitored, Assessed

-
-
-
- - - - -

Included in FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

NEED. When a high-impact system is implemented across networks in a shared-service environment, organizations should aggressively monitor for symptoms that system integrity has been compromised. This control addresses that monitoring need.

-

ANALYSIS. The tools and techniques for implementing this monitoring control are no longer unusual, but their implementation still requires careful initial analysis of tools, standards, and sources for indicators of compromise (IOC) data. This capability is not a simple matter of installing COTS software and watching for alerts. Rather, it requires staff to maintain a keen understanding of the threat-scape in order to properly understand the alerts coming from the IOC subsystem.

-

SAMPLE THREAT VECTORS. Temporary files appear but are not associated with any known system processes; independent security services warn of new surveillance techniques appearing globally; evidence of those new techniques appears in an organization's event logs. Reports on the payload of a new botnet indicate that the system has been touched by the botnet.

-

RELEVANT SECURITY CONTROL ATTRIBUTES. Monitored, Assessed

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - to include US-CERT - - - to include system security personnel and administrators with configuration/patch-management responsibilities - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - to include upon system startup and/or restart - - - at least monthly - - - to include system administrators and security personnel - - - to include notification of system administrators and security personnel - - - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - selection to include security relevant events - - - at least monthly - - - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
- - - - -

Included in NIST High Baseline, Rev 4 and FedRAMP Moderate Baseline, Rev 4

-
-
-
-
-
diff --git a/test_util/artifacts/FedRAMP_LOW-baseline_profile.xml b/test_util/artifacts/FedRAMP_LOW-baseline_profile.xml deleted file mode 100644 index b104f067..00000000 --- a/test_util/artifacts/FedRAMP_LOW-baseline_profile.xml +++ /dev/null @@ -1,836 +0,0 @@ - - - FedRAMP LOW Baseline PROFILE - - Federal Risk and Authorization Management Program (FedRAMP) - info@fedramp.gov - https://fedramp.gov - FedRAMP Low Baseline - 8/6/2018 - 1.0 - FedRAMP PMO - No notes. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - at least every 3 years - - - at least annually - - - - at least annually - - - - - not more than three - - - fifteen minutes - - - locks the account/node for thirty minutes - - - locks the account/node for thirty minutes - - - - - -

Requirement: The service provider shall determine elements of the cloud environment that require the System Use Notification control. The elements of the cloud environment that require System Use Notification are approved and accepted by the JAB.

-

Requirement: The service provider shall determine how System Use Notification is going to be verified and provide appropriate periodicity of the check. The System Use Notification verification and periodicity are approved and accepted by the JAB.

-

Guidance: If performed as part of a Configuration Baseline check, then the % of items requiring setting that are checked and that pass (or fail) check can be provided. AC-8 Requirement: If not performed as part of a Configuration Baseline check, then there must be documented agreement on how to provide results of verification and the necessary periodicity of the verification by the service provider. The documented agreement on how to provide verification of the results are approved and accepted by the JAB.

-
-
-
- - see additional Requirements and Guidance - - - see additional Requirements and Guidance - - - - - - - - - at least quarterly - - - - at least every 3 years - - - at least annually - - - - at least annually - - - - at least annually - - - - At least one year - - - - at least every 3 years - - - at least annually - - - - - -

Requirement: Coordination between service provider and consumer shall be documented and accepted by the JAB/AO.

-
-
-
- - Successful and unsuccessful account logon events, account management events, object access, policy change, privilege functions, process tracking, and system events For Web applications: all administrator activity, authentication checks, authorization checks, data deletions, data access, data changes, and permission changes - - - organization-defined subset of the auditable events defined in AU-2 a to be audited continually for each identified event - - - - - - organization-defined actions to be taken (overwrite oldest record) - - - - - -

Requirement: Coordination between service provider and consumer shall be documented and accepted by the JAB/AO. In multi-tennant environments, capability and means for providing review, analysis, and reporting to consumer for data pertaining to consumer shall be documented.

-
-
-
- - at least weekly - - - - - - - -

Requirement: The service provider retains audit records on-line for at least ninety days and further preserves audit records off-line for a period that is in accordance with NARA requirements.

-
-
-
- - at least ninety days - - - - all information system and network components where audit capability is deployed/available - - - all information system and network components where audit capability is deployed/available - - - - at least every 3 years - - - at least annually - - - - at least annually - - - individuals or roles to include FedRAMP PMO - - - - - -

Requirement: Must use an accredited 3PAO for JAB authorization

-
-
-
- - - at least annually and on input from FedRAMP - - - - - -

Guidance: Requirement: POA&Ms must be provided at least monthly.

-
-
-
- - at least monthly - - - - - -

-c. Guidance: Significant change is defined in NIST Special Publication 800-37 Revision 1, Appendix F. The service provider describes the types of changes to the information system or the environment of operations that would impact the risk posture. The types of changes are approved and accepted by the JAB/AO.

-
-
-
- - at least every three years or when a significant change occurs - - - - - -

Requirement: Operating System Scans: at least monthly Database and Web Application Scans: at least monthly All scans performed by Independent Assessor: at least annually

-

Guidance: CSPs must provide evidence of closure and remediation of high vulnerabilities within the timeframe for standard POA&M updates.

-

Operating System Scans: at least monthly

-

Database and Web Application Scans: at least monthly

-

All scans performed by Independent Assessor: at least annually

-
-
-
- - to meet Federal and FedRAMP requirements (See additional guidance) - - - to meet Federal and FedRAMP requirements (See additional guidance) - - - - - at least every 3 years - - - at least annually - - - - - - - -

(a) Requirement 1: The service provider shall use the Center for Internet Security guidelines (Level 1) to establish configuration settings or establishes its own configuration settings if USGCB is not available.

-

(a) Requirement 2: The service provider shall ensure that checklists for configuration settings are Security Content Automation Protocol (SCAP) validated or SCAP compatible (if validated checklists are not available).

-

(a) Guidance: Information on the USGCB checklists can be found at: http://usgcb.nist.gov/usgcb_faq.html#usgcbfaq_usgcbfdcc

-
-
-
- - United States Government Configuration Baseline (USGCB) - - - - - -

(b) Requirement: The service provider shall use the Center for Internet Security guidelines (Level 1) to establish list of prohibited or restricted functions, ports, protocols, and/or services or establishes its own list of prohibited or restricted functions, ports, protocols, and/or services if USGCB is not available.

-

Guidance: Information on the USGCB checklists can be found at: http://usgcb.nist.gov/usgcb_faq.html#usgcbfaq_usgcbfdcc

-

(Partially derived from AC-17(8).)

-
-
-
- - United States Government Configuration Baseline (USGCB) - - - - - -

Requirement: must be provided at least monthly or when there is a change.

-
-
-
- - at least monthly - - - - - Continuously (via CM-7 (5)) - - - - at least every 3 years - - - at least annually - - - - - -

Requirement: For JAB authorizations the contingency lists include designated FedRAMP personnel.

-
-
-
- - at least annually - - - - ten (10) days - - - at least annually - - - - - -

(a). Requirement: The service provider develops test plans in accordance with NIST Special Publication 800-34 (as amended); plans are approved by the JAB/AO prior to initiating testing.

-
-
-
- - at least every three years - - - classroom exercises/table top written tests - - - - - -

Requirement: The service provider shall determine what elements of the cloud environment require the Information System Backup control. The service provider shall determine how Information System Backup is going to be verified and appropriate periodicity of the check.

-

(a) Requirement: The service provider maintains at least three backup copies of user-level information (at least one of which is available online) or provides an equivalent alternative.

-

(b) Requirement: The service provider maintains at least three backup copies of system-level information (at least one of which is available online) or provides an equivalent alternative.

-

(c) Requirement: The service provider maintains at least three backup copies of information system documentation including security information (at least one of which is available online) or provides an equivalent alternative.

-
-
-
- - daily incremental; weekly full - - - daily incremental; weekly full - - - daily incremental; weekly full - - - - - at least every 3 years - - - at least annually - - - - - - - -

Guidance: Include Common Access Card (CAC), i.e., the DoD technical implementation of PIV/FIPS 201/HSPD-12.

-
-
-
- - - - -

(e) Requirement: The service provider defines time period of inactivity for device identifiers.

-

Guidance: For DoD clouds, see DoD cloud website for specific DoD requirements that go above and beyond FedRAMP http://iase.disa.mil/cloud_security/Pages/index.aspx.

-
-
-
- - IA-4 (d) [at least two years] - - - ninety days for user identifiers (See additional requirements and guidance) - - - - to include sixty (60) days for passwords - - - - case sensitive, minimum of twelve characters, and at least one each of upper-case letters, lower-case letters, numbers, and special characters - - - at least one - - - one day minimum, sixty day maximum - - - twenty four - - - - - - - - - - - - at least every 3 years - - - at least annually - - - - at least annually - - - - - -

Requirement: The service provider ensures that individuals conducting incident handling meet personnel security requirements commensurate with the criticality/sensitivity of the information being processed, stored, and transmitted by the information system.

-
-
-
- - - - - -

Requirement: Reports security incident information according to FedRAMP Incident Communications Procedure.

-
-
-
- - US-CERT incident reporting timelines as specified in NIST Special Publication 800-61 (as amended) - - - - - - -

(b) Additional FedRAMP Requirements and Guidance: The service provider defines a list of incident response personnel (identified by name and/or by role) and organizational elements. The incident response list includes designated FedRAMP personnel.

-

(e) Additional FedRAMP Requirements and Guidance: The service provider defines a list of incident response personnel (identified by name and/or by role) and organizational elements. The incident response list includes designated FedRAMP personnel.

-
-
-
- - see additional FedRAMP Requirements and Guidance - - - at least annually - - - see additional FedRAMP Requirements and Guidance - - - - at least every 3 years - - - at least annually - - - - - - - at least every 3 years - - - at least annually - - - - - - - at least every 3 years - - - at least annually - - - - at least annually - - - - CSP defined physical access control systems/devices AND guards - - - CSP defined physical access control systems/devices - - - in all circumstances within restricted access area where the information system resides - - - at least annually - - - at least annually - - - - at least monthly - - - - for a minimum of one (1) year - - - at least monthly - - - - - - - -

(a). Requirements: The service provider measures temperature at server inlets and humidity levels by dew point.

-
-
-
- - consistent with American Society of Heating, Refrigerating and Air-conditioning Engineers (ASHRAE) document entitled Thermal Guidelines for Data Processing Environments - - - continuously - - - - - all information system components - - - - at least every 3 years - - - at least annually - - - - at least annually - - - - At least every 3 years - - - - at least every 3 years - - - at least annually - - - - at least every three years - - - - PS-3 (b) [for national security clearances; a reinvestigation is required during the 5th year for top secret security clearance, the 10th year for secret security clearance, and 15th year for confidential security clearance -For moderate risk law enforcement and high impact public trust level, a reinvestigation is required during the 5th year There is no reinvestigation for other moderate risk positions or any low risk positions] - - - - same day - - - - five days of the time period following the formal transfer action (DoD 24 hours) - - - - at least annually - - - at least annually - - - - organization-defined time period - same day - - - - - at least every 3 years - - - at least annually - - - - - - -

Guidance: Significant change is defined in NIST Special Publication 800-37 Revision 1, Appendix F.

-
-
-
- - security assessment report - - - at least every three (3) years or when a significant change occurs - - - to include all Authoring Officials and FedRAMP ISSOs - - - at least every three (3) years or when a significant change occurs - - - - - -

(a) Requirement: an accredited independent assessor scans operating systems/infrastructure, web applications, and databases once annually.

-

(e) Requirement: to include the Risk Executive; for JAB authorizations to include FedRAMP

-
-
-
- - monthly operating system/infrastructure; monthly web applications and databases - - - high-risk vulnerabilities mitigated within thirty days from date of discovery; moderate-risk vulnerabilities mitigated within ninety days from date of discovery - - - - at least every 3 years - - - at least annually - - - - - - - -

Guidance: The use of Common Criteria (ISO/IEC 15408) evaluated products is strongly preferred.

-

See http://www.niap-ccevs.org/vpl or http://www.commoncriteriaportal.org/products.html.

-
-
-
- - - - FedRAMP Security Controls Baseline(s) if Federal information is processed or stored within the external system - - - Federal/FedRAMP Continuous Monitoring requirements must be met for external systems where Federal information is processed or stored - - - - at least every 3 years - - - at least annually - - - - - - - -

Guidance: Federally approved cryptography

-
-
-
- - - FIPS-validated or NSA-approved cryptography - - - - - -

Additional FedRAMP Requirements and Guidance:

-

Requirement: The information system provides disablement (instead of physical disconnect) of collaborative computing devices in a manner that supports ease of use.

-
-
-
- - no exceptions - - - - - - - - at least every 3 years - - - at least annually - - - - within 30 days of release of updates - - - - at least weekly - - - to include endpoints - - - to include alerting administrator or defined security personnel - - - - - -

Guidance: See US-CERT Incident Response Reporting Guidelines.

-
-
-
- - - to include US-CERT - - - to include system security personnel and administrators with configuration/patch-management responsibilities - - - -
-
diff --git a/test_util/artifacts/FedRAMP_MODERATE-baseline_profile.xml b/test_util/artifacts/FedRAMP_MODERATE-baseline_profile.xml deleted file mode 100644 index 7dd1c695..00000000 --- a/test_util/artifacts/FedRAMP_MODERATE-baseline_profile.xml +++ /dev/null @@ -1,1685 +0,0 @@ - - - FedRAMP MODERATE Baseline PROFILE - - Federal Risk and Authorization Management Program (FedRAMP) - info@fedramp.gov - https://fedramp.gov - FedRAMP Moderate Baseline - 8/6/2018 - 1.0 - FedRAMP PMO - No notes. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - at least every 3 years - - - at least annually - - - - at least annually - - - - - no more than 30 days for temporary and emergency account types - - - - 90 days for user accounts - - - - - - -

Guidance: should use a shorter timeframe than AC-12.

-
-
-
- - - - - -

Required if shared/group accounts are deployed

-
-
-
- - - - -

Required if shared/group accounts are deployed

-
-
-
- - - - -

(a) Guidance: Required for privileged accounts.

-

(b) Guidance: Required for privileged accounts.

-
-
-
- - - - - - - -

Additional FedRAMP Requirements and Guidance:

-

Guidance: CSPs have the option to provide a separation of duties matrix as an attachment to the SSP.

-
-
-
- - - - - - -

Guidance: Examples of security functions include but are not limited to: establishing system accounts, configuring access authorizations (i.e., permissions, privileges), setting events to be audited, and setting intrusion detection parameters, system programming, system and security administration, other privileged functions.

-
-
-
- - all security functions - - - - - - - not more than three (3) - - - fifteen (15) minutes - - - locks the account/node for thirty minutes - - - locks the account/node for thirty minutes - - - - - -

Requirement: The service provider shall determine elements of the cloud environment that require the System Use Notification control. The elements of the cloud environment that require System Use Notification are approved and accepted by the JAB.

-

Requirement: The service provider shall determine how System Use Notification is going to be verified and provide appropriate periodicity of the check. The System Use Notification verification and periodicity are approved and accepted by the JAB.

-

Guidance: If performed as part of a Configuration Baseline check, then the % of items requiring setting that are checked and that pass (or fail) check can be provided. AC-8 Requirement: If not performed as part of a Configuration Baseline check, then there must be documented agreement on how to provide results of verification and the necessary periodicity of the verification by the service provider. The documented agreement on how to provide verification of the results are approved and accepted by the JAB.

-
-
-
- - see additional Requirements and Guidance - - - see additional Requirements and Guidance] - - - - three (3) sessions for privileged access and two (2) sessions for non-privileged access - - - - fifteen (15) minutes - - - - - - - - - - - - no greater than 15 minutes - - - - - - - - - - - - at least quarterly - - - - at least every 3 years - - - at least annually - - - - at least annually - - - - - at least annually - - - - At least one year - - - - at least every 3 years - - - at least annually - - - - - -

Requirement: Coordination between service provider and consumer shall be documented and accepted by the JAB/AO.

-
-
-
- - Successful and unsuccessful account logon events, account management events, object access, policy change, privilege functions, process tracking, and system events For Web applications: all administrator activity, authentication checks, authorization checks, data deletions, data access, data changes, and permission changes - - - organization-defined subset of the auditable events defined in AU-2 a to be audited continually for each identified event - - - - - -

Guidance: Annually or whenever changes in the threat environment are communicated to the service provider by the JAB.

-
-
-
- - annually or whenever there is a change in the threat environment - - - - - - -

Requirement: The service provider defines audit record types. The audit record types are approved and accepted by the JAB/AO. Guidance: For client-server transactions, the number of bytes sent and received gives bidirectional transfer information that can be helpful during an investigation or inquiry.

-
-
-
- - session, connection, transaction, or activity duration; for client-server transactions, the number of bytes received and bytes sent; additional informational messages to diagnose or identify the event; characteristics that describe or identify the object or resource being acted upon - - - - - organization-defined actions to be taken (overwrite oldest record) - - - - - -

Requirement: Coordination between service provider and consumer shall be documented and accepted by the JAB/AO. In multi-tennant environments, capability and means for providing review, analysis, and reporting to consumer for data pertaining to consumer shall be documented.

-
-
-
- - at least weekly - - - - - - - - - - -

Requirement: The service provider selects primary and secondary time servers used by the NIST Internet time service. The secondary server is selected from a different geographic region than the primary server.

-

Requirement: The service provider synchronizes the system clocks of network computers that run operating systems other than Windows to the Windows Server Domain Controller emulator or to the same time source for that server.

-

Guidance: Synchronization of system clocks improves the accuracy of log analysis.

-
-
-
- - At least hourly - - - http://tfnistgov/tf-cgi/serverscgi - - - - - at least weekly - - - - - - -

Requirement: The service provider retains audit records on-line for at least ninety days and further preserves audit records off-line for a period that is in accordance with NARA requirements.

-
-
-
- - at least ninety days - - - - all information system and network components where audit capability is deployed/available - - - all information system and network components where audit capability is deployed/available - - - - at least every 3 years - - - at least annually - - - - at least annually - - - individuals or roles to include FedRAMP PMO - - - - - -

Requirement: Must use an accredited 3PAO for JAB authorization

-
-
-
- - - - -

Requirement: To include 'announced', 'vulnerability scanning'

-
-
-
- - at least annually - - - - any FedRAMP Accredited 3PAO - - - any FedRAMP Accredited 3PAO - - - the conditions of a Authorizing Official in the FedRAMP Repository - - - - at least annually and on input from FedRAMP - - - - - -

Guidance: Refer to Appendix H - Cloud Considerations of the TIC 2.0 Reference Architecture document.

-
-
-
- - Boundary Protections which meet the Trusted Internet Connection (TIC) requirements - - - - - -

For JAB Authorization, CSPs shall include details of this control in their Architecture Briefing

-
-
-
- - - - -

Guidance: Requirement: POA&Ms must be provided at least monthly.

-
-
-
- - at least monthly - - - - - -

-c. Guidance: Significant change is defined in NIST Special Publication 800-37 Revision 1, Appendix F. The service provider describes the types of changes to the information system or the environment of operations that would impact the risk posture. The types of changes are approved and accepted by the JAB/AO.

-
-
-
- - at least every three years or when a significant change occurs - - - - - -

Requirement: Operating System Scans: at least monthly Database and Web Application Scans: at least monthly All scans performed by Independent Assessor: at least annually

-

Guidance: CSPs must provide evidence of closure and remediation of high vulnerabilities within the timeframe for standard POA&M updates.

-

Operating System Scans: at least monthly

-

Database and Web Application Scans: at least monthly

-

All scans performed by Independent Assessor: at least annually

-
-
-
- - to meet Federal and FedRAMP requirements (See additional guidance) - - - to meet Federal and FedRAMP requirements (See additional guidance) - - - - - at least annually - - - at least annually - - - - - - at least every 3 years - - - at least annually - - - - - at least annually or when a significant change occurs - - - to include when directed by the JAB - - - - - - - - -

Requirement: The service provider establishes a central means of communicating major changes to or developments in the information system or environment of operations that may affect its services to the federal government and associated service consumers (e.g., electronic bulletin board, web status page). The means of communication are approved and accepted by the JAB/AO.

-

-e Guidance: In accordance with record retention policies and procedures.

-
-
-
- - - - - - - -

Guidance: If digital signatures/certificates are unavailable, alternative cryptographic integrity checks (hashes, self-signed certs, etc.) can be utilized.

-
-
-
- - - at least quarterly - - - - - -

(a) Requirement 1: The service provider shall use the Center for Internet Security guidelines (Level 1) to establish configuration settings or establishes its own configuration settings if USGCB is not available.

-

(a) Requirement 2: The service provider shall ensure that checklists for configuration settings are Security Content Automation Protocol (SCAP) validated or SCAP compatible (if validated checklists are not available).

-

(a) Guidance: Information on the USGCB checklists can be found at: http://usgcb.nist.gov/usgcb_faq.html#usgcbfaq_usgcbfdcc

-
-
-
- - United States Government Configuration Baseline (USGCB) - - - - - - -

(b) Requirement: The service provider shall use the Center for Internet Security guidelines (Level 1) to establish list of prohibited or restricted functions, ports, protocols, and/or services or establishes its own list of prohibited or restricted functions, ports, protocols, and/or services if USGCB is not available.

-

Guidance: Information on the USGCB checklists can be found at: http://usgcb.nist.gov/usgcb_faq.html#usgcbfaq_usgcbfdcc

-

(Partially derived from AC-17(8).)

-
-
-
- - United States Government Configuration Baseline (USGCB) - - - - at least monthly - - - - - -

Guidance: This control shall be implemented in a technical manner on the information system to only allow programs to run that adhere to the policy (i.e. white listing). This control is not to be based off of strictly written policy on what is allowed or not allowed to run.

-
-
-
- - - at least Annually or when there is a change - - - - - -

Requirement: must be provided at least monthly or when there is a change.

-
-
-
- - at least monthly - - - - - Continuously, using automated mechanisms with a maximum five-minute delay in detection - - - - - - - - Continuously (via CM-7 (5)) - - - - at least every 3 years - - - at least annually - - - - - -

Requirement: For JAB authorizations the contingency lists include designated FedRAMP personnel.

-
-
-
- - at least annually - - - - - - - - ten (10) days - - - at least annually - - - - - -

(a). Requirement: The service provider develops test plans in accordance with NIST Special Publication 800-34 (as amended); plans are approved by the JAB/AO prior to initiating testing.

-
-
-
- - at least annually - - - functional exercises - - - - - - - - - -

(a). Requirement: The service provider defines a time period consistent with the recovery time objectives and business impact analysis.

-
-
-
- - - - -

Guidance: The service provider may determine what is considered a sufficient degree of separation between the primary and alternate processing sites, based on the types of threats that are of concern. For one particular type of threat (i.e., hostile cyber attack), the degree of separation between sites will be less relevant.

-
-
-
- - - - - - -

Requirement: The service provider defines a time period consistent with the recovery time objectives and business impact analysis.

-
-
-
- - - - - - -

Requirement: The service provider shall determine what elements of the cloud environment require the Information System Backup control. The service provider shall determine how Information System Backup is going to be verified and appropriate periodicity of the check.

-

(a) Requirement: The service provider maintains at least three backup copies of user-level information (at least one of which is available online) or provides an equivalent alternative.

-

(b) Requirement: The service provider maintains at least three backup copies of system-level information (at least one of which is available online) or provides an equivalent alternative.

-

(c) Requirement: The service provider maintains at least three backup copies of information system documentation including security information (at least one of which is available online) or provides an equivalent alternative.

-
-
-
- - daily incremental; weekly full - - - daily incremental; weekly full - - - daily incremental; weekly full - - - - at least annually - - - - - - - at least every 3 years - - - at least annually - - - - - - - - - - - -

Guidance: PIV=separate device. Please refer to NIST SP 800-157 Guidelines for Derived Personal Identity Verification (PIV) Credentials.

-
-
-
- - FIPS 140-2, NIAP Certification, or NSA approval - - - - - -

Guidance: Include Common Access Card (CAC), i.e., the DoD technical implementation of PIV/FIPS 201/HSPD-12.

-
-
-
- - - - - -

(e) Requirement: The service provider defines time period of inactivity for device identifiers.

-

Guidance: For DoD clouds, see DoD cloud website for specific DoD requirements that go above and beyond FedRAMP http://iase.disa.mil/cloud_security/Pages/index.aspx.

-
-
-
- - IA-4 (d) [at least two years] - - - ninety days for user identifiers (See additional requirements and guidance) - - - - contractors; foreign nationals - - - - to include sixty (60) days for passwords - - - - case sensitive, minimum of twelve characters, and at least one each of upper-case letters, lower-case letters, numbers, and special characters - - - case sensitive, minimum of twelve characters, and at least one IA-5 (1) (b) [at least one - - - one (1) day minimum, sixty (60) day maximum - - - twenty four (24) - - - - - All hardware/biometric (multifactor authenticators) - - - in person - - - - - -

Additional FedRAMP Requirements and Guidance: Guidance: If automated mechanisms which enforce password authenticator strength at creation are not used, automated mechanisms must be used to audit strength of created password authenticators.

-
-
-
- - - - - - - - - - - - - at least every 3 years - - - at least annually - - - - at least annually - - - - - -

-2 Requirement 1: The service provider defines tests and/or exercises in accordance with NIST Special Publication 800-61 (as amended).

-

-2 Requirement 2: For JAB Authorization, the service provider provides test plans to the JAB/AO annually.

-

-2 Requirement 3: Test plans are approved and accepted by the Authorizing Official (AO) prior to test commencing.

-
-
-
- - at least annually - - - see additional FedRAMP Requirements and Guidance - - - - - - -

Requirement: The service provider ensures that individuals conducting incident handling meet personnel security requirements commensurate with the criticality/sensitivity of the information being processed, stored, and transmitted by the information system.

-
-
-
- - - - - - -

Requirement: Reports security incident information according to FedRAMP Incident Communications Procedure.

-
-
-
- - US-CERT incident reporting timelines as specified in NIST Special Publication 800-61 (as amended) - - - - - - - - - -

(b) Additional FedRAMP Requirements and Guidance: The service provider defines a list of incident response personnel (identified by name and/or by role) and organizational elements. The incident response list includes designated FedRAMP personnel.

-

(e) Additional FedRAMP Requirements and Guidance: The service provider defines a list of incident response personnel (identified by name and/or by role) and organizational elements. The incident response list includes designated FedRAMP personnel.

-
-
-
- - see additional FedRAMP Requirements and Guidance - - - at least annually - - - see additional FedRAMP Requirements and Guidance - - - - - - - - - at least every 3 years - - - at least annually - - - - - - - - the information owner explicitly authorizing removal of the equipment from the facility - - - - - - - - -

Requirement: Only MA-5 (1)(a)(1) is required by FedRAMP Moderate Baseline

-
-
-
- - - - at least every 3 years - - - at least annually - - - - - - -

(b) Guidance: Second parameter not-applicable

-
-
-
- - no removable media types - - - - - -

(a) Additional FedRAMP Requirements and Guidance: Requirement: The service provider defines controlled areas within facilities where the information and information system reside.

-
-
-
- - all types of digital and non-digital media with sensitive information - - - FedRAMP Assignment: see additional FedRAMP requirements and guidance - - - - - -

(a) Additional FedRAMP Requirements and Guidance:

-

Requirement: The service provider defines security measures to protect digital and non-digital media in transport. The security measures are approved and accepted by the JAB.

-
-
-
- - all media with sensitive information - - - prior to leaving secure/controlled environment: for digital media, encryption using a FIPS 140-2 validated encryption module; for non-digitital media, secured in locked container - - - - - - - -

Guidance: Equipment and procedures may be tested or validated for effectiveness

-
-
-
- - At least annually - - - - - - at least every 3 years - - - at least annually - - - - at least annually - - - - CSP defined physical access control systems/devices AND guards - - - CSP defined physical access control systems/devices - - - in all circumstances within restricted access area where the information system resides - - - at least annually - - - at least annually - - - - - - at least monthly - - - - - for a minimum of one (1) year - - - at least monthly - - - - - - - - - - - - -

(a). Requirements: The service provider measures temperature at server inlets and humidity levels by dew point.

-
-
-
- - consistent with American Society of Heating, Refrigerating and Air-conditioning Engineers (ASHRAE) document entitled Thermal Guidelines for Data Processing Environments - - - continuously - - - - - - all information system components - - - - - at least every 3 years - - - at least annually - - - - at least annually - - - - - At least every 3 years - - - - - - -

(b) Guidance: Significant change is defined in NIST Special Publication 800-37 Revision 1, Appendix F, page F-7.

-
-
-
- - At least annually or when a significant change occurs - - - - at least every 3 years - - - at least annually - - - - at least every three years - - - - for national security clearances; a reinvestigation is required during the fifth (5th) year for top secret security clearance, the tenth (10th) year for secret security clearance, and fifteenth (15th) year for confidential security clearance. For moderate risk law enforcement and high impact public trust level, a reinvestigation is required during the fifth (5th) year. There is no reinvestigation for other moderate risk positions or any low risk positions - - - - personnel screening criteria - as required by specific information - - - - same day - - - - five days of the time period following the formal transfer action (DoD 24 hours) - - - - at least annually - - - at least annually - - - - organization-defined time period - same day - - - - - at least every 3 years - - - at least annually - - - - - - -

Guidance: Significant change is defined in NIST Special Publication 800-37 Revision 1, Appendix F.

-

(d) Requirement: Include all Authoring Officials and FedRAMP ISSOs.

-
-
-
- - security assessment report - - - at least every three (3) years or when a significant change occurs - - - at least every three (3) years or when a significant change occurs - - - - - -

(a) Requirement: an accredited independent assessor scans operating systems/infrastructure, web applications, and databases once annually.

-

(e) Requirement: to include the Risk Executive; for JAB authorizations to include FedRAMP

-
-
-
- - monthly operating system/infrastructure; monthly web applications and database - - - high-risk vulnerabilities mitigated within thirty days from date of discovery; moderate-risk vulnerabilities mitigated within ninety days from date of discovery - - - - - prior to a new scan - - - - - operating systems / web applications / databases - - - all scans - - - - - -

Guidance: include in Continuous Monitoring ISSO digest/report to JAB/AO

-
-
-
- - - - -

Requirements: This enhancement is required for all high vulnerability scan findings. Guidance: While scanning tools may label findings as high or critical, the intent of the control is based around NIST's definition of high vulnerability.

-
-
-
- - - at least every 3 years - - - at least annually - - - - - - - -

Guidance: The use of Common Criteria (ISO/IEC 15408) evaluated products is strongly preferred.

-

See http://www.niap-ccevs.org/vpl or http://www.commoncriteriaportal.org/products.html.

-
-
-
- - - - to include security-relevant external system interfaces and high-level design - - - - - -

Guidance: CSP must use the same security standards regardless of where the system component or information system service is acquired.

-
-
-
- - at least the minimum requirement as defined in control CA-7 - - - - - - - - FedRAMP Security Controls Baseline(s) if Federal information is processed or stored within the external system - - - Federal/FedRAMP Continuous Monitoring requirements must be met for external systems where Federal information is processed or stored - - - - - All external systems where Federal information is processed or stored - - - - All external systems where Federal information is processed or stored - - - - information processing, information data, AND information services - - - - - -

(e) Requirement: for JAB authorizations, track security flaws and flaw resolution within the system, component, or service and report findings to organization-defined personnel, to include FedRAMP.

-
-
-
- - development, implementation, AND operation - - - - - - - -

Requirement: The service provider documents in the Continuous Monitoring Plan, how newly developed code for the information system is reviewed.

-
-
-
- - - - - -

Requirement: The service provider documents in the Continuous Monitoring Plan, how newly developed code for the information system is reviewed.

-
-
-
- - - at least every 3 years - - - at least annually - - - - - - - - - - at least annually - - - - - - - - - -

Requirement: The service provider defines key information security tools, mechanisms, and support components associated with system and security administration and isolates those tools, mechanisms, and support components from other internal information system components via physically or logically separate subnets.

-
-
-
- - - - confidentiality AND integrity - - - - prevent unauthorized disclosure of information AND detect changes to information - - - a hardened or alarmed carrier Protective Distribution System (PDS) - - - - no longer than 30 minutes for RAS-based sessions or no longer than 60 minutes for non-interactive user sessions - - - - - -

Guidance: Federally approved cryptography

-
-
-
- - - NIST FIPS-compliant - - - - - FIPS-validated or NSA-approved cryptography - - - - - -

Additional FedRAMP Requirements and Guidance:

-

Requirement: The information system provides disablement (instead of physical disconnect) of collaborative computing devices in a manner that supports ease of use.

-
-
-
- - no exceptions - - - - - - - - - - - - -

Guidance: The organization supports the capability to use cryptographic mechanisms to protect information at rest.

-
-
-
- - confidentiality AND integrity - - - - - - at least every 3 years - - - at least annually - - - - within 30 days of release of updates - - - - at least monthly - - - - - at least weekly - - - to include endpoints - - - to include alerting administrator or defined security personnel - - - - - - - - -

Guidance: See US-CERT Incident Response Reporting Guidelines.

-
-
-
- - - - - continuously - - - - - -

Guidance: In accordance with the incident response plan.

-
-
-
- - - - - - to include US-CERT - - - to include system security personnel and administrators with configuration/patch-management responsibilities - - - - to include upon system startup and/or restart - - - at least monthly - - - to include system administrators and security personnel - - - to include notification of system administrators and security personnel - - - - - Selection to include security relevant events - - - at least monthly - - - - - - - - - -
-
From 67d3d3d231aa320d8579c12d07a6d8d4523c4c00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 16 Jan 2020 10:32:49 +0100 Subject: [PATCH 078/110] Remove bundled NIST profiles These files are already dated and none of them conform to the latest oscal. --- Makefile | 3 - ...T_SP-800-53_rev4_HIGH-baseline_profile.xml | 1208 ----------------- ...ST_SP-800-53_rev4_LOW-baseline_profile.xml | 714 ---------- ...-800-53_rev4_MODERATE-baseline_profile.xml | 1071 --------------- 4 files changed, 2996 deletions(-) delete mode 100644 test_util/artifacts/NIST_SP-800-53_rev4_HIGH-baseline_profile.xml delete mode 100644 test_util/artifacts/NIST_SP-800-53_rev4_LOW-baseline_profile.xml delete mode 100644 test_util/artifacts/NIST_SP-800-53_rev4_MODERATE-baseline_profile.xml diff --git a/Makefile b/Makefile index 3b378f25..165b0c8d 100644 --- a/Makefile +++ b/Makefile @@ -20,9 +20,6 @@ generate: test: @echo "Running Oscalkit test Utility" - @sh test_util/RunTest.sh -p test_util/artifacts/NIST_SP-800-53_rev4_HIGH-baseline_profile.xml - @sh test_util/RunTest.sh -p test_util/artifacts/NIST_SP-800-53_rev4_MODERATE-baseline_profile.xml - @sh test_util/RunTest.sh -p test_util/artifacts/NIST_SP-800-53_rev4_LOW-baseline_profile.xml @echo "Running remaining tests" @go test -race -coverprofile=coverage.txt -covermode=atomic -v $(shell go list ./... | grep -v "/vendor/\|/test_util/src") diff --git a/test_util/artifacts/NIST_SP-800-53_rev4_HIGH-baseline_profile.xml b/test_util/artifacts/NIST_SP-800-53_rev4_HIGH-baseline_profile.xml deleted file mode 100644 index bb15a6ec..00000000 --- a/test_util/artifacts/NIST_SP-800-53_rev4_HIGH-baseline_profile.xml +++ /dev/null @@ -1,1208 +0,0 @@ - - - SP800-53 HIGH BASELINE IMPACT - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P3 - - - - - P3 - - - - - P2 - - - - - P3 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P3 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P3 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P3 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P3 - - - - - P2 - - - - - P2 - - - - - P2 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P3 - - - - - P2 - - - - - P2 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P3 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P2 - - - - - P3 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P3 - - - - - P1 - - - - - P3 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P2 - - - - - P2 - - - - - P1 - - - - diff --git a/test_util/artifacts/NIST_SP-800-53_rev4_LOW-baseline_profile.xml b/test_util/artifacts/NIST_SP-800-53_rev4_LOW-baseline_profile.xml deleted file mode 100644 index d4c29c32..00000000 --- a/test_util/artifacts/NIST_SP-800-53_rev4_LOW-baseline_profile.xml +++ /dev/null @@ -1,714 +0,0 @@ - - - SP800-53 LOW BASELINE IMPACT - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P3 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P3 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P3 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P3 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P3 - - - - - P2 - - - - - P2 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P2 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P3 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P3 - - - - - P1 - - - - - P3 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - diff --git a/test_util/artifacts/NIST_SP-800-53_rev4_MODERATE-baseline_profile.xml b/test_util/artifacts/NIST_SP-800-53_rev4_MODERATE-baseline_profile.xml deleted file mode 100644 index f50f1aee..00000000 --- a/test_util/artifacts/NIST_SP-800-53_rev4_MODERATE-baseline_profile.xml +++ /dev/null @@ -1,1071 +0,0 @@ - - - SP800-53 MODERATE BASELINE IMPACT - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P3 - - - - - P2 - - - - - P3 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P3 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P3 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P3 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P3 - - - - - P2 - - - - - P2 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P3 - - - - - P2 - - - - - P2 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P3 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P3 - - - - - P1 - - - - - P3 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P1 - - - - - P2 - - - - - P1 - - - - - P2 - - - - - P2 - - - - - P1 - - - - From e2c58b147a5e2c19005fa3e72420d78575d8800e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 16 Jan 2020 10:44:01 +0100 Subject: [PATCH 079/110] Remove NIST bundled catalog This file is already dated and it does not conform to the latest oscal. --- .../artifacts/NIST_SP-800-53_rev4_catalog.xml | 55418 ---------------- 1 file changed, 55418 deletions(-) delete mode 100644 test_util/artifacts/NIST_SP-800-53_rev4_catalog.xml diff --git a/test_util/artifacts/NIST_SP-800-53_rev4_catalog.xml b/test_util/artifacts/NIST_SP-800-53_rev4_catalog.xml deleted file mode 100644 index 4be96a5a..00000000 --- a/test_util/artifacts/NIST_SP-800-53_rev4_catalog.xml +++ /dev/null @@ -1,55418 +0,0 @@ - - - - NIST SP800-53 - - - - 5 C.F.R. 731.106 - - - C.F.R. Part 5 Subpart C (5 C.F.R. 930.301) - - - CNSS Policy 15 - - - DoD Information Assurance Vulnerability Alerts - - - DoD Instruction 5200.39 - - - DoD Instruction 8551.01 - - - DoD Instruction 8552.01 - - - Executive Order 13587 - - - Federal Acquisition Regulation - - - Federal Continuity Directive 1 - - - FICAM Roadmap and Implementation Guidance - - - FIPS Publication 140 - - - FIPS Publication 140-2 - - - FIPS Publication 197 - - - FIPS Publication 199 - - - FIPS Publication 200 - - - FIPS Publication 201 - - - HSPD-12 - - - HSPD 7 - - - http://capec.mitre.org - - - http://checklists.nist.gov - - - http://csrc.nist.gov/cryptval - - - http://csrc.nist.gov/groups/STM/cmvp/index.html - - - http://cve.mitre.org - - - http://cwe.mitre.org - - - http://fips201ep.cio.gov - - - http://idmanagement.gov - - - http://nvd.nist.gov - - - http://www.acquisition.gov/far - - - http://www.cnss.gov - - - http://www.dhs.gov/telecommunications-service-priority-tsp - - - http://www.niap-ccevs.org - - - http://www.nsa.gov - - - http://www.nsa.gov/ia/mitigation_guidance/media_destruction_guidance/index.shtml - - - http://www.omb.gov - - - http://www.us-cert.gov - - - ICD 704 - - - ICD 705 - - - ISO/IEC 15408 - - - National Communications Systems Directive 3-10 - - - National Infrastructure Protection Plan - - - National Strategy for Trusted Identities in Cyberspace - - - NIST Interagency Report 7622 - - - NIST Special Publication 800-100 - - - NIST Special Publication 800-111 - - - NIST Special Publication 800-113 - - - NIST Special Publication 800-114 - - - NIST Special Publication 800-115 - - - NIST Special Publication 800-116 - - - NIST Special Publication 800-12 - - - NIST Special Publication 800-121 - - - NIST Special Publication 800-124 - - - NIST Special Publication 800-128 - - - NIST Special Publication 800-137 - - - NIST Special Publication 800-147 - - - NIST Special Publication 800-155 - - - NIST Special Publication 800-16 - - - NIST Special Publication 800-161 - - - NIST Special Publication 800-164 - - - NIST Special Publication 800-18 - - - NIST Special Publication 800-23 - - - NIST Special Publication 800-27 - - - NIST Special Publication 800-28 - - - NIST Special Publication 800-30 - - - NIST Special Publication 800-32 - - - NIST Special Publication 800-34 - - - NIST Special Publication 800-35 - - - NIST Special Publication 800-36 - - - NIST Special Publication 800-37 - - - NIST Special Publication 800-39 - - - NIST Special Publication 800-40 - - - NIST Special Publication 800-41 - - - NIST Special Publication 800-45 - - - NIST Special Publication 800-46 - - - NIST Special Publication 800-47 - - - NIST Special Publication 800-48 - - - NIST Special Publication 800-50 - - - NIST Special Publication 800-52 - - - NIST Special Publication 800-53 - - - NIST Special Publication 800-53A - - - NIST Special Publication 800-55 - - - NIST Special Publication 800-56 - - - NIST Special Publication 800-57 - - - NIST Special Publication 800-58 - - - NIST Special Publication 800-60 - - - NIST Special Publication 800-61 - - - NIST Special Publication 800-63 - - - NIST Special Publication 800-64 - - - NIST Special Publication 800-65 - - - NIST Special Publication 800-70 - - - NIST Special Publication 800-73 - - - NIST Special Publication 800-76 - - - NIST Special Publication 800-77 - - - NIST Special Publication 800-78 - - - NIST Special Publication 800-81 - - - NIST Special Publication 800-83 - - - NIST Special Publication 800-84 - - - NIST Special Publication 800-88 - - - NIST Special Publication 800-92 - - - NIST Special Publication 800-94 - - - NIST Special Publication 800-95 - - - NIST Special Publication 800-97 - - - NSTISSI No. 7003 - - - OMB Circular A-130 - - - OMB Memorandum 02-01 - - - OMB Memorandum 04-04 - - - OMB Memorandum 05-24 - - - OMB Memorandum 06-16 - - - OMB Memorandum 07-11 - - - OMB Memorandum 07-18 - - - OMB Memorandum 08-22 - - - OMB Memorandum 08-23 - - - OMB Memorandum 10-06-2011 - - - OMB Memorandum 11-11 - - - OMB Memorandum 11-33 - - - Personal Identity Verification (PIV) in Enterprise Physical Access Control System (E-PACS) - - - US-CERT Technical Cyber Security Alerts - - - - Access Control - - Access Control Policy and Procedures - - - - - - - - - - AC-1 - -

The organization:

- - a. -

Develops, documents, and disseminates to :

- - 1. -

An access control policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and

-
- - 2. -

Procedures to facilitate the implementation of the access control policy and associated access controls; and

-
-
- - b. -

Reviews and updates the current:

- - 1. -

Access control policy ; and

-
- - 2. -

Access control procedures .

-
-
-
- -

This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the AC family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures.

- PM-9 -
- -

Determine if the organization:

- - AC-1(a) - - AC-1(a)(1) - - AC-1(a)(1)[1] -

develops and documents an access control policy that addresses:

- - AC-1(a)(1)[1][a] -

purpose;

-
- - AC-1(a)(1)[1][b] -

scope;

-
- - AC-1(a)(1)[1][c] -

roles;

-
- - AC-1(a)(1)[1][d] -

responsibilities;

-
- - AC-1(a)(1)[1][e] -

management commitment;

-
- - AC-1(a)(1)[1][f] -

coordination among organizational entities;

-
- - AC-1(a)(1)[1][g] -

compliance;

-
-
- - AC-1(a)(1)[2] -

defines personnel or roles to whom the access control policy are to be disseminated;

-
- - AC-1(a)(1)[3] -

disseminates the access control policy to organization-defined personnel or roles;

-
-
- - AC-1(a)(2) - - AC-1(a)(2)[1] -

develops and documents procedures to facilitate the implementation of the access control policy and associated access control controls;

-
- - AC-1(a)(2)[2] -

defines personnel or roles to whom the procedures are to be disseminated;

-
- - AC-1(a)(2)[3] -

disseminates the procedures to organization-defined personnel or roles;

-
-
-
- - AC-1(b) - - AC-1(b)(1) - - AC-1(b)(1)[1] -

defines the frequency to review and update the current access control policy;

-
- - AC-1(b)(1)[2] -

reviews and updates the current access control policy with the organization-defined frequency;

-
-
- - AC-1(b)(2) - - AC-1(b)(2)[1] -

defines the frequency to review and update the current access control procedures; and

-
- - AC-1(b)(2)[2] -

reviews and updates the current access control procedures with the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

Access control policy and procedures

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with access control responsibilities

-

organizational personnel with information security responsibilities

-
-
- - NIST Special Publication 800-12 - - NIST Special Publication 800-100 - -
- - Account Management - - - - - - - - - - - - - AC-2 - -

The organization:

- - a. -

Identifies and selects the following types of information system accounts to support organizational missions/business functions: ;

-
- - b. -

Assigns account managers for information system accounts;

-
- - c. -

Establishes conditions for group and role membership;

-
- - d. -

Specifies authorized users of the information system, group and role membership, and access authorizations (i.e., privileges) and other attributes (as required) for each account;

-
- - e. -

Requires approvals by for requests to create information system accounts;

-
- - f. -

Creates, enables, modifies, disables, and removes information system accounts in accordance with ;

-
- - g. -

Monitors the use of information system accounts;

-
- - h. -

Notifies account managers:

- - 1. -

When accounts are no longer required;

-
- - 2. -

When users are terminated or transferred; and

-
- - 3. -

When individual information system usage or need-to-know changes;

-
-
- - i. -

Authorizes access to the information system based on:

- - 1. -

A valid access authorization;

-
- - 2. -

Intended system usage; and

-
- - 3. -

Other attributes as required by the organization or associated missions/business functions;

-
-
- - j. -

Reviews accounts for compliance with account management requirements ; and

-
- - k. -

Establishes a process for reissuing shared/group account credentials (if deployed) when individuals are removed from the group.

-
-
- -

Information system account types include, for example, individual, shared, group, system, guest/anonymous, emergency, developer/manufacturer/vendor, temporary, and service. Some of the account management requirements listed above can be implemented by organizational information systems. The identification of authorized users of the information system and the specification of access privileges reflects the requirements in other security controls in the security plan. Users requiring administrative privileges on information system accounts receive additional scrutiny by appropriate organizational personnel (e.g., system owner, mission/business owner, or chief information security officer) responsible for approving such accounts and privileged access. Organizations may choose to define access privileges or other attributes by account, by type of account, or a combination of both. Other attributes required for authorizing access include, for example, restrictions on time-of-day, day-of-week, and point-of-origin. In defining other account attributes, organizations consider system-related requirements (e.g., scheduled maintenance, system upgrades) and mission/business requirements, (e.g., time zone differences, customer requirements, remote access to support travel requirements). Failure to consider these factors could affect information system availability. Temporary and emergency accounts are accounts intended for short-term use. Organizations establish temporary accounts as a part of normal account activation procedures when there is a need for short-term accounts without the demand for immediacy in account activation. Organizations establish emergency accounts in response to crisis situations and with the need for rapid account activation. Therefore, emergency account activation may bypass normal account authorization processes. Emergency and temporary accounts are not to be confused with infrequently used accounts (e.g., local logon accounts used for special tasks defined by organizations or when network resources are unavailable). Such accounts remain available and are not subject to automatic disabling or removal dates. Conditions for disabling or deactivating accounts include, for example: (i) when shared/group, emergency, or temporary accounts are no longer required; or (ii) when individuals are transferred or terminated. Some types of information system accounts may require specialized training.

- AC-3 - AC-4 - AC-5 - AC-6 - AC-10 - AC-17 - AC-19 - AC-20 - AU-9 - IA-2 - IA-4 - IA-5 - IA-8 - CM-5 - CM-6 - CM-11 - MA-3 - MA-4 - MA-5 - PL-4 - SC-13 -
- -

Determine if the organization:

- - AC-2(a) - - AC-2(a)[1] -

defines information system account types to be identified and selected to support organizational missions/business functions;

-
- - AC-2(a)[2] -

identifies and selects organization-defined information system account types to support organizational missions/business functions;

-
-
- - AC-2(b) -

assigns account managers for information system accounts;

-
- - AC-2(c) -

establishes conditions for group and role membership;

-
- - AC-2(d) -

specifies for each account (as required):

- - AC-2(d)[1] -

authorized users of the information system;

-
- - AC-2(d)[2] -

group and role membership;

-
- - AC-2(d)[3] -

access authorizations (i.e., privileges);

-
- - AC-2(d)[4] -

other attributes;

-
-
- - AC-2(e) - - AC-2(e)[1] -

defines personnel or roles required to approve requests to create information system accounts;

-
- - AC-2(e)[2] -

requires approvals by organization-defined personnel or roles for requests to create information system accounts;

-
-
- - AC-2(f) - - AC-2(f)[1] -

defines procedures or conditions to:

- - AC-2(f)[1][a] -

create information system accounts;

-
- - AC-2(f)[1][b] -

enable information system accounts;

-
- - AC-2(f)[1][c] -

modify information system accounts;

-
- - AC-2(f)[1][d] -

disable information system accounts;

-
- - AC-2(f)[1][e] -

remove information system accounts;

-
-
- - AC-2(f)[2] -

in accordance with organization-defined procedures or conditions:

- - AC-2(f)[2][a] -

creates information system accounts;

-
- - AC-2(f)[2][b] -

enables information system accounts;

-
- - AC-2(f)[2][c] -

modifies information system accounts;

-
- - AC-2(f)[2][d] -

disables information system accounts;

-
- - AC-2(f)[2][e] -

removes information system accounts;

-
-
-
- - AC-2(g) -

monitors the use of information system accounts;

-
- - AC-2(h) -

notifies account managers:

- - AC-2(h)(1) -

when accounts are no longer required;

-
- - AC-2(h)(2) -

when users are terminated or transferred;

-
- - AC-2(h)(3) -

when individual information system usage or need to know changes;

-
-
- - AC-2(i) -

authorizes access to the information system based on;

- - AC-2(i)(1) -

a valid access authorization;

-
- - AC-2(i)(2) -

intended system usage;

-
- - AC-2(i)(3) -

other attributes as required by the organization or associated missions/business functions;

-
-
- - AC-2(j) - - AC-2(j)[1] -

defines the frequency to review accounts for compliance with account management requirements;

-
- - AC-2(j)[2] -

reviews accounts for compliance with account management requirements with the organization-defined frequency; and

-
-
- - AC-2(k) -

establishes a process for reissuing shared/group account credentials (if deployed) when individuals are removed from the group.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing account management

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of active system accounts along with the name of the individual associated with each account

-

list of conditions for group and role membership

-

notifications or records of recently transferred, separated, or terminated employees

-

list of recently disabled information system accounts along with the name of the individual associated with each account

-

access authorization records

-

account management compliance reviews

-

information system monitoring records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with account management responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes account management on the information system

-

automated mechanisms for implementing account management

-
-
- - Automated System Account Management - AC-2(1) - -

The organization employs automated mechanisms to support the management of information system accounts.

-
- -

The use of automated mechanisms can include, for example: using email or text messaging to automatically notify account managers when users are terminated or transferred; using the information system to monitor account usage; and using telephonic notification to report atypical system account usage.

-
- -

Determine if the organization employs automated mechanisms to support the management of information system accounts.

-
- - EXAMINE - -

Access control policy

-

procedures addressing account management

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with account management responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing account management functions

-
-
-
- - Removal of Temporary / Emergency Accounts - - - - - - - AC-2(2) - -

The information system automatically temporary and emergency accounts after .

-
- -

This control enhancement requires the removal of both temporary and emergency accounts automatically after a predefined period of time has elapsed, rather than at the convenience of the systems administrator.

-
- -

Determine if:

- - AC-2(2)[1] -

the organization defines the time period after which the information system automatically removes or disables temporary and emergency accounts; and

-
- - AC-2(2)[2] -

the information system automatically removes or disables temporary and emergency accounts after the organization-defined time period for each type of account.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing account management

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system-generated list of temporary accounts removed and/or disabled

-

information system-generated list of emergency accounts removed and/or disabled

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with account management responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing account management functions

-
-
-
- - Disable Inactive Accounts - - - - AC-2(3) - -

The information system automatically disables inactive accounts after .

-
- -

Determine if:

- - AC-2(3)[1] -

the organization defines the time period after which the information system automatically disables inactive accounts; and

-
- - AC-2(3)[2] -

the information system automatically disables inactive accounts after the organization-defined time period.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing account management

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system-generated list of temporary accounts removed and/or disabled

-

information system-generated list of emergency accounts removed and/or disabled

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with account management responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing account management functions

-
-
-
- - Automated Audit Actions - - - - AC-2(4) - -

The information system automatically audits account creation, modification, enabling, disabling, and removal actions, and notifies .

-
- - AU-2 - AU-12 - - -

Determine if:

- - AC-2(4)[1] -

the information system automatically audits the following account actions:

- - AC-2(4)[1][a] -

creation;

-
- - AC-2(4)[1][b] -

modification;

-
- - AC-2(4)[1][c] -

enabling;

-
- - AC-2(4)[1][d] -

disabling;

-
- - AC-2(4)[1][e] -

removal;

-
-
- - AC-2(4)[2] -

the organization defines personnel or roles to be notified of the following account actions:

- - AC-2(4)[2][a] -

creation;

-
- - AC-2(4)[2][b] -

modification;

-
- - AC-2(4)[2][c] -

enabling;

-
- - AC-2(4)[2][d] -

disabling;

-
- - AC-2(4)[2][e] -

removal;

-
-
- - AC-2(4)[3] -

the information system notifies organization-defined personnel or roles of the following account actions:

- - AC-2(4)[3][a] -

creation;

-
- - AC-2(4)[3][b] -

modification;

-
- - AC-2(4)[3][c] -

enabling;

-
- - AC-2(4)[3][d] -

disabling; and

-
- - AC-2(4)[3][e] -

removal.

-
-
-
- - EXAMINE - -

Access control policy

-

procedures addressing account management

-

information system design documentation

-

information system configuration settings and associated documentation

-

notifications/alerts of account creation, modification, enabling, disabling, and removal actions

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with account management responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing account management functions

-
-
-
- - Inactivity Logout - - - - AC-2(5) - -

The organization requires that users log out when .

-
- - SC-23 - - -

Determine if the organization:

- - AC-2(5)[1] -

defines either the time period of expected inactivity that requires users to log out or the description of when users are required to log out; and

-
- - AC-2(5)[2] -

requires that users log out when the organization-defined time period of inactivity is reached or in accordance with organization-defined description of when to log out.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing account management

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

security violation reports

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with account management responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

users that must comply with inactivity logout policy

-
-
-
- - Dynamic Privilege Management - - - - AC-2(6) - -

The information system implements the following dynamic privilege management capabilities: .

-
- -

In contrast to conventional access control approaches which employ static information system accounts and predefined sets of user privileges, dynamic access control approaches (e.g., service-oriented architectures) rely on run time access control decisions facilitated by dynamic privilege management. While user identities may remain relatively constant over time, user privileges may change more frequently based on ongoing mission/business requirements and operational needs of organizations. Dynamic privilege management can include, for example, the immediate revocation of privileges from users, as opposed to requiring that users terminate and restart their sessions to reflect any changes in privileges. Dynamic privilege management can also refer to mechanisms that change the privileges of users based on dynamic rules as opposed to editing specific user profiles. This type of privilege management includes, for example, automatic adjustments of privileges if users are operating out of their normal work times, or if information systems are under duress or in emergency maintenance situations. This control enhancement also includes the ancillary effects of privilege changes, for example, the potential changes to encryption keys used for communications. Dynamic privilege management can support requirements for information system resiliency.

- AC-16 -
- -

Determine if:

- - AC-2(6)[1] -

the organization defines a list of dynamic privilege management capabilities to be implemented by the information system; and

-
- - AC-2(6)[2] -

the information system implements the organization-defined list of dynamic privilege management capabilities.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing account management

-

information system design documentation

-

information system configuration settings and associated documentation

-

system-generated list of dynamic privilege management capabilities

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with account management responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Information system implementing dynamic privilege management capabilities

-
-
-
- - Role-based Schemes - - - - AC-2(7) - -

The organization:

- - (a) -

Establishes and administers privileged user accounts in accordance with a role-based access scheme that organizes allowed information system access and privileges into roles;

-
- - (b) -

Monitors privileged role assignments; and

-
- - (c) -

Takes when privileged role assignments are no longer appropriate.

-
-
- -

Privileged roles are organization-defined roles assigned to individuals that allow those individuals to perform certain security-relevant functions that ordinary users are not authorized to perform. These privileged roles include, for example, key management, account management, network and system administration, database administration, and web administration.

-
- -

Determine if the organization:

- - AC-2(7)(a) -

establishes and administers privileged user accounts in accordance with a role-based access scheme that organizes allowed information system access and privileges into roles;

- AC-2(7)(a) -
- - AC-2(7)(b) -

monitors privileged role assignments;

- AC-2(7)(b) -
- - AC-2(7)(c) - - AC-2(7)(c)[1] -

defines actions to be taken when privileged role assignments are no longer appropriate; and

-
- - AC-2(7)(c)[2] -

takes organization-defined actions when privileged role assignments are no longer appropriate.

-
- AC-2(7)(c) -
-
- - EXAMINE - -

Access control policy

-

procedures addressing account management

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system-generated list of privileged user accounts and associated role

-

records of actions taken when privileged role assignments are no longer appropriate

-

information system audit records

-

audit tracking and monitoring reports

-

information system monitoring records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with account management responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing account management functions

-

automated mechanisms monitoring privileged role assignments

-
-
-
- - Dynamic Account Creation - - - - AC-2(8) - -

The information system creates dynamically.

-
- -

Dynamic approaches for creating information system accounts (e.g., as implemented within service-oriented architectures) rely on establishing accounts (identities) at run time for entities that were previously unknown. Organizations plan for dynamic creation of information system accounts by establishing trust relationships and mechanisms with the appropriate authorities to validate related authorizations and privileges.

- AC-16 -
- -

Determine if:

- - AC-2(8)[1] -

the organization defines information system accounts to be created by the information system dynamically; and

-
- - AC-2(8)[2] -

the information system creates organization-defined information system accounts dynamically.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing account management

-

information system design documentation

-

information system configuration settings and associated documentation

-

system-generated list of information system accounts

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with account management responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing account management functions

-
-
-
- - Restrictions On Use of Shared / Group Accounts - - - - AC-2(9) - -

The organization only permits the use of shared/group accounts that meet .

-
- -

Determine if the organization:

- - AC-2(9)[1] -

defines conditions for establishing shared/group accounts; and

-
- - AC-2(9)[2] -

only permits the use of shared/group accounts that meet organization-defined conditions for establishing shared/group accounts.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing account management

-

information system design documentation

-

information system configuration settings and associated documentation

-

system-generated list of shared/group accounts and associated role

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with account management responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing management of shared/group accounts

-
-
-
- - Shared / Group Account Credential Termination - AC-2(10) - -

The information system terminates shared/group account credentials when members leave the group.

-
- -

Determine if the information system terminates shared/group account credentials when members leave the group.

-
- - EXAMINE - -

Access control policy

-

procedures addressing account management

-

information system design documentation

-

information system configuration settings and associated documentation

-

account access termination records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with account management responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing account management functions

-
-
-
- - Usage Conditions - - - - - - - AC-2(11) - -

The information system enforces for .

-
- -

Organizations can describe the specific conditions or circumstances under which information system accounts can be used, for example, by restricting usage to certain days of the week, time of day, or specific durations of time.

-
- -

Determine if:

- - AC-2(11)[1] -

the organization defines circumstances and/or usage conditions to be enforced for information system accounts;

-
- - AC-2(11)[2] -

the organization defines information system accounts for which organization-defined circumstances and/or usage conditions are to be enforced; and

-
- - AC-2(11)[3] -

the information system enforces organization-defined circumstances and/or usage conditions for organization-defined information system accounts.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing account management

-

information system design documentation

-

information system configuration settings and associated documentation

-

system-generated list of information system accounts and associated assignments of usage circumstances and/or usage conditions

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with account management responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing account management functions

-
-
-
- - Account Monitoring / Atypical Usage - - - - - - - AC-2(12) - -

The organization:

- - (a) -

Monitors information system accounts for ; and

-
- - (b) -

Reports atypical usage of information system accounts to .

-
-
- -

Atypical usage includes, for example, accessing information systems at certain times of the day and from locations that are not consistent with the normal usage patterns of individuals working in organizations.

- CA-7 -
- -

Determine if the organization:

- - AC-2(12)(a) - - AC-2(12)(a)[1] -

defines atypical usage to be monitored for information system accounts;

-
- - AC-2(12)(a)[2] -

monitors information system accounts for organization-defined atypical usage;

-
- AC-2(12)(a) -
- - AC-2(12)(b) - - AC-2(12)(b)[1] -

defines personnel or roles to whom atypical usage of information system accounts are to be reported; and

-
- - AC-2(12)(b)[2] -

reports atypical usage of information system accounts to organization-defined personnel or roles.

-
- AC-2(12)(b) -
-
- - EXAMINE - -

Access control policy

-

procedures addressing account management

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system monitoring records

-

information system audit records

-

audit tracking and monitoring reports

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with account management responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing account management functions

-
-
-
- - Disable Accounts for High-risk Individuals - - - - AC-2(13) - -

The organization disables accounts of users posing a significant risk within of discovery of the risk.

-
- -

Users posing a significant risk to organizations include individuals for whom reliable evidence or intelligence indicates either the intention to use authorized access to information systems to cause harm or through whom adversaries will cause harm. Harm includes potential adverse impacts to organizational operations and assets, individuals, other organizations, or the Nation. Close coordination between authorizing officials, information system administrators, and human resource managers is essential in order for timely execution of this control enhancement.

- PS-4 -
- -

Determine if the organization:

- - AC-2(13)[1] -

defines the time period within which accounts are disabled upon discovery of a significant risk posed by users of such accounts; and

-
- - AC-2(13)[2] -

disables accounts of users posing a significant risk within the organization-defined time period of discovery of the risk.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing account management

-

information system design documentation

-

information system configuration settings and associated documentation

-

system-generated list of disabled accounts

-

list of user activities posing significant organizational risk

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with account management responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing account management functions

-
-
-
-
- - Access Enforcement - AC-3 - -

The information system enforces approved authorizations for logical access to information and system resources in accordance with applicable access control policies.

-
- -

Access control policies (e.g., identity-based policies, role-based policies, control matrices, cryptography) control access between active entities or subjects (i.e., users or processes acting on behalf of users) and passive entities or objects (e.g., devices, files, records, domains) in information systems. In addition to enforcing authorized access at the information system level and recognizing that information systems can host many applications and services in support of organizational missions and business operations, access enforcement mechanisms can also be employed at the application and service level to provide increased information security.

- AC-2 - AC-4 - AC-5 - AC-6 - AC-16 - AC-17 - AC-18 - AC-19 - AC-20 - AC-21 - AC-22 - AU-9 - CM-5 - CM-6 - CM-11 - MA-3 - MA-4 - MA-5 - PE-3 -
- -

Determine if the information system enforces approved authorizations for logical access to information and system resources in accordance with applicable access control policies.

-
- - EXAMINE - -

Access control policy

-

procedures addressing access enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of approved authorizations (user privileges)

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with access enforcement responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing access control policy

-
-
- - Restricted Access to Privileged Functions - AC-3(1) - Withdrawn - AC-6 - - - Dual Authorization - - - - AC-3(2) - -

The information system enforces dual authorization for .

-
- -

Dual authorization mechanisms require the approval of two authorized individuals in order to execute. Organizations do not require dual authorization mechanisms when immediate responses are necessary to ensure public and environmental safety. Dual authorization may also be known as two-person control.

- CP-9 - MP-6 -
- -

Determine if:

- - AC-3(2)[1] -

the organization defines privileged commands and/or other actions for which dual authorization is to be enforced; and

-
- - AC-3(2)[2] -

the information system enforces dual authorization for organization-defined privileged commands and/or other organization-defined actions.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing access enforcement and dual authorization

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of privileged commands requiring dual authorization

-

list of actions requiring dual authorization

-

list of approved authorizations (user privileges)

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with access enforcement responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Dual authorization mechanisms implementing access control policy

-
-
-
- - Mandatory Access Control - - - - - - - - - - AC-3(3) - -

The information system enforces over all subjects and objects where the policy:

- - (a) -

Is uniformly enforced across all subjects and objects within the boundary of the information system;

-
- - (b) -

Specifies that a subject that has been granted access to information is constrained from doing any of the following;

- - (1) -

Passing the information to unauthorized subjects or objects;

-
- - (2) -

Granting its privileges to other subjects;

-
- - (3) -

Changing one or more security attributes on subjects, objects, the information system, or information system components;

-
- - (4) -

Choosing the security attributes and attribute values to be associated with newly created or modified objects; or

-
- - (5) -

Changing the rules governing access control; and

-
-
- - (c) -

Specifies that may explicitly be granted such that they are not limited by some or all of the above constraints.

-
-
- -

Mandatory access control as defined in this control enhancement is synonymous with nondiscretionary access control, and is not constrained only to certain historical uses (e.g., implementations using the Bell-LaPadula Model). The above class of mandatory access control policies constrains what actions subjects can take with information obtained from data objects for which they have already been granted access, thus preventing the subjects from passing the information to unauthorized subjects and objects. This class of mandatory access control policies also constrains what actions subjects can take with respect to the propagation of access control privileges; that is, a subject with a privilege cannot pass that privilege to other subjects. The policy is uniformly enforced over all subjects and objects to which the information system has control. Otherwise, the access control policy can be circumvented. This enforcement typically is provided via an implementation that meets the reference monitor concept (see AC-25). The policy is bounded by the information system boundary (i.e., once the information is passed outside of the control of the system, additional means may be required to ensure that the constraints on the information remain in effect). The trusted subjects described above are granted privileges consistent with the concept of least privilege (see AC-6). Trusted subjects are only given the minimum privileges relative to the above policy necessary for satisfying organizational mission/business needs. The control is most applicable when there is some policy mandate (e.g., law, Executive Order, directive, or regulation) that establishes a policy regarding access to sensitive/classified information and some users of the information system are not authorized access to all sensitive/classified information resident in the information system. This control can operate in conjunction with AC-3 (4). A subject that is constrained in its operation by policies governed by this control is still able to operate under the less rigorous constraints of AC-3 (4), but policies governed by this control take precedence over the less rigorous constraints of AC-3 (4). For example, while a mandatory access control policy imposes a constraint preventing a subject from passing information to another subject operating at a different sensitivity label, AC-3 (4) permits the subject to pass the information to any subject with the same sensitivity label as the subject.

- AC-25 - SC-11 -
- -

Determine if:

- - AC-3(3)[1] -

the organization defines mandatory access control policies to be enforced over all subjects and objects;

-
- - AC-3(3)[2] -

the organization defines subjects over which organization-defined mandatory access control policies are to be enforced;

-
- - AC-3(3)[3] -

the organization defines objects over which organization-defined mandatory access control policies are to be enforced;

-
- - AC-3(3)[4] -

the organization defines subjects that may explicitly be granted privileges such that they are not limited by the constraints specified elsewhere within this control;

-
- - AC-3(3)[5] -

the organization defines privileges that may be granted to organization-defined subjects;

-
- - AC-3(3)[6] -

the information system enforces organization-defined mandatory access control policies over all subjects and objects where the policy specifies that:

- - AC-3(3)[6](a) -

the policy is uniformly enforced across all subjects and objects within the boundary of the information system;

- AC-3(3)(a) -
- - AC-3(3)[6](b) -

a subject that has been granted access to information is constrained from doing any of the following:

- - AC-3(3)[6](b)(1) -

passing the information to unauthorized subjects or objects;

- AC-3(3)(b)(1) -
- - AC-3(3)[6](b)(2) -

granting its privileges to other subjects;

- AC-3(3)(b)(2) -
- - AC-3(3)[6](b)(3) -

changing one or more security attributes on:

- - AC-3(3)[6](b)(3)[a] -

subjects;

-
- - AC-3(3)[6](b)(3)[b] -

objects;

-
- - AC-3(3)[6](b)(3)[c] -

the information system; or

-
- - AC-3(3)[6](b)(3)[d] -

system components;

-
- AC-3(3)(b)(3) -
- - AC-3(3)[6](b)(4) -

choosing the security attributes and attribute values to be associated with newly created or modified objects; or

- AC-3(3)(b)(4) -
- - AC-3(3)[6](b)(5) -

changing the rules governing access control; and

- AC-3(3)(b)(5) -
- AC-3(3)(b) -
- - AC-3(3)[6](c) -

organization-defined subjects may explicitly be granted organization-defined privileges such that they are not limited by some or all of the above constraints.

- AC-3(3)(c) -
-
-
- - EXAMINE - -

Access control policy

-

mandatory access control policies

-

procedures addressing access enforcement

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of subjects and objects (i.e., users and resources) requiring enforcement of mandatory access control policies

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with access enforcement responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing mandatory access control

-
-
-
- - Discretionary Access Control - - - - AC-3(4) - -

The information system enforces over defined subjects and objects where the policy specifies that a subject that has been granted access to information can do one or more of the following:

- - (a) -

Pass the information to any other subjects or objects;

-
- - (b) -

Grant its privileges to other subjects;

-
- - (c) -

Change security attributes on subjects, objects, the information system, or the information system’s components;

-
- - (d) -

Choose the security attributes to be associated with newly created or revised objects; or

-
- - (e) -

Change the rules governing access control.

-
-
- -

When discretionary access control policies are implemented, subjects are not constrained with regard to what actions they can take with information for which they have already been granted access. Thus, subjects that have been granted access to information are not prevented from passing (i.e., the subjects have the discretion to pass) the information to other subjects or objects. This control enhancement can operate in conjunction with AC-3 (3). A subject that is constrained in its operation by policies governed by AC-3 (3) is still able to operate under the less rigorous constraints of this control enhancement. Thus, while AC-3 (3) imposes constraints preventing a subject from passing information to another subject operating at a different sensitivity level, AC-3 (4) permits the subject to pass the information to any subject at the same sensitivity level. The policy is bounded by the information system boundary. Once the information is passed outside of the control of the information system, additional means may be required to ensure that the constraints remain in effect. While the older, more traditional definitions of discretionary access control require identity-based access control, that limitation is not required for this use of discretionary access control.

-
- -

Determine if:

- - AC-3(4)[1] -

the organization defines discretionary access control policies to be enforced over defined subjects and objects;

-
- - AC-3(4)[2] -

the information system enforces organization-defined discretionary access control policies over defined subjects and objects where the policy specifies that a subject has been granted access to information and can do one or more of the following:

- - AC-3(4)[2](a) -

pass the information to any other subjects or objects;

- AC-3(4)(a) -
- - AC-3(4)[2](b) -

grant its privileges to other subjects;

- AC-3(4)(b) -
- - AC-3(4)[2](c) -

change security attributes on:

- - AC-3(4)[2](c)[a] -

subjects,

-
- - AC-3(4)[2](c)[b] -

objects,

-
- - AC-3(4)[2](c)[c] -

the information system, or

-
- - AC-3(4)[2](c)[d] -

the information system’s components;

-
- AC-3(4)(c) -
- - AC-3(4)[2](d) -

choose the security attributes to be associated with newly created or revised objects; or

- AC-3(4)(d) -
- - AC-3(4)[2](e) -

change the rules governing access control.

- AC-3(4)(e) -
-
-
- - EXAMINE - -

Access control policy

-

discretionary access control policies

-

procedures addressing access enforcement

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of subjects and objects (i.e., users and resources) requiring enforcement of discretionary access control policies

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with access enforcement responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing discretionary access control policy

-
-
-
- - Security-relevant Information - - - - AC-3(5) - -

The information system prevents access to except during secure, non-operable system states.

-
- -

Security-relevant information is any information within information systems that can potentially impact the operation of security functions or the provision of security services in a manner that could result in failure to enforce system security policies or maintain the isolation of code and data. Security-relevant information includes, for example, filtering rules for routers/firewalls, cryptographic key management information, configuration parameters for security services, and access control lists. Secure, non-operable system states include the times in which information systems are not performing mission/business-related processing (e.g., the system is off-line for maintenance, troubleshooting, boot-up, shut down).

- CM-3 -
- -

Determine if:

- - AC-3(5)[1] -

the organization defines security-relevant information to which the information system prevents access except during secure, non-operable system states; and

-
- - AC-3(5)[2] -

the information system prevents access to organization-defined security-relevant information except during secure, non-operable system states.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing access enforcement

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with access enforcement responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms preventing access to security-relevant information within the information system

-
-
-
- - Protection of User and System Information - AC-3(6) - Withdrawn - MP-4 - SC-28 - - - Role-based Access Control - - - - AC-3(7) - -

The information system enforces a role-based access control policy over defined subjects and objects and controls access based upon .

-
- -

Role-based access control (RBAC) is an access control policy that restricts information system access to authorized users. Organizations can create specific roles based on job functions and the authorizations (i.e., privileges) to perform needed operations on organizational information systems associated with the organization-defined roles. When users are assigned to the organizational roles, they inherit the authorizations or privileges defined for those roles. RBAC simplifies privilege administration for organizations because privileges are not assigned directly to every user (which can be a significant number of individuals for mid- to large-size organizations) but are instead acquired through role assignments. RBAC can be implemented either as a mandatory or discretionary form of access control. For organizations implementing RBAC with mandatory access controls, the requirements in AC-3 (3) define the scope of the subjects and objects covered by the policy.

-
- -

Determine if:

- - AC-3(7)[1] -

the organization defines roles to control information system access;

-
- - AC-3(7)[2] -

the organization defines users authorized to assume the organization-defined roles;

-
- - AC-3(7)[3] -

the information system controls access based on organization-defined roles and users authorized to assume such roles;

-
- - AC-3(7)[4] -

the information system enforces a role-based access control policy over defined:

- - AC-3(7)[4][a] -

subjects, and

-
- - AC-3(7)[4][b] -

objects.

-
-
-
- - EXAMINE - -

Access control policy

-

role-based access control policies

-

procedures addressing access enforcement

-

security plan, information system design documentation

-

information system configuration settings and associated documentation

-

list of roles, users, and associated privileges required to control information system access

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with access enforcement responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing role-based access control policy

-
-
-
- - Revocation of Access Authorizations - - - - AC-3(8) - -

The information system enforces the revocation of access authorizations resulting from changes to the security attributes of subjects and objects based on .

-
- -

Revocation of access rules may differ based on the types of access revoked. For example, if a subject (i.e., user or process) is removed from a group, access may not be revoked until the next time the object (e.g., file) is opened or until the next time the subject attempts a new access to the object. Revocation based on changes to security labels may take effect immediately. Organizations can provide alternative approaches on how to make revocations immediate if information systems cannot provide such capability and immediate revocation is necessary.

-
- -

Determine if:

- - AC-3(8)[1] -

the organization defines rules governing the timing of revocations of access authorizations; and

-
- - AC-3(8)[2] -

the information system enforces the revocation of access authorizations resulting from changes to the security attributes of subjects and objects based on organization-defined rules governing the timing of revocations of access authorizations.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing access enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

rules governing revocation of access authorizations, information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with access enforcement responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing access enforcement functions

-
-
-
- - Controlled Release - - - - - - - - - - AC-3(9) - -

The information system does not release information outside of the established system boundary unless:

- - (a) -

The receiving provides ; and

-
- - (b) -

- are used to validate the appropriateness of the information designated for release.

-
-
- -

Information systems can only protect organizational information within the confines of established system boundaries. Additional security safeguards may be needed to ensure that such information is adequately protected once it is passed beyond the established information system boundaries. Examples of information leaving the system boundary include transmitting information to an external information system or printing the information on one of its printers. In cases where the information system is unable to make a determination of the adequacy of the protections provided by entities outside its boundary, as a mitigating control, organizations determine procedurally whether the external information systems are providing adequate security. The means used to determine the adequacy of the security provided by external information systems include, for example, conducting inspections or periodic testing, establishing agreements between the organization and its counterpart organizations, or some other process. The means used by external entities to protect the information received need not be the same as those used by the organization, but the means employed are sufficient to provide consistent adjudication of the security policy to protect the information. This control enhancement requires information systems to employ technical or procedural means to validate the information prior to releasing it to external systems. For example, if the information system passes information to another system controlled by another organization, technical means are employed to validate that the security attributes associated with the exported information are appropriate for the receiving system. Alternatively, if the information system passes information to a printer in organization-controlled space, procedural means can be employed to ensure that only appropriately authorized individuals gain access to the printer. This control enhancement is most applicable when there is some policy mandate (e.g., law, Executive Order, directive, or regulation) that establishes policy regarding access to the information, and that policy applies beyond the realm of a particular information system or organization.

-
- -

Determine if:

- - AC-3(9)[1] -

the organization defines the information system or system component authorized to receive information released outside of the established system boundary of the information system releasing such information;

-
- - AC-3(9)[2] -

the organization defines security safeguards to be provided by organization-defined information system or system component receiving information released from an information system outside of the established system boundary;

-
- - AC-3(9)[3] -

the organization defines security safeguards to be used to validate the appropriateness of the information designated for release;

-
- - AC-3(9)[4] -

the information system does not release information outside of the established system boundary unless:

- - AC-3(9)[4](a) -

the receiving organization-defined information system or system component provides organization-defined security safeguards; and

- AC-3(9)(a) -
- - AC-3(9)[4](b) -

the organization-defined security safeguards are used to validate the appropriateness of the information designated for release.

- AC-3(9)(b) -
-
-
- - EXAMINE - -

Access control policy

-

procedures addressing access enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of security safeguards provided by receiving information system or system components

-

list of security safeguards validating appropriateness of information designated for release

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with access enforcement responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing access enforcement functions

-
-
-
- - Audited Override of Access Control Mechanisms - - - - AC-3(10) - -

The organization employs an audited override of automated access control mechanisms under .

-
- - AU-2 - AU-6 - - -

Determine if the organization:

- - AC-3(10)[1] -

defines conditions under which to employ an audited override of automated access control mechanisms; and

-
- - AC-3(10)[2] -

employs an audited override of automated access control mechanisms under organization-defined conditions.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing access enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

conditions for employing audited override of automated access control mechanisms

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with access enforcement responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing access enforcement functions

-
-
-
-
- - Information Flow Enforcement - - - - AC-4 - -

The information system enforces approved authorizations for controlling the flow of information within the system and between interconnected systems based on .

-
- -

Information flow control regulates where information is allowed to travel within an information system and between information systems (as opposed to who is allowed to access the information) and without explicit regard to subsequent accesses to that information. Flow control restrictions include, for example, keeping export-controlled information from being transmitted in the clear to the Internet, blocking outside traffic that claims to be from within the organization, restricting web requests to the Internet that are not from the internal web proxy server, and limiting information transfers between organizations based on data structures and content. Transferring information between information systems representing different security domains with different security policies introduces risk that such transfers violate one or more domain security policies. In such situations, information owners/stewards provide guidance at designated policy enforcement points between interconnected systems. Organizations consider mandating specific architectural solutions when required to enforce specific security policies. Enforcement includes, for example: (i) prohibiting information transfers between interconnected systems (i.e., allowing access only); (ii) employing hardware mechanisms to enforce one-way information flows; and (iii) implementing trustworthy regrading mechanisms to reassign security attributes and security labels. -Organizations commonly employ information flow control policies and enforcement mechanisms to control the flow of information between designated sources and destinations (e.g., networks, individuals, and devices) within information systems and between interconnected systems. Flow control is based on the characteristics of the information and/or the information path. Enforcement occurs, for example, in boundary protection devices (e.g., gateways, routers, guards, encrypted tunnels, firewalls) that employ rule sets or establish configuration settings that restrict information system services, provide a packet-filtering capability based on header information, or message-filtering capability based on message content (e.g., implementing key word searches or using document characteristics). Organizations also consider the trustworthiness of filtering/inspection mechanisms (i.e., hardware, firmware, and software components) that are critical to information flow enforcement. Control enhancements 3 through 22 primarily address cross-domain solution needs which focus on more advanced filtering techniques, in-depth analysis, and stronger flow enforcement mechanisms implemented in cross-domain products, for example, high-assurance guards. Such capabilities are generally not available in commercial off-the-shelf information technology products.

- AC-3 - AC-17 - AC-19 - AC-21 - CM-6 - CM-7 - SA-8 - SC-2 - SC-5 - SC-7 - SC-18 -
- -

Determine if:

- - AC-4[1] -

the organization defines information flow control policies to control the flow of information within the system and between interconnected systems; and

-
- - AC-4[2] -

the information system enforces approved authorizations for controlling the flow of information within the system and between interconnected systems based on organization-defined information flow control policies.

-
-
- - EXAMINE - -

Access control policy

-

information flow control policies

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system baseline configuration

-

list of information flow authorizations

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement policy

-
-
- - Object Security Attributes - - - - - - - - - - AC-4(1) - -

The information system uses associated with to enforce as a basis for flow control decisions.

-
- -

Information flow enforcement mechanisms compare security attributes associated with information (data content and data structure) and source/destination objects, and respond appropriately (e.g., block, quarantine, alert administrator) when the mechanisms encounter information flows not explicitly allowed by information flow policies. For example, an information object labeled Secret would be allowed to flow to a destination object labeled Secret, but an information object labeled Top Secret would not be allowed to flow to a destination object labeled Secret. Security attributes can also include, for example, source and destination addresses employed in traffic filter firewalls. Flow enforcement using explicit security attributes can be used, for example, to control the release of certain types of information.

- AC-16 -
- -

Determine if:

- - AC-4(1)[1] -

the organization defines information flow control policies as a basis for flow control decisions;

-
- - AC-4(1)[2] -

the organization defines security attributes to be associated with information, source, and destination objects;

-
- - AC-4(1)[3] -

the organization defines the following objects to be associated with organization-defined security attributes:

- - AC-4(1)[3][a] -

information;

-
- - AC-4(1)[3][b] -

source;

-
- - AC-4(1)[3][c] -

destination; and

-
-
- - AC-4(1)[4] -

the information system uses organization-defined security attributes associated with organization-defined information, source, and destination objects to enforce organization-defined information flow control policies as a basis for flow control decisions.

-
-
- - EXAMINE - -

Access control policy

-

information flow control policies

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of security attributes and associated information, source, and destination objects enforcing information flow control policies

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement policy

-
-
-
- - Processing Domains - - - - AC-4(2) - -

The information system uses protected processing domains to enforce as a basis for flow control decisions.

-
- -

Within information systems, protected processing domains are processing spaces that have controlled interactions with other processing spaces, thus enabling control of information flows between these spaces and to/from data/information objects. A protected processing domain can be provided, for example, by implementing domain and type enforcement. In domain and type enforcement, information system processes are assigned to domains; information is identified by types; and information flows are controlled based on allowed information accesses (determined by domain and type), allowed signaling among domains, and allowed process transitions to other domains.

-
- -

Determine if:

- - AC-4(2)[1] -

the organization defines information flow control policies as a basis for flow control decisions; and

-
- - AC-4(2)[2] -

the information system uses protected processing domains to enforce organization-defined information flow control policies as a basis for flow control decisions.

-
-
- - EXAMINE - -

Access control policy

-

information flow control policies

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system security architecture and associated documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement policy

-
-
-
- - Dynamic Information Flow Control - - - - AC-4(3) - -

The information system enforces dynamic information flow control based on .

-
- -

Organizational policies regarding dynamic information flow control include, for example, allowing or disallowing information flows based on changing conditions or mission/operational considerations. Changing conditions include, for example, changes in organizational risk tolerance due to changes in the immediacy of mission/business needs, changes in the threat environment, and detection of potentially harmful or adverse events.

- SI-4 -
- -

Determine if:

- - AC-4(3)[1] -

the organization defines policies to enforce dynamic information flow control; and

-
- - AC-4(3)[2] -

the information system enforces dynamic information flow control based on organization-defined policies.

-
-
- - EXAMINE - -

Access control policy

-

information flow control policies

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system security architecture and associated documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement policy

-
-
-
- - Content Check Encrypted Information - - - - - - - AC-4(4) - -

The information system prevents encrypted information from bypassing content-checking mechanisms by .

-
- - SI-4 - - -

Determine if:

- - AC-4(4)[1] -

the organization defines a procedure or method to be employed to prevent encrypted information from bypassing content-checking mechanisms;

-
- - AC-4(4)[2] -

the information system prevents encrypted information from bypassing content-checking mechanisms by doing one or more of the following:

- - AC-4(4)[2][a] -

decrypting the information;

-
- - AC-4(4)[2][b] -

blocking the flow of the encrypted information;

-
- - AC-4(4)[2][c] -

terminating communications sessions attempting to pass encrypted information; and/or

-
- - AC-4(4)[2][d] -

employing the organization-defined procedure or method.

-
-
-
- - EXAMINE - -

Access control policy

-

information flow control policies

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement policy

-
-
-
- - Embedded Data Types - - - - AC-4(5) - -

The information system enforces on embedding data types within other data types.

-
- -

Embedding data types within other data types may result in reduced flow control effectiveness. Data type embedding includes, for example, inserting executable files as objects within word processing files, inserting references or descriptive information into a media file, and compressed or archived data types that may include multiple embedded data types. Limitations on data type embedding consider the levels of embedding and prohibit levels of data type embedding that are beyond the capability of the inspection tools.

-
- -

Determine if:

- - AC-4(5)[1] -

the organization defines limitations to be enforced on embedding data types within other data types; and

-
- - AC-4(5)[2] -

the information system enforces organization-defined limitations on embedding data types within other data types.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of limitations to be enforced on embedding data types within other data types

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement policy

-
-
-
- - Metadata - - - - AC-4(6) - -

The information system enforces information flow control based on .

-
- -

Metadata is information used to describe the characteristics of data. Metadata can include structural metadata describing data structures (e.g., data format, syntax, and semantics) or descriptive metadata describing data contents (e.g., age, location, telephone number). Enforcing allowed information flows based on metadata enables simpler and more effective flow control. Organizations consider the trustworthiness of metadata with regard to data accuracy (i.e., knowledge that the metadata values are correct with respect to the data), data integrity (i.e., protecting against unauthorized changes to metadata tags), and the binding of metadata to the data payload (i.e., ensuring sufficiently strong binding techniques with appropriate levels of assurance).

- AC-16 - SI-7 -
- -

Determine if:

- - AC-4(6)[1] -

the organization defines metadata to be used as a means of enforcing information flow control; and

-
- - AC-4(6)[2] -

the information system enforces information flow control based on organization-defined metadata.

-
-
- - EXAMINE - -

Access control policy

-

information flow control policies

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

types of metadata used to enforce information flow control decisions

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement policy

-
-
-
- - One-way Flow Mechanisms - - - - AC-4(7) - -

The information system enforces using hardware mechanisms.

-
- -

Determine if:

- - AC-4(7)[1] -

the organization defines one-way information flows to be enforced by the information system; and

-
- - AC-4(7)[2] -

the information system enforces organization-defined one-way information flows using hardware mechanisms.

-
-
- - EXAMINE - -

Access control policy

-

information flow control policies

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system hardware mechanisms and associated configurations

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Hardware mechanisms implementing information flow enforcement policy

-
-
-
- - Security Policy Filters - - - - - - - AC-4(8) - -

The information system enforces information flow control using as a basis for flow control decisions for .

-
- -

Organization-defined security policy filters can address data structures and content. For example, security policy filters for data structures can check for maximum file lengths, maximum field sizes, and data/file types (for structured and unstructured data). Security policy filters for data content can check for specific words (e.g., dirty/clean word filters), enumerated values or data value ranges, and hidden content. Structured data permits the interpretation of data content by applications. Unstructured data typically refers to digital information without a particular data structure or with a data structure that does not facilitate the development of rule sets to address the particular sensitivity of the information conveyed by the data or the associated flow enforcement decisions. Unstructured data consists of: (i) bitmap objects that are inherently non language-based (i.e., image, video, or audio files); and (ii) textual objects that are based on written or printed languages (e.g., commercial off-the-shelf word processing documents, spreadsheets, or emails). Organizations can implement more than one security policy filter to meet information flow control objectives (e.g., employing clean word lists in conjunction with dirty word lists may help to reduce false positives).

-
- -

Determine if:

- - AC-4(8)[1] -

the organization defines security policy filters to be used as a basis for enforcing flow control decisions;

-
- - AC-4(8)[2] -

the organization defines information flows for which flow control decisions are to be applied and enforced; and

-
- - AC-4(8)[3] -

the information system enforces information flow control using organization-defined security policy filters as a basis for flow control decisions for organization-defined information flows.

-
-
- - EXAMINE - -

Access control policy

-

information flow control policies

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of security policy filters regulating flow control decisions

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement policy

-
-
-
- - Human Reviews - - - - - - - AC-4(9) - -

The information system enforces the use of human reviews for under the following conditions: .

-
- -

Organizations define security policy filters for all situations where automated flow control decisions are possible. When a fully automated flow control decision is not possible, then a human review may be employed in lieu of, or as a complement to, automated security policy filtering. Human reviews may also be employed as deemed necessary by organizations.

-
- -

Determine if:

- - AC-4(9)[1] -

the organization defines information flows requiring the use of human reviews;

-
- - AC-4(9)[2] -

the organization defines conditions under which the use of human reviews for organization-defined information flows is to be enforced; and

-
- - AC-4(9)[3] -

the information system enforces the use of human reviews for organization-defined information flows under organization-defined conditions.

-
-
- - EXAMINE - -

Access control policy

-

information flow control policies

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

records of human reviews regarding information flows

-

list of conditions requiring human reviews for information flows

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with information flow enforcement responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms enforcing the use of human reviews

-
-
-
- - Enable / Disable Security Policy Filters - - - - - - - AC-4(10) - -

The information system provides the capability for privileged administrators to enable/disable under the following conditions: .

-
- -

For example, as allowed by the information system authorization, administrators can enable security policy filters to accommodate approved data types.

-
- -

Determine if:

- - AC-4(10)[1] -

the organization defines security policy filters that privileged administrators have the capability to enable/disable;

-
- - AC-4(10)[2] -

the organization-defined conditions under which privileged administrators have the capability to enable/disable organization-defined security policy filters; and

-
- - AC-4(10)[3] -

the information system provides the capability for privileged administrators to enable/disable organization-defined security policy filters under organization-defined conditions.

-
-
- - EXAMINE - -

Access control policy

-

information flow information policies

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of security policy filters enabled/disabled by privileged administrators

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for enabling/disabling security policy filters

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement policy

-
-
-
- - Configuration of Security Policy Filters - - - - AC-4(11) - -

The information system provides the capability for privileged administrators to configure to support different security policies.

-
- -

For example, to reflect changes in security policies, administrators can change the list of “dirty words” that security policy mechanisms check in accordance with the definitions provided by organizations.

-
- -

Determine if:

- - AC-4(11)[1] -

the organization defines security policy filters that privileged administrators have the capability to configure to support different security policies; and

-
- - AC-4(11)[2] -

the information system provides the capability for privileged administrators to configure organization-defined security policy filters to support different security policies.

-
-
- - EXAMINE - -

Access control policy

-

information flow control policies

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of security policy filters

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for configuring security policy filters

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement policy

-
-
-
- - Data Type Identifiers - - - - AC-4(12) - -

The information system, when transferring information between different security domains, uses to validate data essential for information flow decisions.

-
- -

Data type identifiers include, for example, filenames, file types, file signatures/tokens, and multiple internal file signatures/tokens. Information systems may allow transfer of data only if compliant with data type format specifications.

-
- -

Determine if:

- - AC-4(12)[1] -

the organization defines data type identifiers to be used, when transferring information between different security domains, to validate data essential for information flow decisions; and

-
- - AC-4(12)[2] -

the information system, when transferring information between different security domains, uses organization-defined data type identifiers to validate data essential for information flow decisions.

-
-
- - EXAMINE - -

Access control policy

-

information flow control policies

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of data type identifiers

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement policy

-
-
-
- - Decomposition into Policy-relevant Subcomponents - - - - AC-4(13) - -

The information system, when transferring information between different security domains, decomposes information into for submission to policy enforcement mechanisms.

-
- -

Policy enforcement mechanisms apply filtering, inspection, and/or sanitization rules to the policy-relevant subcomponents of information to facilitate flow enforcement prior to transferring such information to different security domains. Parsing transfer files facilitates policy decisions on source, destination, certificates, classification, attachments, and other security-related component differentiators.

-
- -

Determine if:

- - AC-4(13)[1] -

the organization defines policy-relevant subcomponents to decompose information for submission to policy enforcement mechanisms when transferring such information between different security domains; and

-
- - AC-4(13)[2] -

the information system, when transferring information between different security domains, decomposes information into organization-defined policy-relevant subcomponents for submission to policy enforcement mechanisms.

-
-
- - EXAMINE - -

Access control policy

-

information flow control policies

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement policy

-
-
-
- - Security Policy Filter Constraints - - - - AC-4(14) - -

The information system, when transferring information between different security domains, implements requiring fully enumerated formats that restrict data structure and content.

-
- -

Data structure and content restrictions reduce the range of potential malicious and/or unsanctioned content in cross-domain transactions. Security policy filters that restrict data structures include, for example, restricting file sizes and field lengths. Data content policy filters include, for example: (i) encoding formats for character sets (e.g., Universal Character Set Transformation Formats, American Standard Code for Information Interchange); (ii) restricting character data fields to only contain alpha-numeric characters; (iii) prohibiting special characters; and (iv) validating schema structures.

-
- -

Determine if:

- - AC-4(14)[1] -

the organization defines security policy filters to be implemented that require fully enumerated formats restricting data structure and content when transferring information between different security domains; and

-
- - AC-4(14)[2] -

the information system, when transferring information between different security domains, implements organization-defined security policy filters requiring fully enumerated formats that restrict data structure and content.

-
-
- - EXAMINE - -

Access control policy

-

information flow control policies

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of security policy filters

-

list of data content policy filters

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement policy

-
-
-
- - Detection of Unsanctioned Information - - - - - - - AC-4(15) - -

The information system, when transferring information between different security domains, examines the information for the presence of and prohibits the transfer of such information in accordance with the .

-
- -

Detection of unsanctioned information includes, for example, checking all information to be transferred for malicious code and dirty words.

- SI-3 -
- -

Determine if:

- - AC-4(15)[1] -

the organization defines unsanctioned information to be detected when transferring information between different security domains;

-
- - AC-4(15)[2] -

the organization defines the security policy that requires the transfer of organization-defined unsanctioned information between different security domains to be prohibited when the presence of such information is detected; and

-
- - AC-4(15)[3] -

the information system, when transferring information between different security domains, examines the information for the presence of organization-defined unsanctioned information and prohibits the transfer of such information in accordance with the organization-defined security policy.

-
-
- - EXAMINE - -

Access control policy

-

information flow control policies

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of unsanctioned information types and associated information

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement policy

-
-
-
- - Information Transfers On Interconnected Systems - AC-4(16) - Withdrawn - AC-4 - - - Domain Authentication - - - - AC-4(17) - -

The information system uniquely identifies and authenticates source and destination points by for information transfer.

-
- -

Attribution is a critical component of a security concept of operations. The ability to identify source and destination points for information flowing in information systems, allows the forensic reconstruction of events when required, and encourages policy compliance by attributing policy violations to specific organizations/individuals. Successful domain authentication requires that information system labels distinguish among systems, organizations, and individuals involved in preparing, sending, receiving, or disseminating information.

- IA-2 - IA-3 - IA-4 - IA-5 -
- -

Determine if the information system uniquely identifies and authenticates:

- - AC-4(17)[1] - - AC-4(17)[1][a] -

source points for information transfer;

-
- - AC-4(17)[1][b] -

destination points for information transfer;

-
-
- - AC-4(17)[2] -

by one or more of the following:

- - AC-4(17)[2][a] -

organization;

-
- - AC-4(17)[2][b] -

system;

-
- - AC-4(17)[2][c] -

application; and/or

-
- - AC-4(17)[2][d] -

individual.

-
-
-
- - EXAMINE - -

Access control policy

-

information flow control policies

-

procedures addressing information flow enforcement

-

procedures addressing source and destination domain identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement policy

-
-
-
- - Security Attribute Binding - - - - AC-4(18) - -

The information system binds security attributes to information using to facilitate information flow policy enforcement.

-
- -

Binding techniques implemented by information systems affect the strength of security attribute binding to information. Binding strength and the assurance associated with binding techniques play an important part in the trust organizations have in the information flow enforcement process. The binding techniques affect the number and degree of additional reviews required by organizations.

- AC-16 - SC-16 -
- -

Determine if:

- - AC-4(18)[1] -

the organization defines binding techniques to be used to facilitate information flow policy enforcement; and

-
- - AC-4(18)[2] -

the information system binds security attributes to information using organization-defined binding techniques to facilitate information flow policy enforcement.

-
-
- - EXAMINE - -

Information flow enforcement policy

-

information flow control policies

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of binding techniques to bind security attributes to information

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information flow enforcement responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement functions

-
-
-
- - Validation of Metadata - AC-4(19) - -

The information system, when transferring information between different security domains, applies the same security policy filtering to metadata as it applies to data payloads.

-
- -

This control enhancement requires the validation of metadata and the data to which the metadata applies. Some organizations distinguish between metadata and data payloads (i.e., only the data to which the metadata is bound). Other organizations do not make such distinctions, considering metadata and the data to which the metadata applies as part of the payload. All information (including metadata and the data to which the metadata applies) is subject to filtering and inspection.

-
- -

Determine if the information system, when transferring information between different security domains, applies the same security policy filtering to metadata as it applies to data payloads.

-
- - EXAMINE - -

Information flow enforcement policy

-

information flow control policies

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of security policy filtering criteria applied to metadata and data payloads

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information flow enforcement responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement functions

-
-
-
- - Approved Solutions - - - - - - - AC-4(20) - -

The organization employs to control the flow of across security domains.

-
- -

Organizations define approved solutions and configurations in cross-domain policies and guidance in accordance with the types of information flows across classification boundaries. The Unified Cross Domain Management Office (UCDMO) provides a baseline listing of approved cross-domain solutions.

-
- -

Determine if the organization:

- - AC-4(20)[1] -

defines solutions in approved configurations to control the flow of information across security domains;

-
- - AC-4(20)[2] -

defines information for which organization-defined solutions in approved configurations are to be employed to control the flow of such information across security domains; and

-
- - AC-4(20)[3] -

employs organization-defined solutions in approved configurations to control the flow of organization-defined information across security domains.

-
-
- - EXAMINE - -

Information flow enforcement policy

-

information flow control policies

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of solutions in approved configurations

-

approved configuration baselines

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information flow enforcement responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement functions

-
-
-
- - Physical / Logical Separation of Information Flows - - - - - - - AC-4(21) - -

The information system separates information flows logically or physically using to accomplish .

-
- -

Enforcing the separation of information flows by type can enhance protection by ensuring that information is not commingled while in transit and by enabling flow control by transmission paths perhaps not otherwise achievable. Types of separable information include, for example, inbound and outbound communications traffic, service requests and responses, and information of differing security categories.

-
- -

Determine if:

- - AC-4(21)[1] -

the organization defines the required separations of information flows by types of information;

-
- - AC-4(21)[2] -

the organization defines the mechanisms and/or techniques to be used to separate information flows logically or physically; and

-
- - AC-4(21)[3] -

the information system separates information flows logically or physically using organization-defined mechanisms and/or techniques to accomplish organization-defined required separations by types of information.

-
-
- - EXAMINE - -

Information flow enforcement policy

-

information flow control policies

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of required separation of information flows by information types

-

list of mechanisms and/or techniques used to logically or physically separate information flows

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information flow enforcement responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement functions

-
-
-
- - Access Only - AC-4(22) - -

The information system provides access from a single device to computing platforms, applications, or data residing on multiple different security domains, while preventing any information flow between the different security domains.

-
- -

The information system, for example, provides a desktop for users to access each connected security domain without providing any mechanisms to allow transfer of information between the different security domains.

-
- -

Determine if the information system provides access from a single device to computing platforms, applications, or data residing on multiple different security domains, while preventing any information flow between the different security domains.

-
- - EXAMINE - -

Information flow enforcement policy

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information flow enforcement responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing information flow enforcement functions

-
-
-
-
- - Separation of Duties - - - - AC-5 - -

The organization:

- - a. -

Separates ;

-
- - b. -

Documents separation of duties of individuals; and

-
- - c. -

Defines information system access authorizations to support separation of duties.

-
-
- -

Separation of duties addresses the potential for abuse of authorized privileges and helps to reduce the risk of malevolent activity without collusion. Separation of duties includes, for example: (i) dividing mission functions and information system support functions among different individuals and/or roles; (ii) conducting information system support functions with different individuals (e.g., system management, programming, configuration management, quality assurance and testing, and network security); and (iii) ensuring security personnel administering access control functions do not also administer audit functions.

- AC-3 - AC-6 - PE-3 - PE-4 - PS-2 -
- -

Determine if the organization:

- - AC-5(a) - - AC-5(a)[1] -

defines duties of individuals to be separated;

-
- - AC-5(a)[2] -

separates organization-defined duties of individuals;

-
-
- - AC-5(b) -

documents separation of duties; and

-
- - AC-5(c) -

defines information system access authorizations to support separation of duties.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing divisions of responsibility and separation of duties

-

information system configuration settings and associated documentation

-

list of divisions of responsibility and separation of duties

-

information system access authorizations

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for defining appropriate divisions of responsibility and separation of duties

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms implementing separation of duties policy

-
-
-
- - Least Privilege - AC-6 - -

The organization employs the principle of least privilege, allowing only authorized accesses for users (or processes acting on behalf of users) which are necessary to accomplish assigned tasks in accordance with organizational missions and business functions.

-
- -

Organizations employ least privilege for specific duties and information systems. The principle of least privilege is also applied to information system processes, ensuring that the processes operate at privilege levels no higher than necessary to accomplish required organizational missions/business functions. Organizations consider the creation of additional processes, roles, and information system accounts as necessary, to achieve least privilege. Organizations also apply least privilege to the development, implementation, and operation of organizational information systems.

- AC-2 - AC-3 - AC-5 - CM-6 - CM-7 - PL-2 -
- -

Determine if the organization employs the principle of least privilege, allowing only authorized access for users (and processes acting on behalf of users) which are necessary to accomplish assigned tasks in accordance with organizational missions and business functions.

-
- - EXAMINE - -

Access control policy

-

procedures addressing least privilege

-

list of assigned access authorizations (user privileges)

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for defining least privileges necessary to accomplish specified tasks

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms implementing least privilege functions

-
-
- - Authorize Access to Security Functions - - - - AC-6(1) - -

The organization explicitly authorizes access to .

-
- -

Security functions include, for example, establishing system accounts, configuring access authorizations (i.e., permissions, privileges), setting events to be audited, and setting intrusion detection parameters. Security-relevant information includes, for example, filtering rules for routers/firewalls, cryptographic key management information, configuration parameters for security services, and access control lists. Explicitly authorized personnel include, for example, security administrators, system and network administrators, system security officers, system maintenance personnel, system programmers, and other privileged users.

- AC-17 - AC-18 - AC-19 -
- -

Determine if the organization:

- - AC-6(1)[1] -

defines security-relevant information for which access must be explicitly authorized;

-
- - AC-6(1)[2] -

defines security functions deployed in:

- - AC-6(1)[2][a] -

hardware;

-
- - AC-6(1)[2][b] -

software;

-
- - AC-6(1)[2][c] -

firmware;

-
-
- - AC-6(1)[3] -

explicitly authorizes access to:

- - AC-6(1)[3][a] -

organization-defined security functions; and

-
- - AC-6(1)[3][b] -

security-relevant information.

-
-
-
- - EXAMINE - -

Access control policy

-

procedures addressing least privilege

-

list of security functions (deployed in hardware, software, and firmware) and security-relevant information for which access must be explicitly authorized

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for defining least privileges necessary to accomplish specified tasks

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms implementing least privilege functions

-
-
-
- - Non-privileged Access for Nonsecurity Functions - - - - AC-6(2) - -

The organization requires that users of information system accounts, or roles, with access to , use non-privileged accounts or roles, when accessing nonsecurity functions.

-
- -

This control enhancement limits exposure when operating from within privileged accounts or roles. The inclusion of roles addresses situations where organizations implement access control policies such as role-based access control and where a change of role provides the same degree of assurance in the change of access authorizations for both the user and all processes acting on behalf of the user as would be provided by a change between a privileged and non-privileged account.

- PL-4 -
- -

Determine if the organization:

- - AC-6(2)[1] -

defines security functions or security-relevant information to which users of information system accounts, or roles, have access; and

-
- - AC-6(2)[2] -

requires that users of information system accounts, or roles, with access to organization-defined security functions or security-relevant information, use non-privileged accounts, or roles, when accessing nonsecurity functions.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing least privilege

-

list of system-generated security functions or security-relevant information assigned to information system accounts or roles

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for defining least privileges necessary to accomplish specified tasks

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms implementing least privilege functions

-
-
-
- - Network Access to Privileged Commands - - - - - - - AC-6(3) - -

The organization authorizes network access to only for and documents the rationale for such access in the security plan for the information system.

-
- -

Network access is any access across a network connection in lieu of local access (i.e., user being physically present at the device).

- AC-17 -
- -

Determine if the organization:

- - AC-6(3)[1] -

defines privileged commands to which network access is to be authorized only for compelling operational needs;

-
- - AC-6(3)[2] -

defines compelling operational needs for which network access to organization-defined privileged commands are to be solely authorized;

-
- - AC-6(3)[3] -

authorizes network access to organization-defined privileged commands only for organization-defined compelling operational needs; and

-
- - AC-6(3)[4] -

documents the rationale for authorized network access to organization-defined privileged commands in the security plan for the information system.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing least privilege

-

security plan

-

information system configuration settings and associated documentation

-

information system audit records

-

list of operational needs for authorizing network access to privileged commands

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for defining least privileges necessary to accomplish specified tasks

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing least privilege functions

-
-
-
- - Separate Processing Domains - AC-6(4) - -

The information system provides separate processing domains to enable finer-grained allocation of user privileges.

-
- -

Providing separate processing domains for finer-grained allocation of user privileges includes, for example: (i) using virtualization techniques to allow additional privileges within a virtual machine while restricting privileges to other virtual machines or to the underlying actual machine; (ii) employing hardware and/or software domain separation mechanisms; and (iii) implementing separate physical domains.

- AC-4 - SC-3 - SC-30 - SC-32 -
- -

Determine if the information system provides separate processing domains to enable finer-grained allocation of user privileges.

-
- - EXAMINE - -

Access control policy

-

procedures addressing least privilege

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for defining least privileges necessary to accomplish specified tasks

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing least privilege functions

-
-
-
- - Privileged Accounts - - - - AC-6(5) - -

The organization restricts privileged accounts on the information system to .

-
- -

Privileged accounts, including super user accounts, are typically described as system administrator for various types of commercial off-the-shelf operating systems. Restricting privileged accounts to specific personnel or roles prevents day-to-day users from having access to privileged information/functions. Organizations may differentiate in the application of this control enhancement between allowed privileges for local accounts and for domain accounts provided organizations retain the ability to control information system configurations for key security parameters and as otherwise necessary to sufficiently mitigate risk.

- CM-6 -
- -

Determine if the organization:

- - AC-6(5)[1] -

defines personnel or roles for which privileged accounts on the information system are to be restricted; and

-
- - AC-6(5)[2] -

restricts privileged accounts on the information system to organization-defined personnel or roles.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing least privilege

-

list of system-generated privileged accounts

-

list of system administration personnel

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for defining least privileges necessary to accomplish specified tasks

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms implementing least privilege functions

-
-
-
- - Privileged Access by Non-organizational Users - AC-6(6) - -

The organization prohibits privileged access to the information system by non-organizational users.

-
- - IA-8 - - -

Determine if the organization prohibits privileged access to the information system by non-organizational users.

-
- - EXAMINE - -

Access control policy

-

procedures addressing least privilege

-

list of system-generated privileged accounts

-

list of non-organizational users

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for defining least privileges necessary to accomplish specified tasks

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms prohibiting privileged access to the information system

-
-
-
- - Review of User Privileges - - - - - - - AC-6(7) - -

The organization:

- - (a) -

Reviews the privileges assigned to to validate the need for such privileges; and

-
- - (b) -

Reassigns or removes privileges, if necessary, to correctly reflect organizational mission/business needs.

-
-
- -

The need for certain assigned user privileges may change over time reflecting changes in organizational missions/business function, environments of operation, technologies, or threat. Periodic review of assigned user privileges is necessary to determine if the rationale for assigning such privileges remains valid. If the need cannot be revalidated, organizations take appropriate corrective actions.

- CA-7 -
- -

Determine if the organization:

- - AC-6(7)(a) - - AC-6(7)(a)[1] -

defines roles or classes of users to which privileges are assigned;

-
- - AC-6(7)(a)[2] -

defines the frequency to review the privileges assigned to organization-defined roles or classes of users to validate the need for such privileges;

-
- - AC-6(7)(a)[3] -

reviews the privileges assigned to organization-defined roles or classes of users with the organization-defined frequency to validate the need for such privileges; and

-
- AC-6(7)(a) -
- - AC-6(7)(b) -

reassigns or removes privileges, if necessary, to correctly reflect organizational missions/business needs.

- AC-6(7)(b) -
-
- - EXAMINE - -

Access control policy

-

procedures addressing least privilege

-

list of system-generated roles or classes of users and assigned privileges

-

information system design documentation

-

information system configuration settings and associated documentation

-

validation reviews of privileges assigned to roles or classes or users

-

records of privilege removals or reassignments for roles or classes of users

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for reviewing least privileges necessary to accomplish specified tasks

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms implementing review of user privileges

-
-
-
- - Privilege Levels for Code Execution - - - - AC-6(8) - -

The information system prevents from executing at higher privilege levels than users executing the software.

-
- -

In certain situations, software applications/programs need to execute with elevated privileges to perform required functions. However, if the privileges required for execution are at a higher level than the privileges assigned to organizational users invoking such applications/programs, those users are indirectly provided with greater privileges than assigned by organizations.

-
- -

Determine if:

- - AC-6(8)[1] -

the organization defines software that should not execute at higher privilege levels than users executing the software; and

-
- - AC-6(8)[2] -

the information system prevents organization-defined software from executing at higher privilege levels than users executing the software.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing least privilege

-

list of software that should not execute at higher privilege levels than users executing software

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for defining least privileges necessary to accomplish specified tasks

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing least privilege functions for software execution

-
-
-
- - Auditing Use of Privileged Functions - AC-6(9) - -

The information system audits the execution of privileged functions.

-
- -

Misuse of privileged functions, either intentionally or unintentionally by authorized users, or by unauthorized external entities that have compromised information system accounts, is a serious and ongoing concern and can have significant adverse impacts on organizations. Auditing the use of privileged functions is one way to detect such misuse, and in doing so, help mitigate the risk from insider threats and the advanced persistent threat (APT).

- AU-2 -
- -

Determine if the information system audits the execution of privileged functions.

-
- - EXAMINE - -

Access control policy

-

procedures addressing least privilege

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of privileged functions to be audited

-

list of audited events

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for reviewing least privileges necessary to accomplish specified tasks

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms auditing the execution of least privilege functions

-
-
-
- - Prohibit Non-privileged Users from Executing Privileged Functions - AC-6(10) - -

The information system prevents non-privileged users from executing privileged functions to include disabling, circumventing, or altering implemented security safeguards/countermeasures.

-
- -

Privileged functions include, for example, establishing information system accounts, performing system integrity checks, or administering cryptographic key management activities. Non-privileged users are individuals that do not possess appropriate authorizations. Circumventing intrusion detection and prevention mechanisms or malicious code protection mechanisms are examples of privileged functions that require protection from non-privileged users.

-
- -

Determine if the information system prevents non-privileged users from executing privileged functions to include:

- - AC-6(10)[1] -

disabling implemented security safeguards/countermeasures;

-
- - AC-6(10)[2] -

circumventing security safeguards/countermeasures; or

-
- - AC-6(10)[3] -

altering implemented security safeguards/countermeasures.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing least privilege

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of privileged functions and associated user account assignments

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for defining least privileges necessary to accomplish specified tasks

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing least privilege functions for non-privileged users

-
-
-
-
- - Unsuccessful Logon Attempts - - - - - - - - - - - - - - - - AC-7 - -

The information system:

- - a. -

Enforces a limit of consecutive invalid logon attempts by a user during a ; and

-
- - b. -

Automatically when the maximum number of unsuccessful attempts is exceeded.

-
-
- -

This control applies regardless of whether the logon occurs via a local or network connection. Due to the potential for denial of service, automatic lockouts initiated by information systems are usually temporary and automatically release after a predetermined time period established by organizations. If a delay algorithm is selected, organizations may choose to employ different algorithms for different information system components based on the capabilities of those components. Responses to unsuccessful logon attempts may be implemented at both the operating system and the application levels.

- AC-2 - AC-9 - AC-14 - IA-5 -
- -

Determine if:

- - AC-7(a) - - AC-7(a)[1] -

the organization defines the number of consecutive invalid logon attempts allowed to the information system by a user during an organization-defined time period;

-
- - AC-7(a)[2] -

the organization defines the time period allowed by a user of the information system for an organization-defined number of consecutive invalid logon attempts;

-
- - AC-7(a)[3] -

the information system enforces a limit of organization-defined number of consecutive invalid logon attempts by a user during an organization-defined time period;

-
-
- - AC-7(b) - - AC-7(b)[1] -

the organization defines account/node lockout time period or logon delay algorithm to be automatically enforced by the information system when the maximum number of unsuccessful logon attempts is exceeded;

-
- - AC-7(b)[2] -

the information system, when the maximum number of unsuccessful logon attempts is exceeded, automatically:

- - AC-7(b)[2][a] -

locks the account/node for the organization-defined time period;

-
- - AC-7(b)[2][b] -

locks the account/node until released by an administrator; or

-
- - AC-7(b)[2][c] -

delays next logon prompt according to the organization-defined delay algorithm.

-
-
-
-
- - EXAMINE - -

Access control policy

-

procedures addressing unsuccessful logon attempts

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system developers

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms implementing access control policy for unsuccessful logon attempts

-
-
- - Automatic Account Lock - AC-7(1) - Withdrawn - AC-7 - - - Purge / Wipe Mobile Device - - - - - - - - - - AC-7(2) - -

The information system purges/wipes information from based on after consecutive, unsuccessful device logon attempts.

-
- -

This control enhancement applies only to mobile devices for which a logon occurs (e.g., personal digital assistants, smart phones, tablets). The logon is to the mobile device, not to any one account on the device. Therefore, successful logons to any accounts on mobile devices reset the unsuccessful logon count to zero. Organizations define information to be purged/wiped carefully in order to avoid over purging/wiping which may result in devices becoming unusable. Purging/wiping may be unnecessary if the information on the device is protected with sufficiently strong encryption mechanisms.

- AC-19 - MP-5 - MP-6 - SC-13 -
- -

Determine if:

- - AC-7(2)[1] -

the organization defines mobile devices to be purged/wiped after organization-defined number of consecutive, unsuccessful device logon attempts;

-
- - AC-7(2)[2] -

the organization defines purging/wiping requirements/techniques to be used when organization-defined mobile devices are purged/wiped after organization-defined number of consecutive, unsuccessful device logon attempts;

-
- - AC-7(2)[3] -

the organization defines the number of consecutive, unsuccessful logon attempts allowed for accessing mobile devices before the information system purges/wipes information from such devices; and

-
- - AC-7(2)[4] -

the information system purges/wipes information from organization-defined mobile devices based on organization-defined purging/wiping requirements/techniques after organization-defined number of consecutive, unsuccessful logon attempts.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing unsuccessful login attempts on mobile devices

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of mobile devices to be purged/wiped after organization-defined consecutive, unsuccessful device logon attempts

-

list of purging/wiping requirements or techniques for mobile devices

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing access control policy for unsuccessful device logon attempts

-
-
-
-
- - System Use Notification - - - - - - - AC-8 - -

The information system:

- - a. -

Displays to users before granting access to the system that provides privacy and security notices consistent with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance and states that:

- - 1. -

Users are accessing a U.S. Government information system;

-
- - 2. -

Information system usage may be monitored, recorded, and subject to audit;

-
- - 3. -

Unauthorized use of the information system is prohibited and subject to criminal and civil penalties; and

-
- - 4. -

Use of the information system indicates consent to monitoring and recording;

-
-
- - b. -

Retains the notification message or banner on the screen until users acknowledge the usage conditions and take explicit actions to log on to or further access the information system; and

-
- - c. -

For publicly accessible systems:

- - 1. -

Displays system use information , before granting further access;

-
- - 2. -

Displays references, if any, to monitoring, recording, or auditing that are consistent with privacy accommodations for such systems that generally prohibit those activities; and

-
- - 3. -

Includes a description of the authorized uses of the system.

-
-
-
- -

System use notifications can be implemented using messages or warning banners displayed before individuals log in to information systems. System use notifications are used only for access via logon interfaces with human users and are not required when such human interfaces do not exist. Organizations consider system use notification messages/banners displayed in multiple languages based on specific organizational needs and the demographics of information system users. Organizations also consult with the Office of the General Counsel for legal review and approval of warning banner content.

-
- -

Determine if:

- - AC-8(a) - - AC-8(a)[1] -

the organization defines a system use notification message or banner to be displayed by the information system to users before granting access to the system;

-
- - AC-8(a)[2] -

the information system displays to users the organization-defined system use notification message or banner before granting access to the information system that provides privacy and security notices consistent with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance, and states that:

- - AC-8(a)[2](1) -

users are accessing a U.S. Government information system;

-
- - AC-8(a)[2](2) -

information system usage may be monitored, recorded, and subject to audit;

-
- - AC-8(a)[2](3) -

unauthorized use of the information system is prohibited and subject to criminal and civil penalties;

-
- - AC-8(a)[2](4) -

use of the information system indicates consent to monitoring and recording;

-
-
-
- - AC-8(b) -

the information system retains the notification message or banner on the screen until users acknowledge the usage conditions and take explicit actions to log on to or further access the information system;

-
- - AC-8(c) -

for publicly accessible systems:

- - AC-8(c)(1) - - AC-8(c)(1)[1] -

the organization defines conditions for system use to be displayed by the information system before granting further access;

-
- - AC-8(c)(1)[2] -

the information system displays organization-defined conditions before granting further access;

-
-
- - AC-8(c)(2) -

the information system displays references, if any, to monitoring, recording, or auditing that are consistent with privacy accommodations for such systems that generally prohibit those activities; and

-
- - AC-8(c)(3) -

the information system includes a description of the authorized uses of the system.

-
-
-
- - EXAMINE - -

Access control policy

-

privacy and security policies, procedures addressing system use notification

-

documented approval of information system use notification messages or banners

-

information system audit records

-

user acknowledgements of notification message or banner

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system use notification messages

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for providing legal advice

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing system use notification

-
-
-
- - Previous Logon (access) Notification - AC-9 - -

The information system notifies the user, upon successful logon (access) to the system, of the date and time of the last logon (access).

-
- -

This control is applicable to logons to information systems via human user interfaces and logons to systems that occur in other types of architectures (e.g., service-oriented architectures).

- AC-7 - PL-4 -
- -

Determine if the information system notifies the user, upon successful logon (access) to the system, of the date and time of the last logon (access).

-
- - EXAMINE - -

Access control policy

-

procedures addressing previous logon notification

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system notification messages

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing access control policy for previous logon notification

-
-
- - Unsuccessful Logons - AC-9(1) - -

The information system notifies the user, upon successful logon/access, of the number of unsuccessful logon/access attempts since the last successful logon/access.

-
- -

Determine if the information system notifies the user, upon successful logon/access, of the number of unsuccessful logon/access attempts since the last successful logon/access.

-
- - EXAMINE - -

Access control policy

-

procedures addressing previous logon notification

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing access control policy for previous logon notification

-
-
-
- - Successful / Unsuccessful Logons - - - - - - - AC-9(2) - -

The information system notifies the user of the number of during .

-
- -

Determine if:

- - AC-9(2)[1] -

the organization defines the time period within which the information system must notify the user of the number of:

- - AC-9(2)[1][a] -

successful logons/accesses; and/or

-
- - AC-9(2)[1][b] -

unsuccessful logon/access attempts;

-
-
- - AC-9(2)[2] -

the information system, during the organization-defined time period, notifies the user of the number of:

- - AC-9(2)[2][a] -

successful logons/accesses; and/or

-
- - AC-9(2)[2][b] -

unsuccessful logon/access attempts.

-
-
-
- - EXAMINE - -

Access control policy

-

procedures addressing previous logon notification

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing access control policy for previous logon notification

-
-
-
- - Notification of Account Changes - - - - - - - AC-9(3) - -

The information system notifies the user of changes to during .

-
- -

Determine if:

- - AC-9(3)[1] -

the organization defines security-related characteristics/parameters of a user’s account;

-
- - AC-9(3)[2] -

the organization defines the time period within which changes to organization-defined security-related characteristics/parameters of a user’s account must occur; and

-
- - AC-9(3)[3] -

the information system notifies the user of changes to organization-defined security-related characteristics/parameters of the user’s account during the organization-defined time period.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing previous logon notification

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing access control policy for previous logon notification

-
-
-
- - Additional Logon Information - - - - AC-9(4) - -

The information system notifies the user, upon successful logon (access), of the following additional information: .

-
- -

This control enhancement permits organizations to specify additional information to be provided to users upon logon including, for example, the location of last logon. User location is defined as that information which can be determined by information systems, for example, IP addresses from which network logons occurred, device identifiers, or notifications of local logons.

-
- -

Determine if:

- - AC-9(4)[1] -

the organization defines information to be included in addition to the date and time of the last logon (access); and

-
- - AC-9(4)[2] -

the information system notifies the user, upon successful logon (access), of the organization-defined information to be included in addition to the date and time of the last logon (access).

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing previous logon notification

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing access control policy for previous logon notification

-
-
-
-
- - Concurrent Session Control - - - - - - - AC-10 - -

The information system limits the number of concurrent sessions for each to .

-
- -

Organizations may define the maximum number of concurrent sessions for information system accounts globally, by account type (e.g., privileged user, non-privileged user, domain, specific application), by account, or a combination. For example, organizations may limit the number of concurrent sessions for system administrators or individuals working in particularly sensitive domains or mission-critical applications. This control addresses concurrent sessions for information system accounts and does not address concurrent sessions by single users via multiple system accounts.

-
- -

Determine if:

- - AC-10[1] -

the organization defines account and/or account types for the information system;

-
- - AC-10[2] -

the organization defines the number of concurrent sessions to be allowed for each organization-defined account and/or account type; and

-
- - AC-10[3] -

the information system limits the number of concurrent sessions for each organization-defined account and/or account type to the organization-defined number of concurrent sessions allowed.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing concurrent session control

-

information system design documentation

-

information system configuration settings and associated documentation

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing access control policy for concurrent session control

-
-
-
- - Session Lock - - - - AC-11 - -

The information system:

- - a. -

Prevents further access to the system by initiating a session lock after of inactivity or upon receiving a request from a user; and

-
- - b. -

Retains the session lock until the user reestablishes access using established identification and authentication procedures.

-
-
- -

Session locks are temporary actions taken when users stop work and move away from the immediate vicinity of information systems but do not want to log out because of the temporary nature of their absences. Session locks are implemented where session activities can be determined. This is typically at the operating system level, but can also be at the application level. Session locks are not an acceptable substitute for logging out of information systems, for example, if organizations require users to log out at the end of workdays.

- AC-7 -
- -

Determine if:

- - AC-11(a) - - AC-11(a)[1] -

the organization defines the time period of user inactivity after which the information system initiates a session lock;

-
- - AC-11(a)[2] -

the information system prevents further access to the system by initiating a session lock after organization-defined time period of user inactivity or upon receiving a request from a user; and

-
-
- - AC-11(b) -

the information system retains the session lock until the user reestablishes access using established identification and authentication procedures.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing session lock

-

procedures addressing identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing access control policy for session lock

-
-
- - Pattern-hiding Displays - AC-11(1) - -

The information system conceals, via the session lock, information previously visible on the display with a publicly viewable image.

-
- -

Publicly viewable images can include static or dynamic images, for example, patterns used with screen savers, photographic images, solid colors, clock, battery life indicator, or a blank screen, with the additional caveat that none of the images convey sensitive information.

-
- -

Determine if the information system conceals, via the session lock, information previously visible on the display with a publicly viewable image.

-
- - EXAMINE - -

Access control policy

-

procedures addressing session lock

-

display screen with session lock activated

-

information system design documentation

-

information system configuration settings and associated documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Information system session lock mechanisms

-
-
-
- - OMB Memorandum 06-16 - -
- - Session Termination - - - - AC-12 - -

The information system automatically terminates a user session after .

-
- -

This control addresses the termination of user-initiated logical sessions in contrast to SC-10 which addresses the termination of network connections that are associated with communications sessions (i.e., network disconnect). A logical session (for local, network, and remote access) is initiated whenever a user (or process acting on behalf of a user) accesses an organizational information system. Such user sessions can be terminated (and thus terminate user access) without terminating network sessions. Session termination terminates all processes associated with a user’s logical session except those processes that are specifically created by the user (i.e., session owner) to continue after the session is terminated. Conditions or trigger events requiring automatic session termination can include, for example, organization-defined periods of user inactivity, targeted responses to certain types of incidents, time-of-day restrictions on information system use.

- SC-10 - SC-23 -
- -

Determine if:

- - AC-12[1] -

the organization defines conditions or trigger events requiring session disconnect; and

-
- - AC-12[2] -

the information system automatically terminates a user session after organization-defined conditions or trigger events requiring session disconnect occurs.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing session termination

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of conditions or trigger events requiring session disconnect

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing user session termination

-
-
- - User-initiated Logouts / Message Displays - - - - AC-12(1) - -

The information system:

- - (a) -

Provides a logout capability for user-initiated communications sessions whenever authentication is used to gain access to ; and

-
- - (b) -

Displays an explicit logout message to users indicating the reliable termination of authenticated communications sessions.

-
-
- -

Information resources to which users gain access via authentication include, for example, local workstations, databases, and password-protected websites/web-based services. Logout messages for web page access, for example, can be displayed after authenticated sessions have been terminated. However, for some types of interactive sessions including, for example, file transfer protocol (FTP) sessions, information systems typically send logout messages as final messages prior to terminating sessions.

-
- -

Determine if:

- - AC-12(1)(a) - - AC-12(1)(a)[1] -

the organization defines information resources for which user authentication is required to gain access to such resources;

-
- - AC-12(1)(a)[2] -

the information system provides a logout capability for user-initiated communications sessions whenever authentication is used to gain access to organization-defined information resources; and

-
- AC-12(1)(a) -
- - AC-12(1)(b) -

the information system displays an explicit logout message to users indicating the reliable termination of authenticated communications sessions.

- AC-12(1)(b) -
-
- - EXAMINE - -

Access control policy

-

procedures addressing session termination

-

user logout messages

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Information system session lock mechanisms

-
-
-
-
- - Supervision and Review - Access Control - AC-13 - Withdrawn - AC-2 - AU-6 - - - Permitted Actions Without Identification or Authentication - - - - AC-14 - -

The organization:

- - a. -

Identifies that can be performed on the information system without identification or authentication consistent with organizational missions/business functions; and

-
- - b. -

Documents and provides supporting rationale in the security plan for the information system, user actions not requiring identification or authentication.

-
-
- -

This control addresses situations in which organizations determine that no identification or authentication is required in organizational information systems. Organizations may allow a limited number of user actions without identification or authentication including, for example, when individuals access public websites or other publicly accessible federal information systems, when individuals use mobile phones to receive calls, or when facsimiles are received. Organizations also identify actions that normally require identification or authentication but may under certain circumstances (e.g., emergencies), allow identification or authentication mechanisms to be bypassed. Such bypasses may occur, for example, via a software-readable physical switch that commands bypass of the logon functionality and is protected from accidental or unmonitored use. This control does not apply to situations where identification and authentication have already occurred and are not repeated, but rather to situations where identification and authentication have not yet occurred. Organizations may decide that there are no user actions that can be performed on organizational information systems without identification and authentication and thus, the values for assignment statements can be none.

- CP-2 - IA-2 -
- -

Determine if the organization:

- - AC-14(a) - - AC-14(a)[1] -

defines user actions that can be performed on the information system without identification or authentication consistent with organizational missions/business functions;

-
- - AC-14(a)[2] -

identifies organization-defined user actions that can be performed on the information system without identification or authentication consistent with organizational missions/business functions; and

-
-
- - AC-14(b) -

documents and provides supporting rationale in the security plan for the information system, user actions not requiring identification or authentication.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing permitted actions without identification or authentication

-

information system configuration settings and associated documentation

-

security plan

-

list of user actions that can be performed without identification or authentication

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - Necessary Uses - AC-14(1) - Withdrawn - AC-14 - -
- - Automated Marking - AC-15 - Withdrawn - MP-3 - - - Security Attributes - - - - - - - - - - - - - - - - AC-16 - -

The organization:

- - a. -

Provides the means to associate having with information in storage, in process, and/or in transmission;

-
- - b. -

Ensures that the security attribute associations are made and retained with the information;

-
- - c. -

Establishes the permitted for ; and

-
- - d. -

Determines the permitted for each of the established security attributes.

-
-
- -

Information is represented internally within information systems using abstractions known as data structures. Internal data structures can represent different types of entities, both active and passive. Active entities, also known as subjects, are typically associated with individuals, devices, or processes acting on behalf of individuals. Passive entities, also known as objects, are typically associated with data structures such as records, buffers, tables, files, inter-process pipes, and communications ports. Security attributes, a form of metadata, are abstractions representing the basic properties or characteristics of active and passive entities with respect to safeguarding information. These attributes may be associated with active entities (i.e., subjects) that have the potential to send or receive information, to cause information to flow among objects, or to change the information system state. These attributes may also be associated with passive entities (i.e., objects) that contain or receive information. The association of security attributes to subjects and objects is referred to as binding and is typically inclusive of setting the attribute value and the attribute type. Security attributes when bound to data/information, enables the enforcement of information security policies for access control and information flow control, either through organizational processes or information system functions or mechanisms. The content or assigned values of security attributes can directly affect the ability of individuals to access organizational information. -Organizations can define the types of attributes needed for selected information systems to support missions/business functions. There is potentially a wide range of values that can be assigned to any given security attribute. Release markings could include, for example, US only, NATO, or NOFORN (not releasable to foreign nationals). By specifying permitted attribute ranges and values, organizations can ensure that the security attribute values are meaningful and relevant. The term security labeling refers to the association of security attributes with subjects and objects represented by internal data structures within organizational information systems, to enable information system-based enforcement of information security policies. Security labels include, for example, access authorizations, data life cycle protection (i.e., encryption and data expiration), nationality, affiliation as contractor, and classification of information in accordance with legal and compliance requirements. The term security marking refers to the association of security attributes with objects in a human-readable form, to enable organizational process-based enforcement of information security policies. The AC-16 base control represents the requirement for user-based attribute association (marking). The enhancements to AC-16 represent additional requirements including information system-based attribute association (labeling). Types of attributes include, for example, classification level for objects and clearance (access authorization) level for subjects. An example of a value for both of these attribute types is Top Secret.

- AC-3 - AC-4 - AC-6 - AC-21 - AU-2 - AU-10 - SC-16 - MP-3 -
- -

Determine if the organization:

- - AC-16(a) - - AC-16(a)[1] -

defines types of security attributes to be associated with information:

- - AC-16(a)[1][a] -

in storage;

-
- - AC-16(a)[1][b] -

in process; and/or

-
- - AC-16(a)[1][c] -

in transmission;

-
-
- - AC-16(a)[2] -

defines security attribute values for organization-defined types of security attributes;

-
- - AC-16(a)[3] -

provides the means to associate organization-defined types of security attributes having organization-defined security attribute values with information:

- - AC-16(a)[3][a] -

in storage;

-
- - AC-16(a)[3][b] -

in process; and/or

-
- - AC-16(a)[3][c] -

in transmission;

-
-
-
- - AC-16(b) -

ensures that the security attribute associations are made and retained with the information;

-
- - AC-16(c) - - AC-16(c)[1] -

defines information systems for which the permitted organization-defined security attributes are to be established;

-
- - AC-16(c)[2] -

defines security attributes that are permitted for organization-defined information systems;

-
- - AC-16(c)[3] -

establishes the permitted organization-defined security attributes for organization-defined information systems;

-
-
- - AC-16(d) - - AC-16(d)[1] -

defines values or ranges for each of the established security attributes; and

-
- - AC-16(d)[2] -

determines the permitted organization-defined values or ranges for each of the established security attributes.

-
-
-
- - EXAMINE - -

Access control policy

-

procedures addressing the association of security attributes to information in storage, in process, and in transmission

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Organizational capability supporting and maintaining the association of security attributes to information in storage, in process, and in transmission

-
-
- - Dynamic Attribute Association - - - - - - - AC-16(1) - -

The information system dynamically associates security attributes with in accordance with as information is created and combined.

-
- -

Dynamic association of security attributes is appropriate whenever the security characteristics of information changes over time. Security attributes may change, for example, due to information aggregation issues (i.e., the security characteristics of individual information elements are different from the combined elements), changes in individual access authorizations (i.e., privileges), and changes in the security category of information.

- AC-4 -
- -

Determine if:

- - AC-16(1)[1] -

the organization defines subjects and objects to which security attributes are to be dynamically associated as information is created and combined;

-
- - AC-16(1)[2] -

the organization defines security policies requiring the information system to dynamically associate security attributes with organization-defined subjects and objects; and

-
- - AC-16(1)[3] -

the information system dynamically associates security attributes with organization-defined subjects and objects in accordance with organization-defined security policies as information is created and combined.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing dynamic association of security attributes to information

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing dynamic association of security attributes to information

-
-
-
- - Attribute Value Changes by Authorized Individuals - AC-16(2) - -

The information system provides authorized individuals (or processes acting on behalf of individuals) the capability to define or change the value of associated security attributes.

-
- -

The content or assigned values of security attributes can directly affect the ability of individuals to access organizational information. Therefore, it is important for information systems to be able to limit the ability to create or modify security attributes to authorized individuals.

- AC-6 - AU-2 -
- -

Determine if the information system provides authorized individuals (or processes acting on behalf on individuals) the capability to define or change the value of associated security attributes.

-
- - EXAMINE - -

Access control policy

-

procedures addressing the change of security attribute values

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of individuals authorized to change security attributes

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for changing values of security attributes

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms permitting changes to values of security attributes

-
-
-
- - Maintenance of Attribute Associations by Information System - - - - - - - AC-16(3) - -

The information system maintains the association and integrity of to .

-
- -

Maintaining the association and integrity of security attributes to subjects and objects with sufficient assurance helps to ensure that the attribute associations can be used as the basis of automated policy actions. Automated policy actions include, for example, access control decisions or information flow control decisions.

-
- -

Determine if:

- - AC-16(3)[1] -

the organization defines security attributes to be associated with organization-defined subjects and objects;

-
- - AC-16(3)[2] -

the organization defines subjects and objects requiring the association and integrity of security attributes to such subjects and objects to be maintained; and

-
- - AC-16(3)[3] -

the information system maintains the association and integrity of organization-defined security attributes to organization-defined subjects and objects.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing the association of security attributes to information

-

information system design documentation

-

information system configuration settings and associated documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms maintaining association and integrity of security attributes to information

-
-
-
- - Association of Attributes by Authorized Individuals - - - - - - - AC-16(4) - -

The information system supports the association of with by authorized individuals (or processes acting on behalf of individuals).

-
- -

The support provided by information systems can vary to include: (i) prompting users to select specific security attributes to be associated with specific information objects; (ii) employing automated mechanisms for categorizing information with appropriate attributes based on defined policies; or (iii) ensuring that the combination of selected security attributes selected is valid. Organizations consider the creation, deletion, or modification of security attributes when defining auditable events.

-
- -

Determine if:

- - AC-16(4)[1] -

the organization defines security attributes to be associated with subjects and objects by authorized individuals (or processes acting on behalf of individuals);

-
- - AC-16(4)[2] -

the organization defines subjects and objects requiring the association of organization-defined security attributes by authorized individuals (or processes acting on behalf of individuals); and

-
- - AC-16(4)[3] -

the information system supports the association of organization-defined security attributes with organization-defined subjects and objects by authorized individuals (or processes acting on behalf of individuals).

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing the association of security attributes to information

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of users authorized to associate security attributes to information

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for associating security attributes to information

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting user associations of security attributes to information

-
-
-
- - Attribute Displays for Output Devices - - - - - - - AC-16(5) - -

The information system displays security attributes in human-readable form on each object that the system transmits to output devices to identify using .

-
- -

Information system outputs include, for example, pages, screens, or equivalent. Information system output devices include, for example, printers and video displays on computer workstations, notebook computers, and personal digital assistants.

-
- -

Determine if:

- - AC-16(5)[1] -

the organization identifies special dissemination, handling, or distribution instructions to be used for each object that the information system transmits to output devices;

-
- - AC-16(5)[2] -

the organization identifies human-readable, standard naming conventions for the security attributes to be displayed in human-readable form on each object that the information system transmits to output devices; and

-
- - AC-16(5)[3] -

the information system displays security attributes in human-readable form on each object that the system transmits to output devices to identify organization-identified special dissemination, handling, or distribution instructions using organization-identified human readable, standard naming conventions.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing display of security attributes in human-readable form

-

special dissemination, handling, or distribution instructions

-

types of human-readable, standard naming conventions

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

System output devices displaying security attributes in human-readable form on each object

-
-
-
- - Maintenance of Attribute Association by Organization - - - - - - - - - - AC-16(6) - -

The organization allows personnel to associate, and maintain the association of with in accordance with .

-
- -

This control enhancement requires individual users (as opposed to the information system) to maintain associations of security attributes with subjects and objects.

-
- -

Determine if the organization:

- - AC-16(6)[1] -

defines security attributes to be associated with subjects and objects;

-
- - AC-16(6)[2] -

defines subjects and objects to be associated with organization-defined security attributes;

-
- - AC-16(6)[3] -

defines security policies to allow personnel to associate, and maintain the association of organization-defined security attributes with organization-defined subjects and objects; and

-
- - AC-16(6)[4] -

allows personnel to associate, and maintain the association of organization-defined security attributes with organization-defined subjects and objects in accordance with organization-defined security policies.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing association of security attributes with subjects and objects

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for associating and maintaining association of security attributes with subjects and objects

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting associations of security attributes to subjects and objects

-
-
-
- - Consistent Attribute Interpretation - AC-16(7) - -

The organization provides a consistent interpretation of security attributes transmitted between distributed information system components.

-
- -

In order to enforce security policies across multiple components in distributed information systems (e.g., distributed database management systems, cloud-based systems, and service-oriented architectures), organizations provide a consistent interpretation of security attributes that are used in access enforcement and flow enforcement decisions. Organizations establish agreements and processes to ensure that all distributed information system components implement security attributes with consistent interpretations in automated access/flow enforcement actions.

-
- -

Determine if the organization provides a consistent interpretation of security attributes transmitted between distributed information system components.

-
- - EXAMINE - -

Access control policy

-

procedures addressing consistent interpretation of security attributes transmitted between distributed information system components

-

procedures addressing access enforcement

-

procedures addressing information flow enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for providing consistent interpretation of security attributes used in access enforcement and information flow enforcement actions

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing access enforcement and information flow enforcement functions

-
-
-
- - Association Techniques / Technologies - - - - - - - AC-16(8) - -

The information system implements with in associating security attributes to information.

-
- -

The association (i.e., binding) of security attributes to information within information systems is of significant importance with regard to conducting automated access enforcement and flow enforcement actions. The association of such security attributes can be accomplished with technologies/techniques providing different levels of assurance. For example, information systems can cryptographically bind security attributes to information using digital signatures with the supporting cryptographic keys protected by hardware devices (sometimes known as hardware roots of trust).

-
- -

Determine if:

- - AC-16(8)[1] -

the organization defines techniques or technologies to be implemented in associating security attributes to information;

-
- - AC-16(8)[2] -

the organization defines level of assurance to be provided when the information system implements organization-defined technologies or technologies to associate security attributes to information; and

-
- - AC-16(8)[3] -

the information system implements organization-defined techniques or technologies with organization-defined level of assurance in associating security attributes to information.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing association of security attributes to information

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for associating security attributes to information

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing techniques or technologies associating security attributes to information

-
-
-
- - Attribute Reassignment - - - - AC-16(9) - -

The organization ensures that security attributes associated with information are reassigned only via re-grading mechanisms validated using .

-
- -

Validated re-grading mechanisms are employed by organizations to provide the requisite levels of assurance for security attribute reassignment activities. The validation is facilitated by ensuring that re-grading mechanisms are single purpose and of limited function. Since security attribute reassignments can affect security policy enforcement actions (e.g., access/flow enforcement decisions), using trustworthy re-grading mechanisms is necessary to ensure that such mechanisms perform in a consistent/correct mode of operation.

-
- -

Determine if the organization:

- - AC-16(9)[1] -

defines techniques or procedures to validate re-grading mechanisms used to reassign association of security attributes with information; and

-
- - AC-16(9)[2] -

ensures that security attributes associated with information are reassigned only via re-grading mechanisms validated using organization-defined techniques or procedures.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing reassignment of security attributes to information

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for reassigning association of security attributes to information

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing techniques or procedures for reassigning association of security attributes to information

-
-
-
- - Attribute Configuration by Authorized Individuals - AC-16(10) - -

The information system provides authorized individuals the capability to define or change the type and value of security attributes available for association with subjects and objects.

-
- -

The content or assigned values of security attributes can directly affect the ability of individuals to access organizational information. Therefore, it is important for information systems to be able to limit the ability to create or modify security attributes to authorized individuals only.

-
- -

Determine if the information system provides authorized individuals the capability to define or change the type and value of security attributes available for association with subjects and objects.

-
- - EXAMINE - -

Access control policy

-

procedures addressing configuration of security attributes by authorized individuals

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for defining or changing security attributes associated with information

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing capability for defining or changing security attributes

-
-
-
-
- - Remote Access - AC-17 - -

The organization:

- - a. -

Establishes and documents usage restrictions, configuration/connection requirements, and implementation guidance for each type of remote access allowed; and

-
- - b. -

Authorizes remote access to the information system prior to allowing such connections.

-
-
- -

Remote access is access to organizational information systems by users (or processes acting on behalf of users) communicating through external networks (e.g., the Internet). Remote access methods include, for example, dial-up, broadband, and wireless. Organizations often employ encrypted virtual private networks (VPNs) to enhance confidentiality and integrity over remote connections. The use of encrypted VPNs does not make the access non-remote; however, the use of VPNs, when adequately provisioned with appropriate security controls (e.g., employing appropriate encryption techniques for confidentiality and integrity protection) may provide sufficient assurance to the organization that it can effectively treat such connections as internal networks. Still, VPN connections traverse external networks, and the encrypted VPN does not enhance the availability of remote connections. Also, VPNs with encrypted tunnels can affect the organizational capability to adequately monitor network communications traffic for malicious code. Remote access controls apply to information systems other than public web servers or systems designed for public access. This control addresses authorization prior to allowing remote access without specifying the formats for such authorization. While organizations may use interconnection security agreements to authorize remote access connections, such agreements are not required by this control. Enforcing access restrictions for remote connections is addressed in AC-3.

- AC-2 - AC-3 - AC-18 - AC-19 - AC-20 - CA-3 - CA-7 - CM-8 - IA-2 - IA-3 - IA-8 - MA-4 - PE-17 - PL-4 - SC-10 - SI-4 -
- -

Determine if the organization:

- - AC-17(a) - - AC-17(a)[1] -

identifies the types of remote access allowed to the information system;

-
- - AC-17(a)[2] -

establishes for each type of remote access allowed:

- - AC-17(a)[2][a] -

usage restrictions;

-
- - AC-17(a)[2][b] -

configuration/connection requirements;

-
- - AC-17(a)[2][c] -

implementation guidance;

-
-
- - AC-17(a)[3] -

documents for each type of remote access allowed:

- - AC-17(a)[3][a] -

usage restrictions;

-
- - AC-17(a)[3][b] -

configuration/connection requirements;

-
- - AC-17(a)[3][c] -

implementation guidance; and

-
-
-
- - AC-17(b) -

authorizes remote access to the information system prior to allowing such connections.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing remote access implementation and usage (including restrictions)

-

configuration management plan

-

security plan

-

information system configuration settings and associated documentation

-

remote access authorizations

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for managing remote access connections

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Remote access management capability for the information system

-
-
- - Automated Monitoring / Control - AC-17(1) - -

The information system monitors and controls remote access methods.

-
- -

Automated monitoring and control of remote access sessions allows organizations to detect cyber attacks and also ensure ongoing compliance with remote access policies by auditing connection activities of remote users on a variety of information system components (e.g., servers, workstations, notebook computers, smart phones, and tablets).

- AU-2 - AU-12 -
- -

Determine if the information system monitors and controls remote access methods.

-
- - EXAMINE - -

Access control policy

-

procedures addressing remote access to the information system

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

information system monitoring records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms monitoring and controlling remote access methods

-
-
-
- - Protection of Confidentiality / Integrity Using Encryption - AC-17(2) - -

The information system implements cryptographic mechanisms to protect the confidentiality and integrity of remote access sessions.

-
- -

The encryption strength of mechanism is selected based on the security categorization of the information.

- SC-8 - SC-12 - SC-13 -
- -

Determine if the information system implements cryptographic mechanisms to protect the confidentiality and integrity of remote access sessions.

-
- - EXAMINE - -

Access control policy

-

procedures addressing remote access to the information system

-

information system design documentation

-

information system configuration settings and associated documentation

-

cryptographic mechanisms and associated configuration documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Cryptographic mechanisms protecting confidentiality and integrity of remote access sessions

-
-
-
- - Managed Access Control Points - - - - AC-17(3) - -

The information system routes all remote accesses through managed network access control points.

-
- -

Limiting the number of access control points for remote accesses reduces the attack surface for organizations. Organizations consider the Trusted Internet Connections (TIC) initiative requirements for external network connections.

- SC-7 -
- -

Determine if:

- - AC-17(3)[1] -

the organization defines the number of managed network access control points through which all remote accesses are to be routed; and

-
- - AC-17(3)[2] -

the information system routes all remote accesses through the organization-defined number of managed network access control points.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing remote access to the information system

-

information system design documentation

-

list of all managed network access control points

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms routing all remote accesses through managed network access control points

-
-
-
- - Privileged Commands / Access - - - - AC-17(4) - -

The organization:

- - (a) -

Authorizes the execution of privileged commands and access to security-relevant information via remote access only for ; and

-
- - (b) -

Documents the rationale for such access in the security plan for the information system.

-
-
- - AC-6 - - -

Determine if the organization:

- - AC-17(4)(a) - - AC-17(4)(a)[1] -

defines needs to authorize the execution of privileged commands and access to security-relevant information via remote access;

-
- - AC-17(4)(a)[2] -

authorizes the execution of privileged commands and access to security-relevant information via remote access only for organization-defined needs; and

-
- AC-17(4)(a) -
- - AC-17(4)(b) -

documents the rationale for such access in the information system security plan.

- AC-17(4)(b) -
-
- - EXAMINE - -

Access control policy

-

procedures addressing remote access to the information system

-

information system configuration settings and associated documentation

-

security plan

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing remote access management

-
-
-
- - Monitoring for Unauthorized Connections - AC-17(5) - Withdrawn - SI-4 - - - Protection of Information - AC-17(6) - -

The organization ensures that users protect information about remote access mechanisms from unauthorized use and disclosure.

-
- - AT-2 - AT-3 - PS-6 - - -

Determine if the organization ensures that users protect information about remote access mechanisms from unauthorized use and disclosure.

-
- - EXAMINE - -

Access control policy

-

procedures addressing remote access to the information system

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for implementing or monitoring remote access to the information system

-

information system users with knowledge of information about remote access mechanisms

-

organizational personnel with information security responsibilities

-
-
-
- - Additional Protection for Security Function Access - AC-17(7) - Withdrawn - AC-3 (10) - - - Disable Nonsecure Network Protocols - AC-17(8) - Withdrawn - CM-7 - - - Disconnect / Disable Access - - - - AC-17(9) - -

The organization provides the capability to expeditiously disconnect or disable remote access to the information system within .

-
- -

This control enhancement requires organizations to have the capability to rapidly disconnect current users remotely accessing the information system and/or disable further remote access. The speed of disconnect or disablement varies based on the criticality of missions/business functions and the need to eliminate immediate or future remote access to organizational information systems.

-
- -

Determine if the organization:

- - AC-17(9)[1] -

defines the time period within which to expeditiously disconnect or disable remote access to the information system; and

-
- - AC-17(9)[2] -

provides the capability to expeditiously disconnect or disable remote access to the information system within the organization-defined time period.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing disconnecting or disabling remote access to the information system

-

information system design documentation

-

information system configuration settings and associated documentation

-

security plan, information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing capability to disconnect or disable remote access to information system

-
-
-
- - NIST Special Publication 800-46 - - NIST Special Publication 800-77 - - NIST Special Publication 800-113 - - NIST Special Publication 800-114 - - NIST Special Publication 800-121 - -
- - Wireless Access - AC-18 - -

The organization:

- - a. -

Establishes usage restrictions, configuration/connection requirements, and implementation guidance for wireless access; and

-
- - b. -

Authorizes wireless access to the information system prior to allowing such connections.

-
-
- -

Wireless technologies include, for example, microwave, packet radio (UHF/VHF), 802.11x, and Bluetooth. Wireless networks use authentication protocols (e.g., EAP/TLS, PEAP), which provide credential protection and mutual authentication.

- AC-2 - AC-3 - AC-17 - AC-19 - CA-3 - CA-7 - CM-8 - IA-2 - IA-3 - IA-8 - PL-4 - SI-4 -
- -

Determine if the organization:

- - AC-18(a) -

establishes for wireless access:

- - AC-18(a)[1] -

usage restrictions;

-
- - AC-18(a)[2] -

configuration/connection requirement;

-
- - AC-18(a)[3] -

implementation guidance; and

-
-
- - AC-18(b) -

authorizes wireless access to the information system prior to allowing such connections.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing wireless access implementation and usage (including restrictions)

-

configuration management plan

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

wireless access authorizations

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for managing wireless access connections

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Wireless access management capability for the information system

-
-
- - Authentication and Encryption - - - - AC-18(1) - -

The information system protects wireless access to the system using authentication of and encryption.

-
- - SC-8 - SC-13 - - -

Determine if the information system protects wireless access to the system using encryption and one or more of the following:

- - AC-18(1)[1] -

authentication of users; and/or

-
- - AC-18(1)[2] -

authentication of devices.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing wireless implementation and usage (including restrictions)

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing wireless access protections to the information system

-
-
-
- - Monitoring Unauthorized Connections - AC-18(2) - Withdrawn - SI-4 - - - Disable Wireless Networking - AC-18(3) - -

The organization disables, when not intended for use, wireless networking capabilities internally embedded within information system components prior to issuance and deployment.

-
- - AC-19 - - -

Determine if the organization disables, when not intended for use, wireless networking capabilities internally embedded within information system components prior to issuance and deployment.

-
- - EXAMINE - -

Access control policy

-

procedures addressing wireless implementation and usage (including restrictions)

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms managing the disabling of wireless networking capabilities internally embedded within information system components

-
-
-
- - Restrict Configurations by Users - AC-18(4) - -

The organization identifies and explicitly authorizes users allowed to independently configure wireless networking capabilities.

-
- -

Organizational authorizations to allow selected users to configure wireless networking capability are enforced in part, by the access enforcement mechanisms employed within organizational information systems.

- AC-3 - SC-15 -
- -

Determine if the organization:

- - AC-18(4)[1] -

identifies users allowed to independently configure wireless networking capabilities; and

-
- - AC-18(4)[2] -

explicitly authorizes the identified users allowed to independently configure wireless networking capabilities.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing wireless implementation and usage (including restrictions)

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms authorizing independent user configuration of wireless networking capabilities

-
-
-
- - Antennas / Transmission Power Levels - AC-18(5) - -

The organization selects radio antennas and calibrates transmission power levels to reduce the probability that usable signals can be received outside of organization-controlled boundaries.

-
- -

Actions that may be taken by organizations to limit unauthorized use of wireless communications outside of organization-controlled boundaries include, for example: (i) reducing the power of wireless transmissions so that the transmissions are less likely to emit a signal that can be used by adversaries outside of the physical perimeters of organizations; (ii) employing measures such as TEMPEST to control wireless emanations; and (iii) using directional/beam forming antennas that reduce the likelihood that unintended receivers will be able to intercept signals. Prior to taking such actions, organizations can conduct periodic wireless surveys to understand the radio frequency profile of organizational information systems as well as other systems that may be operating in the area.

- PE-19 -
- -

Determine if the organization:

- - AC-18(5)[1] -

selects radio antennas to reduce the probability that usable signals can be received outside of organization-controlled boundaries; and

-
- - AC-18(5)[2] -

calibrates transmission power levels to reduce the probability that usable signals can be received outside of organization-controlled boundaries.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing wireless implementation and usage (including restrictions)

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Wireless access capability protecting usable signals from unauthorized access outside organization-controlled boundaries

-
-
-
- - NIST Special Publication 800-48 - - NIST Special Publication 800-94 - - NIST Special Publication 800-97 - -
- - Access Control for Mobile Devices - AC-19 - -

The organization:

- - a. -

Establishes usage restrictions, configuration requirements, connection requirements, and implementation guidance for organization-controlled mobile devices; and

-
- - b. -

Authorizes the connection of mobile devices to organizational information systems.

-
-
- -

A mobile device is a computing device that: (i) has a small form factor such that it can easily be carried by a single individual; (ii) is designed to operate without a physical connection (e.g., wirelessly transmit or receive information); (iii) possesses local, non-removable or removable data storage; and (iv) includes a self-contained power source. Mobile devices may also include voice communication capabilities, on-board sensors that allow the device to capture information, and/or built-in features for synchronizing local data with remote locations. Examples include smart phones, E-readers, and tablets. Mobile devices are typically associated with a single individual and the device is usually in close proximity to the individual; however, the degree of proximity can vary depending upon on the form factor and size of the device. The processing, storage, and transmission capability of the mobile device may be comparable to or merely a subset of desktop systems, depending upon the nature and intended purpose of the device. Due to the large variety of mobile devices with different technical characteristics and capabilities, organizational restrictions may vary for the different classes/types of such devices. Usage restrictions and specific implementation guidance for mobile devices include, for example, configuration management, device identification and authentication, implementation of mandatory protective software (e.g., malicious code detection, firewall), scanning devices for malicious code, updating virus protection software, scanning for critical software updates and patches, conducting primary operating system (and possibly other resident software) integrity checks, and disabling unnecessary hardware (e.g., wireless, infrared). Organizations are cautioned that the need to provide adequate security for mobile devices goes beyond the requirements in this control. Many safeguards and countermeasures for mobile devices are reflected in other security controls in the catalog allocated in the initial control baselines as starting points for the development of security plans and overlays using the tailoring process. There may also be some degree of overlap in the requirements articulated by the security controls within the different families of controls. AC-20 addresses mobile devices that are not organization-controlled.

- AC-3 - AC-7 - AC-18 - AC-20 - CA-9 - CM-2 - IA-2 - IA-3 - MP-2 - MP-4 - MP-5 - PL-4 - SC-7 - SC-43 - SI-3 - SI-4 -
- -

Determine if the organization:

- - AC-19(a) -

establishes for organization-controlled mobile devices:

- - AC-19(a)[1] -

usage restrictions;

-
- - AC-19(a)[2] -

configuration/connection requirement;

-
- - AC-19(a)[3] -

implementation guidance; and

-
-
- - AC-19(b) -

authorizes the connection of mobile devices to organizational information systems.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing access control for mobile device usage (including restrictions)

-

configuration management plan

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

authorizations for mobile device connections to organizational information systems

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel using mobile devices to access organizational information systems

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Access control capability authorizing mobile device connections to organizational information systems

-
-
- - Use of Writable / Portable Storage Devices - AC-19(1) - Withdrawn - MP-7 - - - Use of Personally Owned Portable Storage Devices - AC-19(2) - Withdrawn - MP-7 - - - Use of Portable Storage Devices with No Identifiable Owner - AC-19(3) - Withdrawn - MP-7 - - - Restrictions for Classified Information - - - - - - - AC-19(4) - -

The organization:

- - (a) -

Prohibits the use of unclassified mobile devices in facilities containing information systems processing, storing, or transmitting classified information unless specifically permitted by the authorizing official; and

-
- - (b) -

Enforces the following restrictions on individuals permitted by the authorizing official to use unclassified mobile devices in facilities containing information systems processing, storing, or transmitting classified information:

- - (1) -

Connection of unclassified mobile devices to classified information systems is prohibited;

-
- - (2) -

Connection of unclassified mobile devices to unclassified information systems requires approval from the authorizing official;

-
- - (3) -

Use of internal or external modems or wireless interfaces within the unclassified mobile devices is prohibited; and

-
- - (4) -

Unclassified mobile devices and the information stored on those devices are subject to random reviews and inspections by , and if classified information is found, the incident handling policy is followed.

-
-
- - (c) -

Restricts the connection of classified mobile devices to classified information systems in accordance with .

-
-
- - CA-6 - IR-4 - - -

Determine if the organization:

- - AC-19(4)(a) -

prohibits the use of unclassified mobile devices in facilities containing information systems processing, storing, or transmitting classified information unless specifically permitted by the authorizing official;

- AC-19(4)(a) -
- - AC-19(4)(b) -

enforces the following restrictions on individuals permitted by the authorizing official to use unclassified mobile devices in facilities containing information systems processing, storing, or transmitting classified information:

- - AC-19(4)(b)(1) -

connection of unclassified mobile devices to classified information systems is prohibited;

- AC-19(4)(b)(1) -
- - AC-19(4)(b)(2) -

connection of unclassified mobile devices to unclassified information systems requires approval from the authorizing official;

- AC-19(4)(b)(2) -
- - AC-19(4)(b)(3) -

use of internal or external modems or wireless interfaces within the unclassified mobile devices is prohibited;

- AC-19(4)(b)(3) -
- - AC-19(4)(b)(4) - - AC-19(4)(b)(4)[1] -

defines security officials responsible for reviews and inspections of unclassified mobile devices and the information stored on those devices;

-
- - AC-19(4)(b)(4)[2] -

unclassified mobile devices and the information stored on those devices are subject to random reviews/inspections by organization-defined security officials;

-
- - AC-19(4)(b)(4)[3] -

the incident handling policy is followed if classified information is found;

-
- AC-19(4)(b)(4) -
- AC-19(4)(b) -
- - AC-19(4)(c) - - AC-19(4)(c)[1] -

defines security policies to restrict the connection of classified mobile devices to classified information systems; and

-
- - AC-19(4)(c)[2] -

restricts the connection of classified mobile devices to classified information systems in accordance with organization-defined security policies.

-
- AC-19(4)(c) -
-
- - EXAMINE - -

Access control policy

-

incident handling policy

-

procedures addressing access control for mobile devices

-

information system design documentation

-

information system configuration settings and associated documentation

-

evidentiary documentation for random inspections and reviews of mobile devices

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel responsible for random reviews/inspections of mobile devices

-

organizational personnel using mobile devices in facilities containing information systems processing, storing, or transmitting classified information

-

organizational personnel with incident response responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms prohibiting the use of internal or external modems or wireless interfaces with mobile devices

-
-
-
- - Full Device / Container-based Encryption - - - - - - - AC-19(5) - -

The organization employs to protect the confidentiality and integrity of information on .

-
- -

Container-based encryption provides a more fine-grained approach to the encryption of data/information on mobile devices, including for example, encrypting selected data structures such as files, records, or fields.

- MP-5 - SC-13 - SC-28 -
- -

Determine if the organization:

- - AC-19(5)[1] -

defines mobile devices for which full-device encryption or container encryption is required to protect the confidentiality and integrity of information on such devices; and

-
- - AC-19(5)[2] -

employs full-device encryption or container encryption to protect the confidentiality and integrity of information on organization-defined mobile devices.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing access control for mobile devices

-

information system design documentation

-

information system configuration settings and associated documentation

-

encryption mechanism s and associated configuration documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with access control responsibilities for mobile devices

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Encryption mechanisms protecting confidentiality and integrity of information on mobile devices

-
-
-
- - OMB Memorandum 06-16 - - NIST Special Publication 800-114 - - NIST Special Publication 800-124 - - NIST Special Publication 800-164 - -
- - Use of External Information Systems - AC-20 - -

The organization establishes terms and conditions, consistent with any trust relationships established with other organizations owning, operating, and/or maintaining external information systems, allowing authorized individuals to:

- - a. -

Access the information system from external information systems; and

-
- - b. -

Process, store, or transmit organization-controlled information using external information systems.

-
-
- -

External information systems are information systems or components of information systems that are outside of the authorization boundary established by organizations and for which organizations typically have no direct supervision and authority over the application of required security controls or the assessment of control effectiveness. External information systems include, for example: (i) personally owned information systems/devices (e.g., notebook computers, smart phones, tablets, personal digital assistants); (ii) privately owned computing and communications devices resident in commercial or public facilities (e.g., hotels, train stations, convention centers, shopping malls, or airports); (iii) information systems owned or controlled by nonfederal governmental organizations; and (iv) federal information systems that are not owned by, operated by, or under the direct supervision and authority of organizations. This control also addresses the use of external information systems for the processing, storage, or transmission of organizational information, including, for example, accessing cloud services (e.g., infrastructure as a service, platform as a service, or software as a service) from organizational information systems. -For some external information systems (i.e., information systems operated by other federal agencies, including organizations subordinate to those agencies), the trust relationships that have been established between those organizations and the originating organization may be such, that no explicit terms and conditions are required. Information systems within these organizations would not be considered external. These situations occur when, for example, there are pre-existing sharing/trust agreements (either implicit or explicit) established between federal agencies or organizations subordinate to those agencies, or when such trust agreements are specified by applicable laws, Executive Orders, directives, or policies. Authorized individuals include, for example, organizational personnel, contractors, or other individuals with authorized access to organizational information systems and over which organizations have the authority to impose rules of behavior with regard to system access. Restrictions that organizations impose on authorized individuals need not be uniform, as those restrictions may vary depending upon the trust relationships between organizations. Therefore, organizations may choose to impose different security restrictions on contractors than on state, local, or tribal governments. -This control does not apply to the use of external information systems to access public interfaces to organizational information systems (e.g., individuals accessing federal information through www.usa.gov). Organizations establish terms and conditions for the use of external information systems in accordance with organizational security policies and procedures. Terms and conditions address as a minimum: types of applications that can be accessed on organizational information systems from external information systems; and the highest security category of information that can be processed, stored, or transmitted on external information systems. If terms and conditions with the owners of external information systems cannot be established, organizations may impose restrictions on organizational personnel using those external systems.

- AC-3 - AC-17 - AC-19 - CA-3 - PL-4 - SA-9 -
- -

Determine if the organization establishes terms and conditions, consistent with any trust relationships established with other organizations owning, operating, and/or maintaining external information systems, allowing authorized individuals to:

- - AC-20(a) -

access the information system from the external information systems; and

-
- - AC-20(b) -

process, store, or transmit organization-controlled information using external information systems.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing the use of external information systems

-

external information systems terms and conditions

-

list of types of applications accessible from external information systems

-

maximum security categorization for information processed, stored, or transmitted on external information systems

-

information system configuration settings and associated documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for defining terms and conditions for use of external information systems to access organizational systems

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing terms and conditions on use of external information systems

-
-
- - Limits On Authorized Use - AC-20(1) - -

The organization permits authorized individuals to use an external information system to access the information system or to process, store, or transmit organization-controlled information only when the organization:

- - (a) -

Verifies the implementation of required security controls on the external system as specified in the organization’s information security policy and security plan; or

-
- - (b) -

Retains approved information system connection or processing agreements with the organizational entity hosting the external information system.

-
-
- -

This control enhancement recognizes that there are circumstances where individuals using external information systems (e.g., contractors, coalition partners) need to access organizational information systems. In those situations, organizations need confidence that the external information systems contain the necessary security safeguards (i.e., security controls), so as not to compromise, damage, or otherwise harm organizational information systems. Verification that the required security controls have been implemented can be achieved, for example, by third-party, independent assessments, attestations, or other means, depending on the confidence level required by organizations.

- CA-2 -
- -

Determine if the organization permits authorized individuals to use an external information system to access the information system or to process, store, or transmit organization-controlled information only when the organization:

- - AC-20(1)(a) -

verifies the implementation of required security controls on the external system as specified in the organization’s information security policy and security plan; or

- AC-20(1)(a) -
- - AC-20(1)(b) -

retains approved information system connection or processing agreements with the organizational entity hosting the external information system.

- AC-20(1)(b) -
-
- - EXAMINE - -

Access control policy

-

procedures addressing the use of external information systems

-

security plan

-

information system connection or processing agreements

-

account management documents

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing limits on use of external information systems

-
-
-
- - Portable Storage Devices - - - - AC-20(2) - -

The organization the use of organization-controlled portable storage devices by authorized individuals on external information systems.

-
- -

Limits on the use of organization-controlled portable storage devices in external information systems include, for example, complete prohibition of the use of such devices or restrictions on how the devices may be used and under what conditions the devices may be used.

-
- -

Determine if the organization restricts or prohibits the use of organization-controlled portable storage devices by authorized individuals on external information systems.

-
- - EXAMINE - -

Access control policy

-

procedures addressing the use of external information systems

-

security plan

-

information system configuration settings and associated documentation

-

information system connection or processing agreements

-

account management documents

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for restricting or prohibiting use of organization-controlled storage devices on external information systems

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing restrictions on use of portable storage devices

-
-
-
- - Non-organizationally Owned Systems / Components / Devices - - - - AC-20(3) - -

The organization the use of non-organizationally owned information systems, system components, or devices to process, store, or transmit organizational information.

-
- -

Non-organizationally owned devices include devices owned by other organizations (e.g., federal/state agencies, contractors) and personally owned devices. There are risks to using non-organizationally owned devices. In some cases, the risk is sufficiently high as to prohibit such use. In other cases, it may be such that the use of non-organizationally owned devices is allowed but restricted in some way. Restrictions include, for example: (i) requiring the implementation of organization-approved security controls prior to authorizing such connections; (ii) limiting access to certain types of information, services, or applications; (iii) using virtualization techniques to limit processing and storage activities to servers or other system components provisioned by the organization; and (iv) agreeing to terms and conditions for usage. For personally owned devices, organizations consult with the Office of the General Counsel regarding legal issues associated with using such devices in operational environments, including, for example, requirements for conducting forensic analyses during investigations after an incident.

-
- -

Determine if the organization restricts or prohibits the use of non-organizationally owned information systems, system components, or devices to process, store, or transmit organizational information.

-
- - EXAMINE - -

Access control policy

-

procedures addressing the use of external information systems

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system connection or processing agreements

-

account management documents

-

information system audit records, other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for restricting or prohibiting use of non-organizationally owned information systems, system components, or devices

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing restrictions on the use of non-organizationally owned systems/components/devices

-
-
-
- - Network Accessible Storage Devices - - - - AC-20(4) - -

The organization prohibits the use of in external information systems.

-
- -

Network accessible storage devices in external information systems include, for example, online storage devices in public, hybrid, or community cloud-based systems.

-
- -

Determine if the organization:

- - AC-20(4)[1] -

defines network accessible storage devices to be prohibited from use in external information systems; and

-
- - AC-20(4)[2] -

prohibits the use of organization-defined network accessible storage devices in external information systems.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing use of network accessible storage devices in external information systems

-

security plan, information system design documentation

-

information system configuration settings and associated documentation

-

information system connection or processing agreements

-

list of network accessible storage devices prohibited from use in external information systems

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for prohibiting use of network accessible storage devices in external information systems

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms prohibiting the use of network accessible storage devices in external information systems

-
-
-
- - FIPS Publication 199 - -
- - Information Sharing - - - - - - - AC-21 - -

The organization:

- - a. -

Facilitates information sharing by enabling authorized users to determine whether access authorizations assigned to the sharing partner match the access restrictions on the information for ; and

-
- - b. -

Employs to assist users in making information sharing/collaboration decisions.

-
-
- -

This control applies to information that may be restricted in some manner (e.g., privileged medical information, contract-sensitive information, proprietary information, personally identifiable information, classified information related to special access programs or compartments) based on some formal or administrative determination. Depending on the particular information-sharing circumstances, sharing partners may be defined at the individual, group, or organizational level. Information may be defined by content, type, security category, or special access program/compartment.

- AC-3 -
- -

Determine if the organization:

- - AC-21(a) - - AC-21(a)[1] -

defines information sharing circumstances where user discretion is required;

-
- - AC-21(a)[2] -

facilitates information sharing by enabling authorized users to determine whether access authorizations assigned to the sharing partner match the access restrictions on the information for organization-defined information sharing circumstances;

-
-
- - AC-21(b) - - AC-21(b)[1] -

defines automated mechanisms or manual processes to be employed to assist users in making information sharing/collaboration decisions; and

-
- - AC-21(b)[2] -

employs organization-defined automated mechanisms or manual processes to assist users in making information sharing/collaboration decisions.

-
-
-
- - EXAMINE - -

Access control policy

-

procedures addressing user-based collaboration and information sharing (including restrictions)

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of users authorized to make information sharing/collaboration decisions

-

list of information sharing circumstances requiring user discretion

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel responsible for making information sharing/collaboration decisions

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms or manual process implementing access authorizations supporting information sharing/user collaboration decisions

-
-
- - Automated Decision Support - AC-21(1) - -

The information system enforces information-sharing decisions by authorized users based on access authorizations of sharing partners and access restrictions on information to be shared.

-
- -

Determine if the information system enforces information-sharing decisions by authorized users based on:

- - AC-21(1)[1] -

access authorizations of sharing partners; and

-
- - AC-21(1)[2] -

access restrictions on information to be shared.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing user-based collaboration and information sharing (including restrictions)

-

information system design documentation

-

information system configuration settings and associated documentation

-

system-generated list of users authorized to make information sharing/collaboration decisions

-

system-generated list of sharing partners and access authorizations

-

system-generated list of access restrictions regarding information to be shared

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing access authorizations supporting information sharing/user collaboration decisions

-
-
-
- - Information Search and Retrieval - - - - AC-21(2) - -

The information system implements information search and retrieval services that enforce .

-
- -

Determine if:

- - AC-21(2)[1] -

the organization defines information sharing restrictions to be enforced through information search and retrieval services; and

-
- - AC-21(2)[2] -

the information system implements information search and retrieval services that enforce organization-defined information sharing restrictions.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing user-based collaboration and information sharing (including restrictions)

-

information system design documentation

-

information system configuration settings and associated documentation

-

system-generated list of access restrictions regarding information to be shared

-

information search and retrieval records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with access enforcement responsibilities for information system search and retrieval services

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Information system search and retrieval services enforcing information sharing restrictions

-
-
-
-
- - Publicly Accessible Content - - - - AC-22 - -

The organization:

- - a. -

Designates individuals authorized to post information onto a publicly accessible information system;

-
- - b. -

Trains authorized individuals to ensure that publicly accessible information does not contain nonpublic information;

-
- - c. -

Reviews the proposed content of information prior to posting onto the publicly accessible information system to ensure that nonpublic information is not included; and

-
- - d. -

Reviews the content on the publicly accessible information system for nonpublic information and removes such information, if discovered.

-
-
- -

In accordance with federal laws, Executive Orders, directives, policies, regulations, standards, and/or guidance, the general public is not authorized access to nonpublic information (e.g., information protected under the Privacy Act and proprietary information). This control addresses information systems that are controlled by the organization and accessible to the general public, typically without identification or authentication. The posting of information on non-organization information systems is covered by organizational policy.

- AC-3 - AC-4 - AT-2 - AT-3 - AU-13 -
- -

Determine if the organization:

- - AC-22(a) -

designates individuals authorized to post information onto a publicly accessible information system;

-
- - AC-22(b) -

trains authorized individuals to ensure that publicly accessible information does not contain nonpublic information;

-
- - AC-22(c) -

reviews the proposed content of information prior to posting onto the publicly accessible information system to ensure that nonpublic information is not included;

-
- - AC-22(d) - - AC-22(d)[1] -

defines the frequency to review the content on the publicly accessible information system for nonpublic information;

-
- - AC-22(d)[2] -

reviews the content on the publicly accessible information system for nonpublic information with the organization-defined frequency; and

-
- - AC-22(d)[3] -

removes nonpublic information from the publicly accessible information system, if discovered.

-
-
-
- - EXAMINE - -

Access control policy

-

procedures addressing publicly accessible content

-

list of users authorized to post publicly accessible content on organizational information systems

-

training materials and/or records

-

records of publicly accessible information reviews

-

records of response to nonpublic information on public websites

-

system audit logs

-

security awareness training records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for managing publicly accessible information posted on organizational information systems

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing management of publicly accessible content

-
-
-
- - Data Mining Protection - - - - - - - AC-23 - -

The organization employs for to adequately detect and protect against data mining.

-
- -

Data storage objects include, for example, databases, database records, and database fields. Data mining prevention and detection techniques include, for example: (i) limiting the types of responses provided to database queries; (ii) limiting the number/frequency of database queries to increase the work factor needed to determine the contents of such databases; and (iii) notifying organizational personnel when atypical database queries or accesses occur. This control focuses on the protection of organizational information from data mining while such information resides in organizational data stores. In contrast, AU-13 focuses on monitoring for organizational information that may have been mined or otherwise obtained from data stores and is now available as open source information residing on external sites, for example, through social networking or social media websites.

-
- -

Determine if the organization:

- - AC-23[1] -

defines data mining prevention and detection techniques to be employed for organization-defined storage objects to adequately detect and protect against data mining;

-
- - AC-23[2] -

defines data storage objects to be protected from data mining; and

-
- - AC-23[3] -

employs organization-defined data mining prevention and detection techniques for organization-defined data storage objects to adequately detect and protect against data mining.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing data mining techniques

-

procedures addressing protection of data storage objects against data mining

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit logs

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for implementing data mining detection and prevention techniques for data storage objects

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing data mining prevention and detection

-
-
-
- - Access Control Decisions - - - - AC-24 - -

The organization establishes procedures to ensure are applied to each access request prior to access enforcement.

-
- -

Access control decisions (also known as authorization decisions) occur when authorization information is applied to specific accesses. In contrast, access enforcement occurs when information systems enforce access control decisions. While it is very common to have access control decisions and access enforcement implemented by the same entity, it is not required and it is not always an optimal implementation choice. For some architectures and distributed information systems, different entities may perform access control decisions and access enforcement.

-
- -

Determine if the organization:

- - AC-24[1] -

defines access control decisions to be applied to each access request prior to access control enforcement; and

-
- - AC-24[2] -

establishes procedures to ensure organization-defined access control decisions are applied to each access request prior to access control enforcement.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing access control decisions

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for establishing procedures regarding access control decisions to the information system

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms applying established access control decisions and procedures

-
-
- - Transmit Access Authorization Information - - - - - - - - - - AC-24(1) - -

The information system transmits using to that enforce access control decisions.

-
- -

In distributed information systems, authorization processes and access control decisions may occur in separate parts of the systems. In such instances, authorization information is transmitted securely so timely access control decisions can be enforced at the appropriate locations. To support the access control decisions, it may be necessary to transmit as part of the access authorization information, supporting security attributes. This is due to the fact that in distributed information systems, there are various access control decisions that need to be made and different entities (e.g., services) make these decisions in a serial fashion, each requiring some security attributes to make the decisions. Protecting access authorization information (i.e., access control decisions) ensures that such information cannot be altered, spoofed, or otherwise compromised during transmission.

-
- -

Determine if:

- - AC-24(1)[1] -

the organization defines access authorization information that the information system transmits to organization-defined information systems that enforce access control decisions;

-
- - AC-24(1)[2] -

the organization defines security safeguards to be used when the information system transmits organization-defined authorization information to organization-defined information systems that enforce access control decisions;

-
- - AC-24(1)[3] -

the organization defines the information systems that enforce access control decisions; and

-
- - AC-24(1)[4] -

the information system transmits organization-defined access authorization information using organization-defined security safeguards to organization-defined information systems that enforce access control decisions.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing access enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with access enforcement responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing access enforcement functions

-
-
-
- - No User or Process Identity - - - - AC-24(2) - -

The information system enforces access control decisions based on that do not include the identity of the user or process acting on behalf of the user.

-
- -

In certain situations, it is important that access control decisions can be made without information regarding the identity of the users issuing the requests. These are generally instances where preserving individual privacy is of paramount importance. In other situations, user identification information is simply not needed for access control decisions and, especially in the case of distributed information systems, transmitting such information with the needed degree of assurance may be very expensive or difficult to accomplish.

-
- -

Determine if:

- - AC-24(2)[1] -

the organization defines security attributes that support access control decisions that do not include the identity of the user or processes acting on behalf of the user; and

-
- - AC-24(2)[2] -

the information system enforces access control decisions based on organization-defined security attributes that do not include the identity of the user or process acting on behalf of the user.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing access enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with access enforcement responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing access enforcement functions

-
-
-
-
- - Reference Monitor - - - - AC-25 - -

The information system implements a reference monitor for that is tamperproof, always invoked, and small enough to be subject to analysis and testing, the completeness of which can be assured.

-
- -

Information is represented internally within information systems using abstractions known as data structures. Internal data structures can represent different types of entities, both active and passive. Active entities, also known as subjects, are typically associated with individuals, devices, or processes acting on behalf of individuals. Passive entities, also known as objects, are typically associated with data structures such as records, buffers, tables, files, inter-process pipes, and communications ports. Reference monitors typically enforce mandatory access control policies—a type of access control that restricts access to objects based on the identity of subjects or groups to which the subjects belong. The access controls are mandatory because subjects with certain privileges (i.e., access permissions) are restricted from passing those privileges on to any other subjects, either directly or indirectly—that is, the information system strictly enforces the access control policy based on the rule set established by the policy. The tamperproof property of the reference monitor prevents adversaries from compromising the functioning of the mechanism. The always invoked property prevents adversaries from bypassing the mechanism and hence violating the security policy. The smallness property helps to ensure the completeness in the analysis and testing of the mechanism to detect weaknesses or deficiencies (i.e., latent flaws) that would prevent the enforcement of the security policy.

- AC-3 - AC-16 - SC-3 - SC-39 -
- -

Determine if:

- - AC-25[1] -

the organization defines access control policies for which the information system implements a reference monitor to enforce such policies; and

-
- - AC-25[2] -

the information system implements a reference monitor for organization-defined access control policies that is tamperproof, always invoked, and small enough to be subject to analysis and testing, the completeness of which can be assured.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing access enforcement

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with access enforcement responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing access enforcement functions

-
-
-
-
- - Awareness and Training - - Security Awareness and Training Policy and Procedures - - - - - - - - - - AT-1 - -

The organization:

- - a. -

Develops, documents, and disseminates to :

- - 1. -

A security awareness and training policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and

-
- - 2. -

Procedures to facilitate the implementation of the security awareness and training policy and associated security awareness and training controls; and

-
-
- - b. -

Reviews and updates the current:

- - 1. -

Security awareness and training policy ; and

-
- - 2. -

Security awareness and training procedures .

-
-
-
- -

This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the AT family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures.

- PM-9 -
- -

Determine if the organization:

- - AT-1(a) - - AT-1(a)(1) - - AT-1(a)(1)[1] -

develops and documents an security awareness and training policy that addresses:

- - AT-1(a)(1)[1][a] -

purpose;

-
- - AT-1(a)(1)[1][b] -

scope;

-
- - AT-1(a)(1)[1][c] -

roles;

-
- - AT-1(a)(1)[1][d] -

responsibilities;

-
- - AT-1(a)(1)[1][e] -

management commitment;

-
- - AT-1(a)(1)[1][f] -

coordination among organizational entities;

-
- - AT-1(a)(1)[1][g] -

compliance;

-
-
- - AT-1(a)(1)[2] -

defines personnel or roles to whom the security awareness and training policy are to be disseminated;

-
- - AT-1(a)(1)[3] -

disseminates the security awareness and training policy to organization-defined personnel or roles;

-
-
- - AT-1(a)(2) - - AT-1(a)(2)[1] -

develops and documents procedures to facilitate the implementation of the security awareness and training policy and associated awareness and training controls;

-
- - AT-1(a)(2)[2] -

defines personnel or roles to whom the procedures are to be disseminated;

-
- - AT-1(a)(2)[3] -

disseminates the procedures to organization-defined personnel or roles;

-
-
-
- - AT-1(b) - - AT-1(b)(1) - - AT-1(b)(1)[1] -

defines the frequency to review and update the current security awareness and training policy;

-
- - AT-1(b)(1)[2] -

reviews and updates the current security awareness and training policy with the organization-defined frequency;

-
-
- - AT-1(b)(2) - - AT-1(b)(2)[1] -

defines the frequency to review and update the current security awareness and training procedures; and

-
- - AT-1(b)(2)[2] -

reviews and updates the current security awareness and training procedures with the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

Security awareness and training policy and procedures

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security awareness and training responsibilities

-

organizational personnel with information security responsibilities

-
-
- - NIST Special Publication 800-12 - - NIST Special Publication 800-16 - - NIST Special Publication 800-50 - - NIST Special Publication 800-100 - -
- - Security Awareness Training - - - - AT-2 - -

The organization provides basic security awareness training to information system users (including managers, senior executives, and contractors):

- - a. -

As part of initial training for new users;

-
- - b. -

When required by information system changes; and

-
- - c. -

- thereafter.

-
-
- -

Organizations determine the appropriate content of security awareness training and security awareness techniques based on the specific organizational requirements and the information systems to which personnel have authorized access. The content includes a basic understanding of the need for information security and user actions to maintain security and to respond to suspected security incidents. The content also addresses awareness of the need for operations security. Security awareness techniques can include, for example, displaying posters, offering supplies inscribed with security reminders, generating email advisories/notices from senior organizational officials, displaying logon screen messages, and conducting information security awareness events.

- AT-3 - AT-4 - PL-4 -
- -

Determine if the organization:

- - AT-2(a) -

provides basic security awareness training to information system users (including managers, senior executives, and contractors) as part of initial training for new users;

-
- - AT-2(b) -

provides basic security awareness training to information system users (including managers, senior executives, and contractors) when required by information system changes; and

-
- - AT-2(c) - - AT-2(c)[1] -

defines the frequency to provide refresher security awareness training thereafter to information system users (including managers, senior executives, and contractors); and

-
- - AT-2(c)[2] -

provides refresher security awareness training to information users (including managers, senior executives, and contractors) with the organization-defined frequency.

-
-
-
- - EXAMINE - -

Security awareness and training policy

-

procedures addressing security awareness training implementation

-

appropriate codes of federal regulations

-

security awareness training curriculum

-

security awareness training materials

-

security plan

-

training records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for security awareness training

-

organizational personnel with information security responsibilities

-

organizational personnel comprising the general information system user community

-
-
- - TEST - -

Automated mechanisms managing security awareness training

-
-
- - Practical Exercises - AT-2(1) - -

The organization includes practical exercises in security awareness training that simulate actual cyber attacks.

-
- -

Practical exercises may include, for example, no-notice social engineering attempts to collect information, gain unauthorized access, or simulate the adverse impact of opening malicious email attachments or invoking, via spear phishing attacks, malicious web links.

- CA-2 - CA-7 - CP-4 - IR-3 -
- -

Determine if the organization includes practical exercises in security awareness training that simulate actual cyber attacks.

-
- - EXAMINE - -

Security awareness and training policy

-

procedures addressing security awareness training implementation

-

security awareness training curriculum

-

security awareness training materials

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel that participate in security awareness training

-

organizational personnel with responsibilities for security awareness training

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing cyber attack simulations in practical exercises

-
-
-
- - Insider Threat - AT-2(2) - -

The organization includes security awareness training on recognizing and reporting potential indicators of insider threat.

-
- -

Potential indicators and possible precursors of insider threat can include behaviors such as inordinate, long-term job dissatisfaction, attempts to gain access to information not required for job performance, unexplained access to financial resources, bullying or sexual harassment of fellow employees, workplace violence, and other serious violations of organizational policies, procedures, directives, rules, or practices. Security awareness training includes how to communicate employee and management concerns regarding potential indicators of insider threat through appropriate organizational channels in accordance with established organizational policies and procedures.

- PL-4 - PM-12 - PS-3 - PS-6 -
- -

Determine if the organization includes security awareness training on recognizing and reporting potential indicators of insider threat.

-
- - EXAMINE - -

Security awareness and training policy

-

procedures addressing security awareness training implementation

-

security awareness training curriculum

-

security awareness training materials

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel that participate in security awareness training

-

organizational personnel with responsibilities for basic security awareness training

-

organizational personnel with information security responsibilities

-
-
-
- - C.F.R. Part 5 Subpart C (5 C.F.R. 930.301) - - Executive Order 13587 - - NIST Special Publication 800-50 - -
- - Role-based Security Training - - - - AT-3 - -

The organization provides role-based security training to personnel with assigned security roles and responsibilities:

- - a. -

Before authorizing access to the information system or performing assigned duties;

-
- - b. -

When required by information system changes; and

-
- - c. -

- thereafter.

-
-
- -

Organizations determine the appropriate content of security training based on the assigned roles and responsibilities of individuals and the specific security requirements of organizations and the information systems to which personnel have authorized access. In addition, organizations provide enterprise architects, information system developers, software developers, acquisition/procurement officials, information system managers, system/network administrators, personnel conducting configuration management and auditing activities, personnel performing independent verification and validation activities, security control assessors, and other personnel having access to system-level software, adequate security-related technical training specifically tailored for their assigned duties. Comprehensive role-based training addresses management, operational, and technical roles and responsibilities covering physical, personnel, and technical safeguards and countermeasures. Such training can include for example, policies, procedures, tools, and artifacts for the organizational security roles defined. Organizations also provide the training necessary for individuals to carry out their responsibilities related to operations and supply chain security within the context of organizational information security programs. Role-based security training also applies to contractors providing services to federal agencies.

- AT-2 - AT-4 - PL-4 - PS-7 - SA-3 - SA-12 - SA-16 -
- -

Determine if the organization:

- - AT-3(a) -

provides role-based security training to personnel with assigned security roles and responsibilities before authorizing access to the information system or performing assigned duties;

-
- - AT-3(b) -

provides role-based security training to personnel with assigned security roles and responsibilities when required by information system changes; and

-
- - AT-3(c) - - AT-3(c)[1] -

defines the frequency to provide refresher role-based security training thereafter to personnel with assigned security roles and responsibilities; and

-
- - AT-3(c)[2] -

provides refresher role-based security training to personnel with assigned security roles and responsibilities with the organization-defined frequency.

-
-
-
- - EXAMINE - -

Security awareness and training policy

-

procedures addressing security training implementation

-

codes of federal regulations

-

security training curriculum

-

security training materials

-

security plan

-

training records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for role-based security training

-

organizational personnel with assigned information system security roles and responsibilities

-
-
- - TEST - -

Automated mechanisms managing role-based security training

-
-
- - Environmental Controls - - - - - - - AT-3(1) - -

The organization provides with initial and training in the employment and operation of environmental controls.

-
- -

Environmental controls include, for example, fire suppression and detection devices/systems, sprinkler systems, handheld fire extinguishers, fixed fire hoses, smoke detectors, temperature/humidity, HVAC, and power within the facility. Organizations identify personnel with specific roles and responsibilities associated with environmental controls requiring specialized training.

- PE-1 - PE-13 - PE-14 - PE-15 -
- -

Determine if the organization:

- - AT-3(1)[1] -

defines personnel or roles to be provided with initial and refresher training in the employment and operation of environmental controls;

-
- - AT-3(1)[2] -

provides organization-defined personnel or roles with initial and refresher training in the employment and operation of environmental controls;

-
- - AT-3(1)[3] -

defines the frequency to provide refresher training in the employment and operation of environmental controls; and

-
- - AT-3(1)[4] -

provides refresher training in the employment and operation of environmental controls with the organization-defined frequency.

-
-
- - EXAMINE - -

Security awareness and training policy

-

procedures addressing security training implementation

-

security training curriculum

-

security training materials

-

security plan

-

training records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for role-based security training

-

organizational personnel with responsibilities for employing and operating environmental controls

-
-
-
- - Physical Security Controls - - - - - - - AT-3(2) - -

The organization provides with initial and training in the employment and operation of physical security controls.

-
- -

Physical security controls include, for example, physical access control devices, physical intrusion alarms, monitoring/surveillance equipment, and security guards (deployment and operating procedures). Organizations identify personnel with specific roles and responsibilities associated with physical security controls requiring specialized training.

- PE-2 - PE-3 - PE-4 - PE-5 -
- -

Determine if the organization:

- - AT-3(2)[1] -

defines personnel or roles to be provided with initial and refresher training in the employment and operation of physical security controls;

-
- - AT-3(2)[2] -

provides organization-defined personnel or roles with initial and refresher training in the employment and operation of physical security controls;

-
- - AT-3(2)[3] -

defines the frequency to provide refresher training in the employment and operation of physical security controls; and

-
- - AT-3(2)[4] -

provides refresher training in the employment and operation of physical security controls with the organization-defined frequency.

-
-
- - EXAMINE - -

Security awareness and training policy

-

procedures addressing security training implementation

-

security training curriculum

-

security training materials

-

security plan

-

training records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for role-based security training

-

organizational personnel with responsibilities for employing and operating physical security controls

-
-
-
- - Practical Exercises - AT-3(3) - -

The organization includes practical exercises in security training that reinforce training objectives.

-
- -

Practical exercises may include, for example, security training for software developers that includes simulated cyber attacks exploiting common software vulnerabilities (e.g., buffer overflows), or spear/whale phishing attacks targeted at senior leaders/executives. These types of practical exercises help developers better understand the effects of such vulnerabilities and appreciate the need for security coding standards and processes.

-
- -

Determine if the organization includes practical exercises in security training that reinforce training objectives.

-
- - EXAMINE - -

Security awareness and training policy

-

procedures addressing security awareness training implementation

-

security awareness training curriculum

-

security awareness training materials

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for role-based security training

-

organizational personnel that participate in security awareness training

-
-
-
- - Suspicious Communications and Anomalous System Behavior - - - - AT-3(4) - -

The organization provides training to its personnel on to recognize suspicious communications and anomalous behavior in organizational information systems.

-
- -

A well-trained workforce provides another organizational safeguard that can be employed as part of a defense-in-depth strategy to protect organizations against malicious code coming in to organizations via email or the web applications. Personnel are trained to look for indications of potentially suspicious email (e.g., receiving an unexpected email, receiving an email containing strange or poor grammar, or receiving an email from an unfamiliar sender but who appears to be from a known sponsor or contractor). Personnel are also trained on how to respond to such suspicious email or web communications (e.g., not opening attachments, not clicking on embedded web links, and checking the source of email addresses). For this process to work effectively, all organizational personnel are trained and made aware of what constitutes suspicious communications. Training personnel on how to recognize anomalous behaviors in organizational information systems can potentially provide early warning for the presence of malicious code. Recognition of such anomalous behavior by organizational personnel can supplement automated malicious code detection and protection tools and systems employed by organizations.

-
- -

Determine if the organization:

- - AT-3(4)[1] -

defines indicators of malicious code; and

-
- - AT-3(4)[2] -

provides training to its personnel on organization-defined indicators of malicious code to recognize suspicious communications and anomalous behavior in organizational information systems.

-
-
- - EXAMINE - -

Security awareness and training policy

-

procedures addressing security training implementation

-

security training curriculum

-

security training materials

-

security plan

-

training records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for role-based security training

-

organizational personnel that participate in security awareness training

-
-
-
- - C.F.R. Part 5 Subpart C (5 C.F.R. 930.301) - - NIST Special Publication 800-16 - - NIST Special Publication 800-50 - -
- - Security Training Records - - - - AT-4 - -

The organization:

- - a. -

Documents and monitors individual information system security training activities including basic security awareness training and specific information system security training; and

-
- - b. -

Retains individual training records for .

-
-
- -

Documentation for specialized training may be maintained by individual supervisors at the option of the organization.

- AT-2 - AT-3 - PM-14 -
- -

Determine if the organization:

- - AT-4(a) - - AT-4(a)[1] -

documents individual information system security training activities including:

- - AT-4(a)[1][a] -

basic security awareness training;

-
- - AT-4(a)[1][b] -

specific role-based information system security training;

-
-
- - AT-4(a)[2] -

monitors individual information system security training activities including:

- - AT-4(a)[2][a] -

basic security awareness training;

-
- - AT-4(a)[2][b] -

specific role-based information system security training;

-
-
-
- - AT-4(b) - - AT-4(b)[1] -

defines a time period to retain individual training records; and

-
- - AT-4(b)[2] -

retains individual training records for the organization-defined time period.

-
-
-
- - EXAMINE - -

Security awareness and training policy

-

procedures addressing security training records

-

security awareness and training records

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security training record retention responsibilities

-
-
- - TEST - -

Automated mechanisms supporting management of security training records

-
-
-
- - Contacts with Security Groups and Associations - AT-5 - Withdrawn - PM-15 - -
- - Audit and Accountability - - Audit and Accountability Policy and Procedures - - - - - - - - - - AU-1 - -

The organization:

- - a. -

Develops, documents, and disseminates to :

- - 1. -

An audit and accountability policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and

-
- - 2. -

Procedures to facilitate the implementation of the audit and accountability policy and associated audit and accountability controls; and

-
-
- - b. -

Reviews and updates the current:

- - 1. -

Audit and accountability policy ; and

-
- - 2. -

Audit and accountability procedures .

-
-
-
- -

This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the AU family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures.

- PM-9 -
- -

Determine if the organization:

- - AU-1(a) - - AU-1(a)(1) - - AU-1(a)(1)[1] -

develops and documents an audit and accountability policy that addresses:

- - AU-1(a)(1)[1][a] -

purpose;

-
- - AU-1(a)(1)[1][b] -

scope;

-
- - AU-1(a)(1)[1][c] -

roles;

-
- - AU-1(a)(1)[1][d] -

responsibilities;

-
- - AU-1(a)(1)[1][e] -

management commitment;

-
- - AU-1(a)(1)[1][f] -

coordination among organizational entities;

-
- - AU-1(a)(1)[1][g] -

compliance;

-
-
- - AU-1(a)(1)[2] -

defines personnel or roles to whom the audit and accountability policy are to be disseminated;

-
- - AU-1(a)(1)[3] -

disseminates the audit and accountability policy to organization-defined personnel or roles;

-
-
- - AU-1(a)(2) - - AU-1(a)(2)[1] -

develops and documents procedures to facilitate the implementation of the audit and accountability policy and associated audit and accountability controls;

-
- - AU-1(a)(2)[2] -

defines personnel or roles to whom the procedures are to be disseminated;

-
- - AU-1(a)(2)[3] -

disseminates the procedures to organization-defined personnel or roles;

-
-
-
- - AU-1(b) - - AU-1(b)(1) - - AU-1(b)(1)[1] -

defines the frequency to review and update the current audit and accountability policy;

-
- - AU-1(b)(1)[2] -

reviews and updates the current audit and accountability policy with the organization-defined frequency;

-
-
- - AU-1(b)(2) - - AU-1(b)(2)[1] -

defines the frequency to review and update the current audit and accountability procedures; and

-
- - AU-1(b)(2)[2] -

reviews and updates the current audit and accountability procedures in accordance with the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

Audit and accountability policy and procedures

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit and accountability responsibilities

-

organizational personnel with information security responsibilities

-
-
- - NIST Special Publication 800-12 - - NIST Special Publication 800-100 - -
- - Audit Events - - - - - - - AU-2 - -

The organization:

- - a. -

Determines that the information system is capable of auditing the following events: ;

-
- - b. -

Coordinates the security audit function with other organizational entities requiring audit-related information to enhance mutual support and to help guide the selection of auditable events;

-
- - c. -

Provides a rationale for why the auditable events are deemed to be adequate to support after-the-fact investigations of security incidents; and

-
- - d. -

Determines that the following events are to be audited within the information system: .

-
-
- -

An event is any observable occurrence in an organizational information system. Organizations identify audit events as those events which are significant and relevant to the security of information systems and the environments in which those systems operate in order to meet specific and ongoing audit needs. Audit events can include, for example, password changes, failed logons, or failed accesses related to information systems, administrative privilege usage, PIV credential usage, or third-party credential usage. In determining the set of auditable events, organizations consider the auditing appropriate for each of the security controls to be implemented. To balance auditing requirements with other information system needs, this control also requires identifying that subset of auditable events that are audited at a given point in time. For example, organizations may determine that information systems must have the capability to log every file access both successful and unsuccessful, but not activate that capability except for specific circumstances due to the potential burden on system performance. Auditing requirements, including the need for auditable events, may be referenced in other security controls and control enhancements. Organizations also include auditable events that are required by applicable federal laws, Executive Orders, directives, policies, regulations, and standards. Audit records can be generated at various levels of abstraction, including at the packet level as information traverses the network. Selecting the appropriate level of abstraction is a critical aspect of an audit capability and can facilitate the identification of root causes to problems. Organizations consider in the definition of auditable events, the auditing necessary to cover related events such as the steps in distributed, transaction-based processes (e.g., processes that are distributed across multiple organizations) and actions that occur in service-oriented architectures.

- AC-6 - AC-17 - AU-3 - AU-12 - MA-4 - MP-2 - MP-4 - SI-4 -
- -

Determine if the organization:

- - AU-2(a) - - AU-2(a)[1] -

defines the auditable events that the information system must be capable of auditing;

-
- - AU-2(a)[2] -

determines that the information system is capable of auditing organization-defined auditable events;

-
-
- - AU-2(b) -

coordinates the security audit function with other organizational entities requiring audit-related information to enhance mutual support and to help guide the selection of auditable events;

-
- - AU-2(c) -

provides a rationale for why the auditable events are deemed to be adequate to support after-the-fact investigations of security incidents;

-
- - AU-2(d) - - AU-2(d)[1] -

defines the subset of auditable events defined in AU-2a that are to be audited within the information system;

-
- - AU-2(d)[2] -

determines that the subset of auditable events defined in AU-2a are to be audited within the information system; and

-
- - AU-2(d)[3] -

determines the frequency of (or situation requiring) auditing for each identified event.

-
-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing auditable events

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

information system auditable events

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit and accountability responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms implementing information system auditing

-
-
- - Compilation of Audit Records from Multiple Sources - AU-2(1) - Withdrawn - AU-12 - - - Selection of Audit Events by Component - AU-2(2) - Withdrawn - AU-12 - - - Reviews and Updates - - - - AU-2(3) - -

The organization reviews and updates the audited events .

-
- -

Over time, the events that organizations believe should be audited may change. Reviewing and updating the set of audited events periodically is necessary to ensure that the current set is still necessary and sufficient.

-
- -

Determine if the organization:

- - AU-2(3)[1] -

defines the frequency to review and update the audited events; and

-
- - AU-2(3)[2] -

reviews and updates the auditable events with organization-defined frequency.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing auditable events

-

security plan

-

list of organization-defined auditable events

-

auditable events review and update records

-

information system audit records

-

information system incident reports

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit and accountability responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting review and update of auditable events

-
-
-
- - Privileged Functions - AU-2(4) - Withdrawn - AC-6 (9) - - - NIST Special Publication 800-92 - - http://idmanagement.gov - -
- - Content of Audit Records - AU-3 - -

The information system generates audit records containing information that establishes what type of event occurred, when the event occurred, where the event occurred, the source of the event, the outcome of the event, and the identity of any individuals or subjects associated with the event.

-
- -

Audit record content that may be necessary to satisfy the requirement of this control, includes, for example, time stamps, source and destination addresses, user/process identifiers, event descriptions, success/fail indications, filenames involved, and access control or flow control rules invoked. Event outcomes can include indicators of event success or failure and event-specific results (e.g., the security state of the information system after the event occurred).

- AU-2 - AU-8 - AU-12 - SI-11 -
- -

Determine if the information system generates audit records containing information that establishes:

- - AU-3[1] -

what type of event occurred;

-
- - AU-3[2] -

when the event occurred;

-
- - AU-3[3] -

where the event occurred;

-
- - AU-3[4] -

the source of the event;

-
- - AU-3[5] -

the outcome of the event; and

-
- - AU-3[6] -

the identity of any individuals or subjects associated with the event.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing content of audit records

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of organization-defined auditable events

-

information system audit records

-

information system incident reports

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit and accountability responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms implementing information system auditing of auditable events

-
-
- - Additional Audit Information - - - - AU-3(1) - -

The information system generates audit records containing the following additional information: .

-
- -

Detailed information that organizations may consider in audit records includes, for example, full text recording of privileged commands or the individual identities of group account users. Organizations consider limiting the additional audit information to only that information explicitly needed for specific audit requirements. This facilitates the use of audit trails and audit logs by not including information that could potentially be misleading or could make it more difficult to locate information of interest.

-
- -

Determine if:

- - AU-3(1)[1] -

the organization defines additional, more detailed information to be contained in audit records that the information system generates; and

-
- - AU-3(1)[2] -

the information system generates audit records containing the organization-defined additional, more detailed information.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing content of audit records

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of organization-defined auditable events

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit and accountability responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Information system audit capability

-
-
-
- - Centralized Management of Planned Audit Record Content - - - - AU-3(2) - -

The information system provides centralized management and configuration of the content to be captured in audit records generated by .

-
- -

This control enhancement requires that the content to be captured in audit records be configured from a central location (necessitating automation). Organizations coordinate the selection of required audit content to support the centralized management and configuration capability provided by the information system.

- AU-6 - AU-7 -
- -

Determine if:

- - AU-3(2)[1] -

the organization defines information system components that generate audit records whose content is to be centrally managed and configured by the information system; and

-
- - AU-3(2)[2] -

the information system provides centralized management and configuration of the content to be captured in audit records generated by the organization-defined information system components.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing content of audit records

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of organization-defined auditable events

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit and accountability responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Information system capability implementing centralized management and configuration of audit record content

-
-
-
-
- - Audit Storage Capacity - - - - AU-4 - -

The organization allocates audit record storage capacity in accordance with .

-
- -

Organizations consider the types of auditing to be performed and the audit processing requirements when allocating audit storage capacity. Allocating sufficient audit storage capacity reduces the likelihood of such capacity being exceeded and resulting in the potential loss or reduction of auditing capability.

- AU-2 - AU-5 - AU-6 - AU-7 - AU-11 - SI-4 -
- -

Determine if the organization:

- - AU-4[1] -

defines audit record storage requirements; and

-
- - AU-4[2] -

allocates audit record storage capacity in accordance with the organization-defined audit record storage requirements.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing audit storage capacity

-

information system design documentation

-

information system configuration settings and associated documentation

-

audit record storage requirements

-

audit record storage capability for information system components

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit and accountability responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Audit record storage capacity and related configuration settings

-
-
- - Transfer to Alternate Storage - - - - AU-4(1) - -

The information system off-loads audit records onto a different system or media than the system being audited.

-
- -

Off-loading is a process designed to preserve the confidentiality and integrity of audit records by moving the records from the primary information system to a secondary or alternate system. It is a common process in information systems with limited audit storage capacity; the audit storage is used only in a transitory fashion until the system can communicate with the secondary or alternate system designated for storing the audit records, at which point the information is transferred.

-
- -

Determine if:

- - AU-4(1)[1] -

the organization defines the frequency to off-load audit records onto a different system or media than the system being audited; and

-
- - AU-4(1)[2] -

the information system off-loads audit records onto a different system or media than the system being audited with the organization-defined frequency.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing audit storage capacity

-

procedures addressing transfer of information system audit records to secondary or alternate systems

-

information system design documentation

-

information system configuration settings and associated documentation

-

logs of audit record transfers to secondary or alternate systems

-

information system audit records transferred to secondary or alternate systems

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit storage capacity planning responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms supporting transfer of audit records onto a different system

-
-
-
-
- - Response to Audit Processing Failures - - - - - - - AU-5 - -

The information system:

- - a. -

Alerts in the event of an audit processing failure; and

-
- - b. -

Takes the following additional actions: .

-
-
- -

Audit processing failures include, for example, software/hardware errors, failures in the audit capturing mechanisms, and audit storage capacity being reached or exceeded. Organizations may choose to define additional actions for different audit processing failures (e.g., by type, by location, by severity, or a combination of such factors). This control applies to each audit data storage repository (i.e., distinct information system component where audit records are stored), the total audit storage capacity of organizations (i.e., all audit data storage repositories combined), or both.

- AU-4 - SI-12 -
- -

Determine if:

- - AU-5(a) - - AU-5(a)[1] -

the organization defines the personnel or roles to be alerted in the event of an audit processing failure;

-
- - AU-5(a)[2] -

the information system alerts the organization-defined personnel or roles in the event of an audit processing failure;

-
-
- - AU-5(b) - - AU-5(b)[1] -

the organization defines additional actions to be taken (e.g., shutdown information system, overwrite oldest audit records, stop generating audit records) in the event of an audit processing failure; and

-
- - AU-5(b)[2] -

the information system takes the additional organization-defined actions in the event of an audit processing failure.

-
-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing response to audit processing failures

-

information system design documentation

-

security plan

-

information system configuration settings and associated documentation

-

list of personnel to be notified in case of an audit processing failure

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit and accountability responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing information system response to audit processing failures

-
-
- - Audit Storage Capacity - - - - - - - - - - AU-5(1) - -

The information system provides a warning to within when allocated audit record storage volume reaches of repository maximum audit record storage capacity.

-
- -

Organizations may have multiple audit data storage repositories distributed across multiple information system components, with each repository having different storage volume capacities.

-
- -

Determine if:

- - AU-5(1)[1] -

the organization defines:

- - AU-5(1)[1][a] -

personnel to be warned when allocated audit record storage volume reaches organization-defined percentage of repository maximum audit record storage capacity;

-
- - AU-5(1)[1][b] -

roles to be warned when allocated audit record storage volume reaches organization-defined percentage of repository maximum audit record storage capacity; and/or

-
- - AU-5(1)[1][c] -

locations to be warned when allocated audit record storage volume reaches organization-defined percentage of repository maximum audit record storage capacity;

-
-
- - AU-5(1)[2] -

the organization defines the time period within which the information system is to provide a warning to the organization-defined personnel, roles, and/or locations when allocated audit record storage volume reaches the organization-defined percentage of repository maximum audit record storage capacity;

-
- - AU-5(1)[3] -

the organization defines the percentage of repository maximum audit record storage capacity that, if reached, requires a warning to be provided; and

-
- - AU-5(1)[4] -

the information system provides a warning to the organization-defined personnel, roles, and/or locations within the organization-defined time period when allocated audit record storage volume reaches the organization-defined percentage of repository maximum audit record storage capacity.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing response to audit processing failures

-

information system design documentation

-

security plan

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit and accountability responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing audit storage limit warnings

-
-
-
- - Real-time Alerts - - - - - - - - - - AU-5(2) - -

The information system provides an alert in to when the following audit failure events occur: .

-
- -

Alerts provide organizations with urgent messages. Real-time alerts provide these messages at information technology speed (i.e., the time from event detection to alert occurs in seconds or less).

-
- -

Determine if:

- - AU-5(2)[1] -

the organization defines audit failure events requiring real-time alerts;

-
- - AU-5(2)[2] -

the organization defines:

- - AU-5(2)[2][a] -

personnel to be alerted when organization-defined audit failure events requiring real-time alerts occur;

-
- - AU-5(2)[2][b] -

roles to be alerted when organization-defined audit failure events requiring real-time alerts occur; and/or

-
- - AU-5(2)[2][c] -

locations to be alerted when organization-defined audit failure events requiring real-time alerts occur;

-
-
- - AU-5(2)[3] -

the organization defines the real-time period within which the information system is to provide an alert to the organization-defined personnel, roles, and/or locations when the organization-defined audit failure events requiring real-time alerts occur; and

-
- - AU-5(2)[4] -

the information system provides an alert within the organization-defined real-time period to the organization-defined personnel, roles, and/or locations when organization-defined audit failure events requiring real-time alerts occur.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing response to audit processing failures

-

information system design documentation

-

security plan

-

information system configuration settings and associated documentation

-

records of notifications or real-time alerts when audit processing failures occur

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit and accountability responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing real-time audit alerts when organization-defined audit failure events occur

-
-
-
- - Configurable Traffic Volume Thresholds - - - - AU-5(3) - -

The information system enforces configurable network communications traffic volume thresholds reflecting limits on auditing capacity and network traffic above those thresholds.

-
- -

Organizations have the capability to reject or delay the processing of network communications traffic if auditing such traffic is determined to exceed the storage capacity of the information system audit function. The rejection or delay response is triggered by the established organizational traffic volume thresholds which can be adjusted based on changes to audit storage capacity.

-
- -

Determine if:

- - AU-5(3)[1] -

the information system enforces configurable network communications traffic volume thresholds reflecting limits on auditing capacity;

-
- - AU-5(3)[2] -

the organization selects if network traffic above configurable traffic volume thresholds is to be:

- - AU-5(3)[2][a] -

rejected; or

-
- - AU-5(3)[2][b] -

delayed; and

-
-
- - AU-5(3)[3] -

the information system rejects or delays network communications traffic generated above configurable traffic volume thresholds.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing response to audit processing failures

-

information system design documentation

-

security plan

-

information system configuration settings and associated documentation

-

configuration of network communications traffic volume thresholds

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit and accountability responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Information system capability implementing configurable traffic volume thresholds

-
-
-
- - Shutdown On Failure - - - - - - - AU-5(4) - -

The information system invokes a in the event of , unless an alternate audit capability exists.

-
- -

Organizations determine the types of audit failures that can trigger automatic information system shutdowns or degraded operations. Because of the importance of ensuring mission/business continuity, organizations may determine that the nature of the audit failure is not so severe that it warrants a complete shutdown of the information system supporting the core organizational missions/business operations. In those instances, partial information system shutdowns or operating in a degraded mode with reduced capability may be viable alternatives.

- AU-15 -
- -

Determine if:

- - AU-5(4)[1] -

the organization selects one of the following specific actions for the information system to invoke in the event of organization-defined audit failures:

- - AU-5(4)[1][a] -

full system shutdown;

-
- - AU-5(4)[1][b] -

partial system shutdown; or

-
- - AU-5(4)[1][c] -

degraded operational mode with limited mission/business functionality available;

-
-
- - AU-5(4)[2] -

the organization defines audit failures that, unless an alternate audit capability exists, are to trigger the information system to invoke a specific action; and

-
- - AU-5(4)[3] -

the information system invokes the selected specific action in the event of organization-defined audit failures, unless an alternate audit capability exists.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing response to audit processing failures

-

information system design documentation

-

security plan

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit and accountability responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Information system capability invoking system shutdown or degraded operational mode in the event of an audit processing failure

-
-
-
-
- - Audit Review, Analysis, and Reporting - - - - - - - - - - AU-6 - -

The organization:

- - a. -

Reviews and analyzes information system audit records for indications of ; and

-
- - b. -

Reports findings to .

-
-
- -

Audit review, analysis, and reporting covers information security-related auditing performed by organizations including, for example, auditing that results from monitoring of account usage, remote access, wireless connectivity, mobile device connection, configuration settings, system component inventory, use of maintenance tools and nonlocal maintenance, physical access, temperature and humidity, equipment delivery and removal, communications at the information system boundaries, use of mobile code, and use of VoIP. Findings can be reported to organizational entities that include, for example, incident response team, help desk, information security group/department. If organizations are prohibited from reviewing and analyzing audit information or unable to conduct such activities (e.g., in certain national security applications or systems), the review/analysis may be carried out by other organizations granted such authority.

- AC-2 - AC-3 - AC-6 - AC-17 - AT-3 - AU-7 - AU-16 - CA-7 - CM-5 - CM-10 - CM-11 - IA-3 - IA-5 - IR-5 - IR-6 - MA-4 - MP-4 - PE-3 - PE-6 - PE-14 - PE-16 - RA-5 - SC-7 - SC-18 - SC-19 - SI-3 - SI-4 - SI-7 -
- -

Determine if the organization:

- - AU-6(a) - - AU-6(a)[1] -

defines the types of inappropriate or unusual activity to look for when information system audit records are reviewed and analyzed;

-
- - AU-6(a)[2] -

defines the frequency to review and analyze information system audit records for indications of organization-defined inappropriate or unusual activity;

-
- - AU-6(a)[3] -

reviews and analyzes information system audit records for indications of organization-defined inappropriate or unusual activity with the organization-defined frequency;

-
-
- - AU-6(b) - - AU-6(b)[1] -

defines personnel or roles to whom findings resulting from reviews and analysis of information system audit records are to be reported; and

-
- - AU-6(b)[2] -

reports findings to organization-defined personnel or roles.

-
-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing audit review, analysis, and reporting

-

reports of audit findings

-

records of actions taken in response to reviews/analyses of audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit review, analysis, and reporting responsibilities

-

organizational personnel with information security responsibilities

-
-
- - Process Integration - AU-6(1) - -

The organization employs automated mechanisms to integrate audit review, analysis, and reporting processes to support organizational processes for investigation and response to suspicious activities.

-
- -

Organizational processes benefiting from integrated audit review, analysis, and reporting include, for example, incident response, continuous monitoring, contingency planning, and Inspector General audits.

- AU-12 - PM-7 -
- -

Determine if the organization:

- - AU-6(1)[1] -

employs automated mechanisms to integrate:

- - AU-6(1)[1][a] -

audit review;

-
- - AU-6(1)[1][b] -

analysis;

-
- - AU-6(1)[1][c] -

reporting processes;

-
-
- - AU-6(1)[2] -

uses integrated audit review, analysis and reporting processes to support organizational processes for:

- - AU-6(1)[2][a] -

investigation of suspicious activities; and

-
- - AU-6(1)[2][b] -

response to suspicious activities.

-
-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing audit review, analysis, and reporting

-

procedures addressing investigation and response to suspicious activities

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit review, analysis, and reporting responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms integrating audit review, analysis, and reporting processes

-
-
-
- - Automated Security Alerts - AU-6(2) - Withdrawn - SI-4 - - - Correlate Audit Repositories - AU-6(3) - -

The organization analyzes and correlates audit records across different repositories to gain organization-wide situational awareness.

-
- -

Organization-wide situational awareness includes awareness across all three tiers of risk management (i.e., organizational, mission/business process, and information system) and supports cross-organization awareness.

- AU-12 - IR-4 -
- -

Determine if the organization analyzes and correlates audit records across different repositories to gain organization-wide situational awareness.

-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing audit review, analysis, and reporting

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records across different repositories

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit review, analysis, and reporting responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting analysis and correlation of audit records

-
-
-
- - Central Review and Analysis - AU-6(4) - -

The information system provides the capability to centrally review and analyze audit records from multiple components within the system.

-
- -

Automated mechanisms for centralized reviews and analyses include, for example, Security Information Management products.

- AU-2 - AU-12 -
- -

Determine if the information system provides the capability to centrally review and analyze audit records from multiple components within the system.

-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing audit review, analysis, and reporting

-

information system design documentation

-

information system configuration settings and associated documentation

-

security plan

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit review, analysis, and reporting responsibilities

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Information system capability to centralize review and analysis of audit records

-
-
-
- - Integration / Scanning and Monitoring Capabilities - - - - - - - AU-6(5) - -

The organization integrates analysis of audit records with analysis of to further enhance the ability to identify inappropriate or unusual activity.

-
- -

This control enhancement does not require vulnerability scanning, the generation of performance data, or information system monitoring. Rather, the enhancement requires that the analysis of information being otherwise produced in these areas is integrated with the analysis of audit information. Security Event and Information Management System tools can facilitate audit record aggregation/consolidation from multiple information system components as well as audit record correlation and analysis. The use of standardized audit record analysis scripts developed by organizations (with localized script adjustments, as necessary) provides more cost-effective approaches for analyzing audit record information collected. The correlation of audit record information with vulnerability scanning information is important in determining the veracity of vulnerability scans and correlating attack detection events with scanning results. Correlation with performance data can help uncover denial of service attacks or cyber attacks resulting in unauthorized use of resources. Correlation with system monitoring information can assist in uncovering attacks and in better relating audit information to operational situations.

- AU-12 - IR-4 - RA-5 -
- -

Determine if the organization:

- - AU-6(5)[1] -

defines data/information to be collected from other sources;

-
- - AU-6(5)[2] -

selects sources of data/information to be analyzed and integrated with the analysis of audit records from one or more of the following:

- - AU-6(5)[2][a] -

vulnerability scanning information;

-
- - AU-6(5)[2][b] -

performance data;

-
- - AU-6(5)[2][c] -

information system monitoring information; and/or

-
- - AU-6(5)[2][d] -

organization-defined data/information collected from other sources; and

-
-
- - AU-6(5)[3] -

integrates the analysis of audit records with the analysis of selected data/information to further enhance the ability to identify inappropriate or unusual activity.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing audit review, analysis, and reporting

-

information system design documentation

-

information system configuration settings and associated documentation

-

integrated analysis of audit records, vulnerability scanning information, performance data, network monitoring information and associated documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit review, analysis, and reporting responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing capability to integrate analysis of audit records with analysis of data/information sources

-
-
-
- - Correlation with Physical Monitoring - AU-6(6) - -

The organization correlates information from audit records with information obtained from monitoring physical access to further enhance the ability to identify suspicious, inappropriate, unusual, or malevolent activity.

-
- -

The correlation of physical audit information and audit logs from information systems may assist organizations in identifying examples of suspicious behavior or supporting evidence of such behavior. For example, the correlation of an individual’s identity for logical access to certain information systems with the additional physical security information that the individual was actually present at the facility when the logical access occurred, may prove to be useful in investigations.

-
- -

Determine if the organization correlates information from audit records with information obtained from monitoring physical access to enhance the ability to identify suspicious, inappropriate, unusual, or malevolent activity.

-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing audit review, analysis, and reporting

-

procedures addressing physical access monitoring

-

information system design documentation

-

information system configuration settings and associated documentation

-

documentation providing evidence of correlated information obtained from audit records and physical access monitoring records

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit review, analysis, and reporting responsibilities

-

organizational personnel with physical access monitoring responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing capability to correlate information from audit records with information from monitoring physical access

-
-
-
- - Permitted Actions - - - - AU-6(7) - -

The organization specifies the permitted actions for each associated with the review, analysis, and reporting of audit information.

-
- -

Organizations specify permitted actions for information system processes, roles, and/or users associated with the review, analysis, and reporting of audit records through account management techniques. Specifying permitted actions on audit information is a way to enforce the principle of least privilege. Permitted actions are enforced by the information system and include, for example, read, write, execute, append, and delete.

-
- -

Determine if the organization specifies the permitted actions for each one or more of the following associated with the review, analysis and reporting of audit information:

- - AU-6(7)[1] -

information system process;

-
- - AU-6(7)[2] -

role; and/or

-
- - AU-6(7)[3] -

user.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing process, role and/or user permitted actions from audit review, analysis, and reporting

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit review, analysis, and reporting responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting permitted actions for review, analysis, and reporting of audit information

-
-
-
- - Full Text Analysis of Privileged Commands - AU-6(8) - -

The organization performs a full text analysis of audited privileged commands in a physically distinct component or subsystem of the information system, or other information system that is dedicated to that analysis.

-
- -

This control enhancement requires a distinct environment for the dedicated analysis of audit information related to privileged users without compromising such information on the information system where the users have elevated privileges including the capability to execute privileged commands. Full text analysis refers to analysis that considers the full text of privileged commands (i.e., commands and all parameters) as opposed to analysis that considers only the name of the command. Full text analysis includes, for example, the use of pattern matching and heuristics.

- AU-3 - AU-9 - AU-11 - AU-12 -
- -

Determine if the organization performs a full text analysis of audited privileged commands in:

- - AU-6(8)[1] -

a physically distinct component or subsystem of the information system; or

-
- - AU-6(8)[2] -

other information system that is dedicated to that analysis.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing audit review, analysis, and reporting

-

information system design documentation

-

information system configuration settings and associated documentation

-

text analysis tools and techniques

-

text analysis documentation of audited privileged commands

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit review, analysis, and reporting responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing capability to perform a full text analysis of audited privilege commands

-
-
-
- - Correlation with Information from Nontechnical Sources - AU-6(9) - -

The organization correlates information from nontechnical sources with audit information to enhance organization-wide situational awareness.

-
- -

Nontechnical sources include, for example, human resources records documenting organizational policy violations (e.g., sexual harassment incidents, improper use of organizational information assets). Such information can lead organizations to a more directed analytical effort to detect potential malicious insider activity. Due to the sensitive nature of the information available from nontechnical sources, organizations limit access to such information to minimize the potential for the inadvertent release of privacy-related information to individuals that do not have a need to know. Thus, correlation of information from nontechnical sources with audit information generally occurs only when individuals are suspected of being involved in a security incident. Organizations obtain legal advice prior to initiating such actions.

- AT-2 -
- -

Determine if the organization correlates information from nontechnical sources with audit information to enhance organization-wide situational awareness.

-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing audit review, analysis, and reporting

-

information system design documentation

-

information system configuration settings and associated documentation

-

documentation providing evidence of correlated information obtained from audit records and organization-defined nontechnical sources

-

list of information types from nontechnical sources for correlation with audit information

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit review, analysis, and reporting responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing capability to correlate information from non-technical sources

-
-
-
- - Audit Level Adjustment - AU-6(10) - -

The organization adjusts the level of audit review, analysis, and reporting within the information system when there is a change in risk based on law enforcement information, intelligence information, or other credible sources of information.

-
- -

The frequency, scope, and/or depth of the audit review, analysis, and reporting may be adjusted to meet organizational needs based on new information received.

-
- -

Determine if the organization adjusts the level of audit review, analysis, and reporting within the information system when there is a change in risk based on:

- - AU-6(10)[1] -

law enforcement information;

-
- - AU-6(10)[2] -

intelligence information; and/or

-
- - AU-6(10)[3] -

other credible sources of information.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing audit review, analysis, and reporting

-

organizational risk assessment

-

security control assessment

-

vulnerability assessment

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit review, analysis, and reporting responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting review, analysis, and reporting of audit information

-
-
-
-
- - Audit Reduction and Report Generation - AU-7 - -

The information system provides an audit reduction and report generation capability that:

- - a. -

Supports on-demand audit review, analysis, and reporting requirements and after-the-fact investigations of security incidents; and

-
- - b. -

Does not alter the original content or time ordering of audit records.

-
-
- -

Audit reduction is a process that manipulates collected audit information and organizes such information in a summary format that is more meaningful to analysts. Audit reduction and report generation capabilities do not always emanate from the same information system or from the same organizational entities conducting auditing activities. Audit reduction capability can include, for example, modern data mining techniques with advanced data filters to identify anomalous behavior in audit records. The report generation capability provided by the information system can generate customizable reports. Time ordering of audit records can be a significant issue if the granularity of the timestamp in the record is insufficient.

- AU-6 -
- -

Determine if the information system provides an audit reduction and report generation capability that supports:

- - AU-7(a) - - AU-7(a)[1] -

on-demand audit review;

-
- - AU-7(a)[2] -

analysis;

-
- - AU-7(a)[3] -

reporting requirements;

-
- - AU-7(a)[4] -

after-the-fact investigations of security incidents; and

-
-
- - AU-7(b) -

does not alter the original content or time ordering of audit records.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing audit reduction and report generation

-

information system design documentation

-

information system configuration settings and associated documentation

-

audit reduction, review, analysis, and reporting tools

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit reduction and report generation responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Audit reduction and report generation capability

-
-
- - Automatic Processing - - - - AU-7(1) - -

The information system provides the capability to process audit records for events of interest based on .

-
- -

Events of interest can be identified by the content of specific audit record fields including, for example, identities of individuals, event types, event locations, event times, event dates, system resources involved, IP addresses involved, or information objects accessed. Organizations may define audit event criteria to any degree of granularity required, for example, locations selectable by general networking location (e.g., by network or subnetwork) or selectable by specific information system component.

- AU-2 - AU-12 -
- -

Determine if:

- - AU-7(1)[1] -

the organization defines audit fields within audit records in order to process audit records for events of interest; and

-
- - AU-7(1)[2] -

the information system provides the capability to process audit records for events of interest based on the organization-defined audit fields within audit records.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing audit reduction and report generation

-

information system design documentation

-

information system configuration settings and associated documentation

-

audit reduction, review, analysis, and reporting tools

-

audit record criteria (fields) establishing events of interest

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit reduction and report generation responsibilities

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Audit reduction and report generation capability

-
-
-
- - Automatic Sort and Search - - - - AU-7(2) - -

The information system provides the capability to sort and search audit records for events of interest based on the content of .

-
- -

Sorting and searching of audit records may be based upon the contents of audit record fields, for example: (i) date/time of events; (ii) user identifiers; (iii) Internet Protocol (IP) addresses involved in the event; (iv) type of event; or (v) event success/failure.

-
- -

Determine if:

- - AU-7(2)[1] -

the organization defines audit fields within audit records in order to sort and search audit records for events of interest based on content of such audit fields; and

-
- - AU-7(2)[2] -

the information system provides the capability to sort and search audit records for events of interest based on the content of organization-defined audit fields within audit records.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing audit reduction and report generation

-

information system design documentation

-

information system configuration settings and associated documentation

-

audit reduction, review, analysis, and reporting tools

-

audit record criteria (fields) establishing events of interest

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit reduction and report generation responsibilities

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Audit reduction and report generation capability

-
-
-
-
- - Time Stamps - - - - AU-8 - -

The information system:

- - a. -

Uses internal system clocks to generate time stamps for audit records; and

-
- - b. -

Records time stamps for audit records that can be mapped to Coordinated Universal Time (UTC) or Greenwich Mean Time (GMT) and meets .

-
-
- -

Time stamps generated by the information system include date and time. Time is commonly expressed in Coordinated Universal Time (UTC), a modern continuation of Greenwich Mean Time (GMT), or local time with an offset from UTC. Granularity of time measurements refers to the degree of synchronization between information system clocks and reference clocks, for example, clocks synchronizing within hundreds of milliseconds or within tens of milliseconds. Organizations may define different time granularities for different system components. Time service can also be critical to other security capabilities such as access control and identification and authentication, depending on the nature of the mechanisms used to support those capabilities.

- AU-3 - AU-12 -
- -

Determine if:

- - AU-8(a) -

the information system uses internal system clocks to generate time stamps for audit records;

-
- - AU-8(b) - - AU-8(b)[1] -

the information system records time stamps for audit records that can be mapped to Coordinated Universal Time (UTC) or Greenwich Mean Time (GMT);

-
- - AU-8(b)[2] -

the organization defines the granularity of time measurement to be met when recording time stamps for audit records; and

-
- - AU-8(b)[3] -

the organization records time stamps for audit records that meet the organization-defined granularity of time measurement.

-
-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing time stamp generation

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing time stamp generation

-
-
- - Synchronization with Authoritative Time Source - - - - - - - - - - AU-8(1) - -

The information system:

- - (a) -

Compares the internal information system clocks with ; and

-
- - (b) -

Synchronizes the internal system clocks to the authoritative time source when the time difference is greater than .

-
-
- -

This control enhancement provides uniformity of time stamps for information systems with multiple system clocks and systems connected over a network.

-
- -

Determine if:

- - AU-8(1)(a) - - AU-8(1)(a)[1] -

the organization defines the authoritative time source to which internal information system clocks are to be compared;

-
- - AU-8(1)(a)[2] -

the organization defines the frequency to compare the internal information system clocks with the organization-defined authoritative time source; and

-
- - AU-8(1)(a)[3] -

the information system compares the internal information system clocks with the organization-defined authoritative time source with organization-defined frequency; and

-
- AU-8(1)(a) -
- - AU-8(1)(b) - - AU-8(1)(b)[1] -

the organization defines the time period that, if exceeded by the time difference between the internal system clocks and the authoritative time source, will result in the internal system clocks being synchronized to the authoritative time source; and

-
- - AU-8(1)(b)[2] -

the information system synchronizes the internal information system clocks to the authoritative time source when the time difference is greater than the organization-defined time period.

-
- AU-8(1)(b) -
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing time stamp generation

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing internal information system clock synchronization

-
-
-
- - Secondary Authoritative Time Source - AU-8(2) - -

The information system identifies a secondary authoritative time source that is located in a different geographic region than the primary authoritative time source.

-
- -

Determine if the information system identifies a secondary authoritative time source that is located in a different geographic region than the primary authoritative time source.

-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing time stamp generation

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing internal information system clock authoritative time sources

-
-
-
-
- - Protection of Audit Information - AU-9 - -

The information system protects audit information and audit tools from unauthorized access, modification, and deletion.

-
- -

Audit information includes all information (e.g., audit records, audit settings, and audit reports) needed to successfully audit information system activity. This control focuses on technical protection of audit information. Physical protection of audit information is addressed by media protection controls and physical and environmental protection controls.

- AC-3 - AC-6 - MP-2 - MP-4 - PE-2 - PE-3 - PE-6 -
- -

Determine if:

- - AU-9[1] -

the information system protects audit information from unauthorized:

- - AU-9[1][a] -

access;

-
- - AU-9[1][b] -

modification;

-
- - AU-9[1][c] -

deletion;

-
-
- - AU-9[2] -

the information system protects audit tools from unauthorized:

- - AU-9[2][a] -

access;

-
- - AU-9[2][b] -

modification; and

-
- - AU-9[2][c] -

deletion.

-
-
-
- - EXAMINE - -

Audit and accountability policy

-

access control policy and procedures

-

procedures addressing protection of audit information

-

information system design documentation

-

information system configuration settings and associated documentation, information system audit records

-

audit tools

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit and accountability responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing audit information protection

-
-
- - Hardware Write-once Media - AU-9(1) - -

The information system writes audit trails to hardware-enforced, write-once media.

-
- -

This control enhancement applies to the initial generation of audit trails (i.e., the collection of audit records that represents the audit information to be used for detection, analysis, and reporting purposes) and to the backup of those audit trails. The enhancement does not apply to the initial generation of audit records prior to being written to an audit trail. Write-once, read-many (WORM) media includes, for example, Compact Disk-Recordable (CD-R) and Digital Video Disk-Recordable (DVD-R). In contrast, the use of switchable write-protection media such as on tape cartridges or Universal Serial Bus (USB) drives results in write-protected, but not write-once, media.

- AU-4 - AU-5 -
- -

Determine if the information system writes audit trails to hardware-enforced, write-once media.

-
- - EXAMINE - -

Audit and accountability policy

-

access control policy and procedures

-

procedures addressing protection of audit information

-

information system design documentation

-

information system hardware settings

-

information system configuration settings and associated documentation

-

information system storage media

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit and accountability responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Information system media storing audit trails

-
-
-
- - Audit Backup On Separate Physical Systems / Components - - - - AU-9(2) - -

The information system backs up audit records onto a physically different system or system component than the system or component being audited.

-
- -

This control enhancement helps to ensure that a compromise of the information system being audited does not also result in a compromise of the audit records.

- AU-4 - AU-5 - AU-11 -
- -

Determine if:

- - AU-9(2)[1] -

the organization defines the frequency to back up audit records onto a physically different system or system component than the system or component being audited; and

-
- - AU-9(2)[2] -

the information system backs up audit records with the organization-defined frequency, onto a physically different system or system component than the system or component being audited.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing protection of audit information

-

information system design documentation

-

information system configuration settings and associated documentation, system or media storing backups of information system audit records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit and accountability responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing the backing up of audit records

-
-
-
- - Cryptographic Protection - AU-9(3) - -

The information system implements cryptographic mechanisms to protect the integrity of audit information and audit tools.

-
- -

Cryptographic mechanisms used for protecting the integrity of audit information include, for example, signed hash functions using asymmetric cryptography enabling distribution of the public key to verify the hash information while maintaining the confidentiality of the secret key used to generate the hash.

- AU-10 - SC-12 - SC-13 -
- -

Determine if the information system:

- - AU-9(3)[1] -

uses cryptographic mechanisms to protect the integrity of audit information; and

-
- - AU-9(3)[2] -

uses cryptographic mechanisms to protect the integrity of audit tools.

-
-
- - EXAMINE - -

Audit and accountability policy

-

access control policy and procedures

-

procedures addressing protection of audit information

-

information system design documentation

-

information system hardware settings

-

information system configuration settings and associated documentation, information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit and accountability responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Cryptographic mechanisms protecting integrity of audit information and tools

-
-
-
- - Access by Subset of Privileged Users - - - - AU-9(4) - -

The organization authorizes access to management of audit functionality to only .

-
- -

Individuals with privileged access to an information system and who are also the subject of an audit by that system, may affect the reliability of audit information by inhibiting audit activities or modifying audit records. This control enhancement requires that privileged access be further defined between audit-related privileges and other privileges, thus limiting the users with audit-related privileges.

- AC-5 -
- -

Determine if the organization:

- - AU-9(4)[1] -

defines a subset of privileged users to be authorized access to management of audit functionality; and

-
- - AU-9(4)[2] -

authorizes access to management of audit functionality to only the organization-defined subset of privileged users.

-
-
- - EXAMINE - -

Audit and accountability policy

-

access control policy and procedures

-

procedures addressing protection of audit information

-

information system design documentation

-

information system configuration settings and associated documentation, system-generated list of privileged users with access to management of audit functionality

-

access authorizations

-

access control list

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit and accountability responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms managing access to audit functionality

-
-
-
- - Dual Authorization - - - - - - - AU-9(5) - -

The organization enforces dual authorization for of .

-
- -

Organizations may choose different selection options for different types of audit information. Dual authorization mechanisms require the approval of two authorized individuals in order to execute. Dual authorization may also be known as two-person control.

- AC-3 - MP-2 -
- -

Determine if the organization:

- - AU-9(5)[1] -

defines audit information for which dual authorization is to be enforced;

-
- - AU-9(5)[2] -

defines one or more of the following types of operations on audit information for which dual authorization is to be enforced:

- - AU-9(5)[2][a] -

movement; and/or

-
- - AU-9(5)[2][b] -

deletion; and

-
-
- - AU-9(5)[3] -

enforces dual authorization for the movement and/or deletion of organization-defined audit information.

-
-
- - EXAMINE - -

Audit and accountability policy

-

access control policy and procedures

-

procedures addressing protection of audit information

-

information system design documentation

-

information system configuration settings and associated documentation, access authorizations

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit and accountability responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms implementing enforcement of dual authorization

-
-
-
- - Read Only Access - - - - AU-9(6) - -

The organization authorizes read-only access to audit information to .

-
- -

Restricting privileged user authorizations to read-only helps to limit the potential damage to organizations that could be initiated by such users (e.g., deleting audit records to cover up malicious activity).

-
- -

Determine if the organization:

- - AU-9(6)[1] -

defines the subset of privileged users to be authorized read-only access to audit information; and

-
- - AU-9(6)[2] -

authorizes read-only access to audit information to the organization-defined subset of privileged users.

-
-
- - EXAMINE - -

Audit and accountability policy

-

access control policy and procedures

-

procedures addressing protection of audit information

-

information system design documentation

-

information system configuration settings and associated documentation, system-generated list of privileged users with read-only access to audit information

-

access authorizations

-

access control list

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit and accountability responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms managing access to audit information

-
-
-
-
- - Non-repudiation - - - - AU-10 - -

The information system protects against an individual (or process acting on behalf of an individual) falsely denying having performed .

-
- -

Types of individual actions covered by non-repudiation include, for example, creating information, sending and receiving messages, approving information (e.g., indicating concurrence or signing a contract). Non-repudiation protects individuals against later claims by: (i) authors of not having authored particular documents; (ii) senders of not having transmitted messages; (iii) receivers of not having received messages; or (iv) signatories of not having signed documents. Non-repudiation services can be used to determine if information originated from a particular individual, or if an individual took specific actions (e.g., sending an email, signing a contract, approving a procurement request) or received specific information. Organizations obtain non-repudiation services by employing various techniques or mechanisms (e.g., digital signatures, digital message receipts).

- SC-12 - SC-8 - SC-13 - SC-16 - SC-17 - SC-23 -
- -

Determine if:

- - AU-10[1] -

the organization defines actions to be covered by non-repudiation; and

-
- - AU-10[2] -

the information system protects against an individual (or process acting on behalf of an individual) falsely denying having performed organization-defined actions to be covered by non-repudiation.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing non-repudiation

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing non-repudiation capability

-
-
- - Association of Identities - - - - AU-10(1) - -

The information system:

- - (a) -

Binds the identity of the information producer with the information to ; and

-
- - (b) -

Provides the means for authorized individuals to determine the identity of the producer of the information.

-
-
- -

This control enhancement supports audit requirements that provide organizational personnel with the means to identify who produced specific information in the event of an information transfer. Organizations determine and approve the strength of the binding between the information producer and the information based on the security category of the information and relevant risk factors.

- AC-4 - AC-16 -
- -

Determine if:

- - AU-10(1)(a) - - AU-10(1)(a)[1] -

the organization defines the strength of binding to be employed between the identity of the information producer and the information;

-
- - AU-10(1)(a)[2] -

the information system binds the identity of the information producer with the information to the organization-defined strength of binding; and

-
- AU-10(1)(a) -
- - AU-10(1)(b) -

the information system provides the means for authorized individuals to determine the identity of the producer of the information.

- AU-10(1)(b) -
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing non-repudiation

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing non-repudiation capability

-
-
-
- - Validate Binding of Information Producer Identity - - - - - - - AU-10(2) - -

The information system:

- - (a) -

Validates the binding of the information producer identity to the information at ; and

-
- - (b) -

Performs in the event of a validation error.

-
-
- -

This control enhancement prevents the modification of information between production and review. The validation of bindings can be achieved, for example, by the use of cryptographic checksums. Organizations determine if validations are in response to user requests or generated automatically.

- AC-3 - AC-4 - AC-16 -
- -

Determine if:

- - AU-10(2)(a) - - AU-10(2)(a)[1] -

the organization defines the frequency to validate the binding of the information producer identity to the information;

-
- - AU-10(2)(a)[2] -

the information system validates the binding of the information producer identity to the information at the organization-defined frequency; and

-
- AU-10(2)(a) -
- - AU-10(2)(b) - - AU-10(2)(b)[1] -

the organization defines actions to be performed in the event of a validation error; and

-
- - AU-10(2)(b)[2] -

the information system performs organization-defined actions in the event of a validation error.

-
- AU-10(2)(b) -
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing non-repudiation

-

information system design documentation

-

information system configuration settings and associated documentation

-

validation records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing non-repudiation capability

-
-
-
- - Chain of Custody - AU-10(3) - -

The information system maintains reviewer/releaser identity and credentials within the established chain of custody for all information reviewed or released.

-
- -

Chain of custody is a process that tracks the movement of evidence through its collection, safeguarding, and analysis life cycle by documenting each person who handled the evidence, the date and time it was collected or transferred, and the purpose for the transfer. If the reviewer is a human or if the review function is automated but separate from the release/transfer function, the information system associates the identity of the reviewer of the information to be released with the information and the information label. In the case of human reviews, this control enhancement provides organizational officials the means to identify who reviewed and released the information. In the case of automated reviews, this control enhancement ensures that only approved review functions are employed.

- AC-4 - AC-16 -
- -

Determine if the information system:

- - AU-10(3)[1] -

maintains reviewer/releaser identity within the established chain of custody for all information reviewed;

-
- - AU-10(3)[2] -

maintains reviewer/releaser identity within the established chain of custody for all information released;

-
- - AU-10(3)[3] -

maintains reviewer/releaser credentials within the established chain of custody for all information reviewed; and

-
- - AU-10(3)[4] -

maintains reviewer/releaser credentials within the established chain of custody for all information released.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing non-repudiation

-

information system design documentation

-

information system configuration settings and associated documentation

-

records of information reviews and releases

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing non-repudiation capability

-
-
-
- - Validate Binding of Information Reviewer Identity - - - - - - - AU-10(4) - -

The information system:

- - (a) -

Validates the binding of the information reviewer identity to the information at the transfer or release points prior to release/transfer between ; and

-
- - (b) -

Performs in the event of a validation error.

-
-
- -

This control enhancement prevents the modification of information between review and transfer/release. The validation of bindings can be achieved, for example, by the use of cryptographic checksums. Organizations determine validations are in response to user requests or generated automatically.

- AC-4 - AC-16 -
- -

Determine if:

- - AU-10(4)(a) - - AU-10(4)(a)[1] -

the organization defines security domains for which the binding of the information reviewer identity to the information is to be validated at the transfer or release points prior to release/transfer between such domains;

-
- - AU-10(4)(a)[2] -

the information system validates the binding of the information reviewer identity to the information at the transfer or release points prior to release/transfer between organization-defined security domains;

-
- AU-10(4)(a) -
- - AU-10(4)(b) - - AU-10(4)(b)[1] -

the organization defines actions to be performed in the event of a validation error; and

-
- - AU-10(4)(b)[2] -

the information system performs organization-defined actions in the event of a validation error.

-
- AU-10(4)(b) -
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing non-repudiation

-

information system design documentation

-

information system configuration settings and associated documentation

-

validation records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing non-repudiation capability

-
-
-
- - Digital Signatures - AU-10(5) - Withdrawn - SI-7 - -
- - Audit Record Retention - - - - AU-11 - -

The organization retains audit records for to provide support for after-the-fact investigations of security incidents and to meet regulatory and organizational information retention requirements.

-
- -

Organizations retain audit records until it is determined that they are no longer needed for administrative, legal, audit, or other operational purposes. This includes, for example, retention and availability of audit records relative to Freedom of Information Act (FOIA) requests, subpoenas, and law enforcement actions. Organizations develop standard categories of audit records relative to such types of actions and standard response processes for each type of action. The National Archives and Records Administration (NARA) General Records Schedules provide federal policy on record retention.

- AU-4 - AU-5 - AU-9 - MP-6 -
- -

Determine if the organization:

- - AU-11[1] -

defines a time period to retain audit records that is consistent with records retention policy;

-
- - AU-11[2] -

retains audit records for the organization-defined time period consistent with records retention policy to:

- - AU-11[2][a] -

provide support for after-the-fact investigations of security incidents; and

-
- - AU-11[2][b] -

meet regulatory and organizational information retention requirements.

-
-
-
- - EXAMINE - -

Audit and accountability policy

-

audit record retention policy and procedures

-

security plan

-

organization-defined retention period for audit records

-

audit record archives

-

audit logs

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit record retention responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - Long-term Retrieval Capability - - - - AU-11(1) - -

The organization employs to ensure that long-term audit records generated by the information system can be retrieved.

-
- -

Measures employed by organizations to help facilitate the retrieval of audit records include, for example, converting records to newer formats, retaining equipment capable of reading the records, and retaining necessary documentation to help organizational personnel understand how to interpret the records.

-
- -

Determine if the organization:

- - AU-11(1)[1] -

defines measures to be employed to ensure that long-term audit records generated by the information system can be retrieved; and

-
- - AU-11(1)[2] -

employs organization-defined measures to ensure that long-term audit records generated by the information system can be retrieved.

-
-
- - EXAMINE - -

Audit and accountability policy

-

audit record retention policy and procedures

-

information system design documentation

-

information system configuration settings and associated documentation

-

audit record archives

-

audit logs

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit record retention responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms implementing audit record retention capability

-
-
-
-
- - Audit Generation - - - - - - - AU-12 - -

The information system:

- - a. -

Provides audit record generation capability for the auditable events defined in AU-2 a. at ;

-
- - b. -

Allows to select which auditable events are to be audited by specific components of the information system; and

-
- - c. -

Generates audit records for the events defined in AU-2 d. with the content defined in AU-3.

-
-
- -

Audit records can be generated from many different information system components. The list of audited events is the set of events for which audits are to be generated. These events are typically a subset of all events for which the information system is capable of generating audit records.

- AC-3 - AU-2 - AU-3 - AU-6 - AU-7 -
- -

Determine if:

- - AU-12(a) - - AU-12(a)[1] -

the organization defines the information system components which are to provide audit record generation capability for the auditable events defined in AU-2a;

-
- - AU-12(a)[2] -

the information system provides audit record generation capability, for the auditable events defined in AU-2a, at organization-defined information system components;

-
-
- - AU-12(b) - - AU-12(b)[1] -

the organization defines the personnel or roles allowed to select which auditable events are to be audited by specific components of the information system;

-
- - AU-12(b)[2] -

the information system allows the organization-defined personnel or roles to select which auditable events are to be audited by specific components of the system; and

-
-
- - AU-12(c) -

the information system generates audit records for the events defined in AU-2d with the content in defined in AU-3.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing audit record generation

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of auditable events

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit record generation responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing audit record generation capability

-
-
- - System-wide / Time-correlated Audit Trail - - - - - - - AU-12(1) - -

The information system compiles audit records from into a system-wide (logical or physical) audit trail that is time-correlated to within .

-
- -

Audit trails are time-correlated if the time stamps in the individual audit records can be reliably related to the time stamps in other audit records to achieve a time ordering of the records within organizational tolerances.

- AU-8 - AU-12 -
- -

Determine if:

- - AU-12(1)[1] -

the organization defines the information system components from which audit records are to be compiled into a system-wide (logical or physical) audit trail;

-
- - AU-12(1)[2] -

the organization defines the level of tolerance for the relationship between time stamps of individual records in the audit trail; and

-
- - AU-12(1)[3] -

the information system compiles audit records from organization-defined information system components into a system-wide (logical or physical) audit trail that is time-correlated to within the organization-defined level of tolerance for the relationship between time stamps of individual records in the audit trail.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing audit record generation

-

information system design documentation

-

information system configuration settings and associated documentation

-

system-wide audit trail (logical or physical)

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit record generation responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing audit record generation capability

-
-
-
- - Standardized Formats - AU-12(2) - -

The information system produces a system-wide (logical or physical) audit trail composed of audit records in a standardized format.

-
- -

Audit information that is normalized to common standards promotes interoperability and exchange of such information between dissimilar devices and information systems. This facilitates production of event information that can be more readily analyzed and correlated. Standard formats for audit records include, for example, system log records and audit records compliant with Common Event Expressions (CEE). If logging mechanisms within information systems do not conform to standardized formats, systems may convert individual audit records into standardized formats when compiling system-wide audit trails.

-
- -

Determine if the information system produces a system-wide (logical or physical) audit trail composed of audit records in a standardized format.

-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing audit record generation

-

information system design documentation

-

information system configuration settings and associated documentation

-

system-wide audit trail (logical or physical)

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit record generation responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing audit record generation capability

-
-
-
- - Changes by Authorized Individuals - - - - - - - - - - - - - AU-12(3) - -

The information system provides the capability for to change the auditing to be performed on based on within .

-
- -

This control enhancement enables organizations to extend or limit auditing as necessary to meet organizational requirements. Auditing that is limited to conserve information system resources may be extended to address certain threat situations. In addition, auditing may be limited to a specific set of events to facilitate audit reduction, analysis, and reporting. Organizations can establish time thresholds in which audit actions are changed, for example, near real-time, within minutes, or within hours.

- AU-7 -
- -

Determine if:

- - AU-12(3)[1] -

the organization defines information system components on which auditing is to be performed;

-
- - AU-12(3)[2] -

the organization defines individuals or roles authorized to change the auditing to be performed on organization-defined information system components;

-
- - AU-12(3)[3] -

the organization defines time thresholds within which organization-defined individuals or roles can change the auditing to be performed on organization-defined information system components;

-
- - AU-12(3)[4] -

the organization defines selectable event criteria that support the capability for organization-defined individuals or roles to change the auditing to be performed on organization-defined information system components; and

-
- - AU-12(3)[5] -

the information system provides the capability for organization-defined individuals or roles to change the auditing to be performed on organization-defined information system components based on organization-defined selectable event criteria within organization-defined time thresholds.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing audit record generation

-

information system design documentation

-

information system configuration settings and associated documentation

-

system-generated list of individuals or roles authorized to change auditing to be performed

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with audit record generation responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing audit record generation capability

-
-
-
-
- - Monitoring for Information Disclosure - - - - - - - AU-13 - -

The organization monitors - for evidence of unauthorized disclosure of organizational information.

-
- -

Open source information includes, for example, social networking sites.

- PE-3 - SC-7 -
- -

Determine if the organization:

- - AU-13[1] -

defines open source information and/or information sites to be monitored for evidence of unauthorized disclosure of organizational information;

-
- - AU-13[2] -

defines a frequency to monitor organization-defined open source information and/or information sites for evidence of unauthorized disclosure of organizational information; and

-
- - AU-13[3] -

monitors organization-defined open source information and/or information sites for evidence of unauthorized disclosure of organizational information with the organization-defined frequency.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing information disclosure monitoring

-

information system design documentation

-

information system configuration settings and associated documentation

-

monitoring records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for monitoring open source information and/or information sites

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing monitoring for information disclosure

-
-
- - Use of Automated Tools - AU-13(1) - -

The organization employs automated mechanisms to determine if organizational information has been disclosed in an unauthorized manner.

-
- -

Automated mechanisms can include, for example, automated scripts to monitor new posts on selected websites, and commercial services providing notifications and alerts to organizations.

-
- -

Determine if the organization employs automated mechanisms to determine if organizational information has been disclosed in an unauthorized manner.

-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing information disclosure monitoring

-

information system design documentation

-

information system configuration settings and associated documentation

-

automated monitoring tools

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for monitoring information disclosures

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing monitoring for information disclosure

-
-
-
- - Review of Monitored Sites - - - - AU-13(2) - -

The organization reviews the open source information sites being monitored .

-
- -

Determine if the organization:

- - AU-13(2)[1] -

defines a frequency to review the open source information sites being monitored; and

-
- - AU-13(2)[2] -

reviews the open source information sites being monitored with the organization-defined frequency.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing information disclosure monitoring

-

information system design documentation

-

information system configuration settings and associated documentation

-

reviews for open source information sites being monitored

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for monitoring open source information sites

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing monitoring for information disclosure

-
-
-
-
- - Session Audit - AU-14 - -

The information system provides the capability for authorized users to select a user session to capture/record or view/hear.

-
- -

Session audits include, for example, monitoring keystrokes, tracking websites visited, and recording information and/or file transfers. Session auditing activities are developed, integrated, and used in consultation with legal counsel in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, or standards.

- AC-3 - AU-4 - AU-5 - AU-9 - AU-11 -
- -

Determine if the information system provides the capability for authorized users to select a user session to:

- - AU-14[1] -

capture/record; and/or

-
- - AU-14[2] -

view/hear.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing user session auditing

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing user session auditing capability

-
-
- - System Start-up - AU-14(1) - -

The information system initiates session audits at system start-up.

-
- -

Determine if the information system initiates session audits at system start-up.

-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing user session auditing

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing user session auditing capability

-
-
-
- - Capture/record and Log Content - AU-14(2) - -

The information system provides the capability for authorized users to capture/record and log content related to a user session.

-
- -

Determine if the information system provides the capability for authorized users to:

- - AU-14(2)[1] -

capture/record content related to a user session; and

-
- - AU-14(2)[2] -

log content related to a user session.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing user session auditing

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing user session auditing capability

-
-
-
- - Remote Viewing / Listening - AU-14(3) - -

The information system provides the capability for authorized users to remotely view/hear all content related to an established user session in real time.

-
- -

Determine if the information system provides the capability for authorized users to remotely view/hear all content related to an established user session in real time.

-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing user session auditing

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing user session auditing capability

-
-
-
-
- - Alternate Audit Capability - - - - AU-15 - -

The organization provides an alternate audit capability in the event of a failure in primary audit capability that provides .

-
- -

Since an alternate audit capability may be a short-term protection employed until the failure in the primary auditing capability is corrected, organizations may determine that the alternate audit capability need only provide a subset of the primary audit functionality that is impacted by the failure.

- AU-5 -
- -

Determine if the organization:

- - AU-15[1] -

defines alternative audit functionality to be provided in the event of a failure in primary audit capability; and

-
- - AU-15[2] -

provides an alternative audit capability in the event of a failure in primary audit capability that provides organization-defined alternative audit functionality.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing alternate audit capability

-

information system design documentation

-

information system configuration settings and associated documentation

-

test records for alternative audit capability

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel responsible for providing alternate audit capability

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing alternative audit capability

-
-
-
- - Cross-organizational Auditing - - - - - - - AU-16 - -

The organization employs for coordinating among external organizations when audit information is transmitted across organizational boundaries.

-
- -

When organizations use information systems and/or services of external organizations, the auditing capability necessitates a coordinated approach across organizations. For example, maintaining the identity of individuals that requested particular services across organizational boundaries may often be very difficult, and doing so may prove to have significant performance ramifications. Therefore, it is often the case that cross-organizational auditing (e.g., the type of auditing capability provided by service-oriented architectures) simply captures the identity of individuals issuing requests at the initial information system, and subsequent systems record that the requests emanated from authorized individuals.

- AU-6 -
- -

Determine if the organization:

- - AU-16[1] -

defines audit information to be coordinated among external organizations when audit information is transmitted across organizational boundaries;

-
- - AU-16[2] -

defines methods for coordinating organization-defined audit information among external organizations when audit information is transmitted across organizational boundaries; and

-
- - AU-16[3] -

employs organization-defined methods for coordinating organization-defined audit information among external organizations when audit information is transmitted across organizational boundaries.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing methods for coordinating audit information among external organizations

-

information system design documentation

-

information system configuration settings and associated documentation

-

methods for coordinating audit information among external organizations

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for coordinating audit information among external organizations

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing cross-organizational auditing (if applicable)

-
-
- - Identity Preservation - AU-16(1) - -

The organization requires that the identity of individuals be preserved in cross-organizational audit trails.

-
- -

This control enhancement applies when there is a need to be able to trace actions that are performed across organizational boundaries to a specific individual.

-
- -

Determine if the organization requires that the identity of individuals be preserved in cross- organizational audit trails.

-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing cross-organizational audit trails

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with cross-organizational audit responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing cross-organizational auditing (if applicable)

-
-
-
- - Sharing of Audit Information - - - - - - - AU-16(2) - -

The organization provides cross-organizational audit information to based on .

-
- -

Because of the distributed nature of the audit information, cross-organization sharing of audit information may be essential for effective analysis of the auditing being performed. For example, the audit records of one organization may not provide sufficient information to determine the appropriate or inappropriate use of organizational information resources by individuals in other organizations. In some instances, only the home organizations of individuals have the appropriate knowledge to make such determinations, thus requiring the sharing of audit information among organizations.

-
- -

Determine if the organization:

- - AU-16(2)[1] -

defines organizations with whom cross-organizational audit information is to be shared;

-
- - AU-16(2)[2] -

defines cross-organizational sharing agreements to be used when providing cross-organizational audit information to organization-defined organizations; and

-
- - AU-16(2)[3] -

provides cross-organizational audit information to organization-defined organizations based on organization-defined cross-organizational sharing agreements.

-
-
- - EXAMINE - -

Audit and accountability policy

-

procedures addressing cross-organizational sharing of audit information

-

cross-organizational sharing agreements

-

data sharing agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for sharing cross-organizational audit information

-

organizational personnel with information security responsibilities

-
-
-
-
-
- - Security Assessment and Authorization - - Security Assessment and Authorization Policy and Procedures - - - - - - - - - - CA-1 - -

The organization:

- - a. -

Develops, documents, and disseminates to :

- - 1. -

A security assessment and authorization policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and

-
- - 2. -

Procedures to facilitate the implementation of the security assessment and authorization policy and associated security assessment and authorization controls; and

-
-
- - b. -

Reviews and updates the current:

- - 1. -

Security assessment and authorization policy ; and

-
- - 2. -

Security assessment and authorization procedures .

-
-
-
- -

This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the CA family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures.

- PM-9 -
- -

Determine if the organization:

- - CA-1(a) - - CA-1(a)(1) - - CA-1(a)(1)[1] -

develops and documents a security assessment and authorization policy that addresses:

- - CA-1(a)(1)[1][a] -

purpose;

-
- - CA-1(a)(1)[1][b] -

scope;

-
- - CA-1(a)(1)[1][c] -

roles;

-
- - CA-1(a)(1)[1][d] -

responsibilities;

-
- - CA-1(a)(1)[1][e] -

management commitment;

-
- - CA-1(a)(1)[1][f] -

coordination among organizational entities;

-
- - CA-1(a)(1)[1][g] -

compliance;

-
-
- - CA-1(a)(1)[2] -

defines personnel or roles to whom the security assessment and authorization policy is to be disseminated;

-
- - CA-1(a)(1)[3] -

disseminates the security assessment and authorization policy to organization-defined personnel or roles;

-
-
- - CA-1(a)(2) - - CA-1(a)(2)[1] -

develops and documents procedures to facilitate the implementation of the security assessment and authorization policy and associated assessment and authorization controls;

-
- - CA-1(a)(2)[2] -

defines personnel or roles to whom the procedures are to be disseminated;

-
- - CA-1(a)(2)[3] -

disseminates the procedures to organization-defined personnel or roles;

-
-
-
- - CA-1(b) - - CA-1(b)(1) - - CA-1(b)(1)[1] -

defines the frequency to review and update the current security assessment and authorization policy;

-
- - CA-1(b)(1)[2] -

reviews and updates the current security assessment and authorization policy with the organization-defined frequency;

-
-
- - CA-1(b)(2) - - CA-1(b)(2)[1] -

defines the frequency to review and update the current security assessment and authorization procedures; and

-
- - CA-1(b)(2)[2] -

reviews and updates the current security assessment and authorization procedures with the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

Security assessment and authorization policy and procedures

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security assessment and authorization responsibilities

-

organizational personnel with information security responsibilities

-
-
- - NIST Special Publication 800-12 - - NIST Special Publication 800-37 - - NIST Special Publication 800-53A - - NIST Special Publication 800-100 - -
- - Security Assessments - - - - - - - CA-2 - -

The organization:

- - a. -

Develops a security assessment plan that describes the scope of the assessment including:

- - 1. -

Security controls and control enhancements under assessment;

-
- - 2. -

Assessment procedures to be used to determine security control effectiveness; and

-
- - 3. -

Assessment environment, assessment team, and assessment roles and responsibilities;

-
-
- - b. -

Assesses the security controls in the information system and its environment of operation to determine the extent to which the controls are implemented correctly, operating as intended, and producing the desired outcome with respect to meeting established security requirements;

-
- - c. -

Produces a security assessment report that documents the results of the assessment; and

-
- - d. -

Provides the results of the security control assessment to .

-
-
- -

Organizations assess security controls in organizational information systems and the environments in which those systems operate as part of: (i) initial and ongoing security authorizations; (ii) FISMA annual assessments; (iii) continuous monitoring; and (iv) system development life cycle activities. Security assessments: (i) ensure that information security is built into organizational information systems; (ii) identify weaknesses and deficiencies early in the development process; (iii) provide essential information needed to make risk-based decisions as part of security authorization processes; and (iv) ensure compliance to vulnerability mitigation procedures. Assessments are conducted on the implemented security controls from Appendix F (main catalog) and Appendix G (Program Management controls) as documented in System Security Plans and Information Security Program Plans. Organizations can use other types of assessment activities such as vulnerability scanning and system monitoring to maintain the security posture of information systems during the entire life cycle. Security assessment reports document assessment results in sufficient detail as deemed necessary by organizations, to determine the accuracy and completeness of the reports and whether the security controls are implemented correctly, operating as intended, and producing the desired outcome with respect to meeting security requirements. The FISMA requirement for assessing security controls at least annually does not require additional assessment activities to those activities already in place in organizational security authorization processes. Security assessment results are provided to the individuals or roles appropriate for the types of assessments being conducted. For example, assessments conducted in support of security authorization decisions are provided to authorizing officials or authorizing official designated representatives. -To satisfy annual assessment requirements, organizations can use assessment results from the following sources: (i) initial or ongoing information system authorizations; (ii) continuous monitoring; or (iii) system development life cycle activities. Organizations ensure that security assessment results are current, relevant to the determination of security control effectiveness, and obtained with the appropriate level of assessor independence. Existing security control assessment results can be reused to the extent that the results are still valid and can also be supplemented with additional assessments as needed. Subsequent to initial authorizations and in accordance with OMB policy, organizations assess security controls during continuous monitoring. Organizations establish the frequency for ongoing security control assessments in accordance with organizational continuous monitoring strategies. Information Assurance Vulnerability Alerts provide useful examples of vulnerability mitigation procedures. External audits (e.g., audits by external entities such as regulatory agencies) are outside the scope of this control.

- CA-5 - CA-6 - CA-7 - PM-9 - RA-5 - SA-11 - SA-12 - SI-4 -
- -

Determine if the organization:

- - CA-2(a) -

develops a security assessment plan that describes the scope of the assessment including:

- - CA-2(a)(1) -

security controls and control enhancements under assessment;

-
- - CA-2(a)(2) -

assessment procedures to be used to determine security control effectiveness;

-
- - CA-2(a)(3) - - CA-2(a)(3)[1] -

assessment environment;

-
- - CA-2(a)(3)[2] -

assessment team;

-
- - CA-2(a)(3)[3] -

assessment roles and responsibilities;

-
-
-
- - CA-2(b) - - CA-2(b)[1] -

defines the frequency to assess the security controls in the information system and its environment of operation;

-
- - CA-2(b)[2] -

assesses the security controls in the information system with the organization-defined frequency to determine the extent to which the controls are implemented correctly, operating as intended, and producing the desired outcome with respect to meeting established security requirements;

-
-
- - CA-2(c) -

produces a security assessment report that documents the results of the assessment;

-
- - CA-2(d) - - CA-2(d)[1] -

defines individuals or roles to whom the results of the security control assessment are to be provided; and

-
- - CA-2(d)[2] -

provides the results of the security control assessment to organization-defined individuals or roles.

-
-
-
- - EXAMINE - -

Security assessment and authorization policy

-

procedures addressing security assessment planning

-

procedures addressing security assessments

-

security assessment plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security assessment responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting security assessment, security assessment plan development, and/or security assessment reporting

-
-
- - Independent Assessors - - - - CA-2(1) - -

The organization employs assessors or assessment teams with to conduct security control assessments.

-
- -

Independent assessors or assessment teams are individuals or groups who conduct impartial assessments of organizational information systems. Impartiality implies that assessors are free from any perceived or actual conflicts of interest with regard to the development, operation, or management of the organizational information systems under assessment or to the determination of security control effectiveness. To achieve impartiality, assessors should not: (i) create a mutual or conflicting interest with the organizations where the assessments are being conducted; (ii) assess their own work; (iii) act as management or employees of the organizations they are serving; or (iv) place themselves in positions of advocacy for the organizations acquiring their services. Independent assessments can be obtained from elements within organizations or can be contracted to public or private sector entities outside of organizations. Authorizing officials determine the required level of independence based on the security categories of information systems and/or the ultimate risk to organizational operations, organizational assets, or individuals. Authorizing officials also determine if the level of assessor independence provides sufficient assurance that the results are sound and can be used to make credible, risk-based decisions. This includes determining whether contracted security assessment services have sufficient independence, for example, when information system owners are not directly involved in contracting processes or cannot unduly influence the impartiality of assessors conducting assessments. In special situations, for example, when organizations that own the information systems are small or organizational structures require that assessments are conducted by individuals that are in the developmental, operational, or management chain of system owners, independence in assessment processes can be achieved by ensuring that assessment results are carefully reviewed and analyzed by independent teams of experts to validate the completeness, accuracy, integrity, and reliability of the results. Organizations recognize that assessments performed for purposes other than direct support to authorization decisions are, when performed by assessors with sufficient independence, more likely to be useable for such decisions, thereby reducing the need to repeat assessments.

-
- -

Determine if the organization:

- - CA-2(1)[1] -

defines the level of independence to be employed to conduct security control assessments; and

-
- - CA-2(1)[2] -

employs assessors or assessment teams with the organization-defined level of independence to conduct security control assessments.

-
-
- - EXAMINE - -

Security assessment and authorization policy

-

procedures addressing security assessments

-

security authorization package (including security plan, security assessment plan, security assessment report, plan of action and milestones, authorization statement)

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security assessment responsibilities

-

organizational personnel with information security responsibilities

-
-
-
- - Specialized Assessments - - - - - - - - - - - - - CA-2(2) - -

The organization includes as part of security control assessments, , , .

-
- -

Organizations can employ information system monitoring, insider threat assessments, malicious user testing, and other forms of testing (e.g., verification and validation) to improve readiness by exercising organizational capabilities and indicating current performance levels as a means of focusing actions to improve security. Organizations conduct assessment activities in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, and standards. Authorizing officials approve the assessment methods in coordination with the organizational risk executive function. Organizations can incorporate vulnerabilities uncovered during assessments into vulnerability remediation processes.

- PE-3 - SI-2 -
- -

Determine if the organization:

- - CA-2(2)[1] -

selects one or more of the following forms of specialized security assessment to be included as part of security control assessments:

- - CA-2(2)[1][a] -

in-depth monitoring;

-
- - CA-2(2)[1][b] -

vulnerability scanning;

-
- - CA-2(2)[1][c] -

malicious user testing;

-
- - CA-2(2)[1][d] -

insider threat assessment;

-
- - CA-2(2)[1][e] -

performance/load testing; and/or

-
- - CA-2(2)[1][f] -

other forms of organization-defined specialized security assessment;

-
-
- - CA-2(2)[2] -

defines the frequency for conducting the selected form(s) of specialized security assessment;

-
- - CA-2(2)[3] -

defines whether the specialized security assessment will be announced or unannounced; and

-
- - CA-2(2)[4] -

conducts announced or unannounced organization-defined forms of specialized security assessments with the organization-defined frequency as part of security control assessments.

-
-
- - EXAMINE - -

Security assessment and authorization policy

-

procedures addressing security assessments

-

security plan

-

security assessment plan

-

security assessment report

-

security assessment evidence

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security assessment responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting security control assessment

-
-
-
- - External Organizations - - - - - - - - - - CA-2(3) - -

The organization accepts the results of an assessment of performed by when the assessment meets .

-
- -

Organizations may often rely on assessments of specific information systems by other (external) organizations. Utilizing such existing assessments (i.e., reusing existing assessment evidence) can significantly decrease the time and resources required for organizational assessments by limiting the amount of independent assessment activities that organizations need to perform. The factors that organizations may consider in determining whether to accept assessment results from external organizations can vary. Determinations for accepting assessment results can be based on, for example, past assessment experiences one organization has had with another organization, the reputation that organizations have with regard to assessments, the level of detail of supporting assessment documentation provided, or mandates imposed upon organizations by federal legislation, policies, or directives.

-
- -

Determine if the organization:

- - CA-2(3)[1] -

defines an information system for which the results of a security assessment performed by an external organization are to be accepted;

-
- - CA-2(3)[2] -

defines an external organization from which to accept a security assessment performed on an organization-defined information system;

-
- - CA-2(3)[3] -

defines the requirements to be met by a security assessment performed by organization-defined external organization on organization-defined information system; and

-
- - CA-2(3)[4] -

accepts the results of an assessment of an organization-defined information system performed by an organization-defined external organization when the assessment meets organization-defined requirements.

-
-
- - EXAMINE - -

Security assessment and authorization policy

-

procedures addressing security assessments

-

security plan

-

security assessment requirements

-

security assessment plan

-

security assessment report

-

security assessment evidence

-

plan of action and milestones

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security assessment responsibilities

-

organizational personnel with information security responsibilities

-

personnel performing security assessments for the specified external organization

-
-
-
- - Executive Order 13587 - - FIPS Publication 199 - - NIST Special Publication 800-37 - - NIST Special Publication 800-39 - - NIST Special Publication 800-53A - - NIST Special Publication 800-115 - - NIST Special Publication 800-137 - -
- - System Interconnections - - - - CA-3 - -

The organization:

- - a. -

Authorizes connections from the information system to other information systems through the use of Interconnection Security Agreements;

-
- - b. -

Documents, for each interconnection, the interface characteristics, security requirements, and the nature of the information communicated; and

-
- - c. -

Reviews and updates Interconnection Security Agreements .

-
-
- -

This control applies to dedicated connections between information systems (i.e., system interconnections) and does not apply to transitory, user-controlled connections such as email and website browsing. Organizations carefully consider the risks that may be introduced when information systems are connected to other systems with different security requirements and security controls, both within organizations and external to organizations. Authorizing officials determine the risk associated with information system connections and the appropriate controls employed. If interconnecting systems have the same authorizing official, organizations do not need to develop Interconnection Security Agreements. Instead, organizations can describe the interface characteristics between those interconnecting systems in their respective security plans. If interconnecting systems have different authorizing officials within the same organization, organizations can either develop Interconnection Security Agreements or describe the interface characteristics between systems in the security plans for the respective systems. Organizations may also incorporate Interconnection Security Agreement information into formal contracts, especially for interconnections established between federal agencies and nonfederal (i.e., private sector) organizations. Risk considerations also include information systems sharing the same networks. For certain technologies (e.g., space, unmanned aerial vehicles, and medical devices), there may be specialized connections in place during preoperational testing. Such connections may require Interconnection Security Agreements and be subject to additional security controls.

- AC-3 - AC-4 - AC-20 - AU-2 - AU-12 - AU-16 - CA-7 - IA-3 - SA-9 - SC-7 - SI-4 -
- -

Determine if the organization:

- - CA-3(a) -

authorizes connections from the information system to other information systems through the use of Interconnection Security Agreements;

-
- - CA-3(b) -

documents, for each interconnection:

- - CA-3(b)[1] -

the interface characteristics;

-
- - CA-3(b)[2] -

the security requirements;

-
- - CA-3(b)[3] -

the nature of the information communicated;

-
-
- - CA-3(c) - - CA-3(c)[1] -

defines the frequency to review and update Interconnection Security Agreements; and

-
- - CA-3(c)[2] -

reviews and updates Interconnection Security Agreements with the organization-defined frequency.

-
-
-
- - EXAMINE - -

Access control policy

-

procedures addressing information system connections

-

system and communications protection policy

-

information system Interconnection Security Agreements

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for developing, implementing, or approving information system interconnection agreements

-

organizational personnel with information security responsibilities

-

personnel managing the system(s) to which the Interconnection Security Agreement applies

-
-
- - Unclassified National Security System Connections - - - - - - - CA-3(1) - -

The organization prohibits the direct connection of an to an external network without the use of .

-
- -

Organizations typically do not have control over external networks (e.g., the Internet). Approved boundary protection devices (e.g., routers, firewalls) mediate communications (i.e., information flows) between unclassified national security systems and external networks. This control enhancement is required for organizations processing, storing, or transmitting Controlled Unclassified Information (CUI).

-
- -

Determine if the organization:

- - CA-3(1)[1] -

defines an unclassified, national security system whose direct connection to an external network is to be prohibited without the use of approved boundary protection device;

-
- - CA-3(1)[2] -

defines a boundary protection device to be used to establish the direct connection of an organization-defined unclassified, national security system to an external network; and

-
- - CA-3(1)[3] -

prohibits the direct connection of an organization-defined unclassified, national security system to an external network without the use of an organization-defined boundary protection device.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing information system connections

-

system and communications protection policy

-

information system interconnection security agreements

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

security assessment report

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for managing direct connections to external networks

-

network administrators

-

organizational personnel with information security responsibilities

-

personnel managing directly connected external networks

-
-
- - TEST - -

Automated mechanisms supporting the management of external network connections

-
-
-
- - Classified National Security System Connections - - - - CA-3(2) - -

The organization prohibits the direct connection of a classified, national security system to an external network without the use of .

-
- -

Organizations typically do not have control over external networks (e.g., the Internet). Approved boundary protection devices (e.g., routers, firewalls) mediate communications (i.e., information flows) between classified national security systems and external networks. In addition, approved boundary protection devices (typically managed interface/cross-domain systems) provide information flow enforcement from information systems to external networks.

-
- -

Determine if the organization:

- - CA-3(2)[1] -

defines a boundary protection device to be used to establish the direct connection of a classified, national security system to an external network; and

-
- - CA-3(2)[2] -

prohibits the direct connection of a classified, national security system to an external network without the use of an organization-defined boundary protection device.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing information system connections

-

system and communications protection policy

-

information system interconnection security agreements

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

security assessment report

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for managing direct connections to external networks

-

network administrators

-

organizational personnel with information security responsibilities

-

personnel managing directly connected external networks

-
-
- - TEST - -

Automated mechanisms supporting the management of external network connections

-
-
-
- - Unclassified Non-national Security System Connections - - - - - - - CA-3(3) - -

The organization prohibits the direct connection of an to an external network without the use of .

-
- -

Organizations typically do not have control over external networks (e.g., the Internet). Approved boundary protection devices (e.g., routers, firewalls) mediate communications (i.e., information flows) between unclassified non-national security systems and external networks. This control enhancement is required for organizations processing, storing, or transmitting Controlled Unclassified Information (CUI).

-
- -

Determine if the organization:

- - CA-3(3)[1] -

defines an unclassified, non-national security system whose direct connection to an external network is to be prohibited without the use of approved boundary protection device;

-
- - CA-3(3)[2] -

defines a boundary protection device to be used to establish the direct connection of an organization-defined unclassified, non-national security system to an external network; and

-
- - CA-3(3)[3] -

prohibits the direct connection of an organization-defined unclassified, non-national security system to an external network without the use of an organization-defined boundary protection device.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing information system connections

-

system and communications protection policy

-

information system interconnection security agreements

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

security assessment report

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for managing direct connections to external networks

-

network administrators

-

organizational personnel with information security responsibilities

-

personnel managing directly connected external networks

-
-
- - TEST - -

Automated mechanisms supporting the management of external network connections

-
-
-
- - Connections to Public Networks - - - - CA-3(4) - -

The organization prohibits the direct connection of an to a public network.

-
- -

A public network is any network accessible to the general public including, for example, the Internet and organizational extranets with public access.

-
- -

Determine if the organization:

- - CA-3(4)[1] -

defines an information system whose direct connection to a public network is to be prohibited; and

-
- - CA-3(4)[2] -

prohibits the direct connection of an organization-defined information system to a public network.

-
-
- - EXAMINE - -

Access control policy

-

procedures addressing information system connections

-

system and communications protection policy

-

information system interconnection security agreements

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

security assessment report

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting the management of public network connections

-
-
-
- - Restrictions On External System Connections - - - - - - - CA-3(5) - -

The organization employs policy for allowing to connect to external information systems.

-
- -

Organizations can constrain information system connectivity to external domains (e.g., websites) by employing one of two policies with regard to such connectivity: (i) allow-all, deny by exception, also known as blacklisting (the weaker of the two policies); or (ii) deny-all, allow by exception, also known as whitelisting (the stronger of the two policies). For either policy, organizations determine what exceptions, if any, are acceptable.

- CM-7 -
- -

Determine if the organization:

- - CA-3(5)[1] -

defines information systems to be allowed to connect to external information systems;

-
- - CA-3(5)[2] -

employs one of the following policies for allowing organization-defined information systems to connect to external information systems:

- - CA-3(5)[2][a] -

allow-all policy;

-
- - CA-3(5)[2][b] -

deny-by-exception policy;

-
- - CA-3(5)[2][c] -

deny-all policy; or

-
- - CA-3(5)[2][d] -

permit-by-exception policy.

-
-
-
- - EXAMINE - -

Access control policy

-

procedures addressing information system connections

-

system and communications protection policy

-

information system interconnection agreements

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

security assessment report

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for managing connections to external information systems

-

network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing restrictions on external system connections

-
-
-
- - FIPS Publication 199 - - NIST Special Publication 800-47 - -
- - Security Certification - CA-4 - Withdrawn - CA-2 - - - Plan of Action and Milestones - - - - CA-5 - -

The organization:

- - a. -

Develops a plan of action and milestones for the information system to document the organization’s planned remedial actions to correct weaknesses or deficiencies noted during the assessment of the security controls and to reduce or eliminate known vulnerabilities in the system; and

-
- - b. -

Updates existing plan of action and milestones based on the findings from security controls assessments, security impact analyses, and continuous monitoring activities.

-
-
- -

Plans of action and milestones are key documents in security authorization packages and are subject to federal reporting requirements established by OMB.

- CA-2 - CA-7 - CM-4 - PM-4 -
- -

Determine if the organization:

- - CA-5(a) -

develops a plan of action and milestones for the information system to:

- - CA-5(a)[1] -

document the organization’s planned remedial actions to correct weaknesses or deficiencies noted during the assessment of the security controls;

-
- - CA-5(a)[2] -

reduce or eliminate known vulnerabilities in the system;

-
-
- - CA-5(b) - - CA-5(b)[1] -

defines the frequency to update the existing plan of action and milestones;

-
- - CA-5(b)[2] -

updates the existing plan of action and milestones with the organization-defined frequency based on the findings from:

- - CA-5(b)[2][a] -

security controls assessments;

-
- - CA-5(b)[2][b] -

security impact analyses; and

-
- - CA-5(b)[2][c] -

continuous monitoring activities.

-
-
-
-
- - EXAMINE - -

Security assessment and authorization policy

-

procedures addressing plan of action and milestones

-

security plan

-

security assessment plan

-

security assessment report

-

security assessment evidence

-

plan of action and milestones

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with plan of action and milestones development and implementation responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms for developing, implementing, and maintaining plan of action and milestones

-
-
- - Automation Support for Accuracy / Currency - CA-5(1) - -

The organization employs automated mechanisms to help ensure that the plan of action and milestones for the information system is accurate, up to date, and readily available.

-
- -

Determine if the organization employs automated mechanisms to help ensure that the plan of action and milestones for the information system is:

- - CA-5(1)[1] -

accurate;

-
- - CA-5(1)[2] -

up to date; and

-
- - CA-5(1)[3] -

readily available.

-
-
- - EXAMINE - -

Security assessment and authorization policy

-

procedures addressing plan of action and milestones

-

information system design documentation, information system configuration settings and associated documentation

-

information system audit records

-

plan of action and milestones

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with plan of action and milestones development and implementation responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms for developing, implementing and maintaining plan of action and milestones

-
-
-
- - OMB Memorandum 02-01 - - NIST Special Publication 800-37 - -
- - Security Authorization - - - - CA-6 - -

The organization:

- - a. -

Assigns a senior-level executive or manager as the authorizing official for the information system;

-
- - b. -

Ensures that the authorizing official authorizes the information system for processing before commencing operations; and

-
- - c. -

Updates the security authorization .

-
-
- -

Security authorizations are official management decisions, conveyed through authorization decision documents, by senior organizational officials or executives (i.e., authorizing officials) to authorize operation of information systems and to explicitly accept the risk to organizational operations and assets, individuals, other organizations, and the Nation based on the implementation of agreed-upon security controls. Authorizing officials provide budgetary oversight for organizational information systems or assume responsibility for the mission/business operations supported by those systems. The security authorization process is an inherently federal responsibility and therefore, authorizing officials must be federal employees. Through the security authorization process, authorizing officials assume responsibility and are accountable for security risks associated with the operation and use of organizational information systems. Accordingly, authorizing officials are in positions with levels of authority commensurate with understanding and accepting such information security-related risks. OMB policy requires that organizations conduct ongoing authorizations of information systems by implementing continuous monitoring programs. Continuous monitoring programs can satisfy three-year reauthorization requirements, so separate reauthorization processes are not necessary. Through the employment of comprehensive continuous monitoring processes, critical information contained in authorization packages (i.e., security plans, security assessment reports, and plans of action and milestones) is updated on an ongoing basis, providing authorizing officials and information system owners with an up-to-date status of the security state of organizational information systems and environments of operation. To reduce the administrative cost of security reauthorization, authorizing officials use the results of continuous monitoring processes to the maximum extent possible as the basis for rendering reauthorization decisions.

- CA-2 - CA-7 - PM-9 - PM-10 -
- -

Determine if the organization:

- - CA-6(a) -

assigns a senior-level executive or manager as the authorizing official for the information system;

-
- - CA-6(b) -

ensures that the authorizing official authorizes the information system for processing before commencing operations;

-
- - CA-6(c) - - CA-6(c)[1] -

defines the frequency to update the security authorization; and

-
- - CA-6(c)[2] -

updates the security authorization with the organization-defined frequency.

-
-
-
- - EXAMINE - -

Security assessment and authorization policy

-

procedures addressing security authorization

-

security authorization package (including security plan

-

security assessment report

-

plan of action and milestones

-

authorization statement)

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security authorization responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms that facilitate security authorizations and updates

-
-
- - OMB Circular A-130 - - OMB Memorandum 11-33 - - NIST Special Publication 800-37 - - NIST Special Publication 800-137 - -
- - Continuous Monitoring - - - - - - - - - - - - - - - - CA-7 - -

The organization develops a continuous monitoring strategy and implements a continuous monitoring program that includes:

- - a. -

Establishment of to be monitored;

-
- - b. -

Establishment of for monitoring and for assessments supporting such monitoring;

-
- - c. -

Ongoing security control assessments in accordance with the organizational continuous monitoring strategy;

-
- - d. -

Ongoing security status monitoring of organization-defined metrics in accordance with the organizational continuous monitoring strategy;

-
- - e. -

Correlation and analysis of security-related information generated by assessments and monitoring;

-
- - f. -

Response actions to address results of the analysis of security-related information; and

-
- - g. -

Reporting the security status of organization and the information system to - .

-
-
- -

Continuous monitoring programs facilitate ongoing awareness of threats, vulnerabilities, and information security to support organizational risk management decisions. The terms continuous and ongoing imply that organizations assess/analyze security controls and information security-related risks at a frequency sufficient to support organizational risk-based decisions. The results of continuous monitoring programs generate appropriate risk response actions by organizations. Continuous monitoring programs also allow organizations to maintain the security authorizations of information systems and common controls over time in highly dynamic environments of operation with changing mission/business needs, threats, vulnerabilities, and technologies. Having access to security-related information on a continuing basis through reports/dashboards gives organizational officials the capability to make more effective and timely risk management decisions, including ongoing security authorization decisions. Automation supports more frequent updates to security authorization packages, hardware/software/firmware inventories, and other system information. Effectiveness is further enhanced when continuous monitoring outputs are formatted to provide information that is specific, measurable, actionable, relevant, and timely. Continuous monitoring activities are scaled in accordance with the security categories of information systems.

- CA-2 - CA-5 - CA-6 - CM-3 - CM-4 - PM-6 - PM-9 - RA-5 - SA-11 - SA-12 - SI-2 - SI-4 -
- -

Determine if the organization:

- - CA-7(a) - - CA-7(a)[1] -

develops a continuous monitoring strategy that defines metrics to be monitored;

-
- - CA-7(a)[2] -

develops a continuous monitoring strategy that includes monitoring of organization-defined metrics;

-
- - CA-7(a)[3] -

implements a continuous monitoring program that includes monitoring of organization-defined metrics in accordance with the organizational continuous monitoring strategy;

-
-
- - CA-7(b) - - CA-7(b)[1] -

develops a continuous monitoring strategy that defines frequencies for monitoring;

-
- - CA-7(b)[2] -

defines frequencies for assessments supporting monitoring;

-
- - CA-7(b)[3] -

develops a continuous monitoring strategy that includes establishment of the organization-defined frequencies for monitoring and for assessments supporting monitoring;

-
- - CA-7(b)[4] -

implements a continuous monitoring program that includes establishment of organization-defined frequencies for monitoring and for assessments supporting such monitoring in accordance with the organizational continuous monitoring strategy;

-
-
- - CA-7(c) - - CA-7(c)[1] -

develops a continuous monitoring strategy that includes ongoing security control assessments;

-
- - CA-7(c)[2] -

implements a continuous monitoring program that includes ongoing security control assessments in accordance with the organizational continuous monitoring strategy;

-
-
- - CA-7(d) - - CA-7(d)[1] -

develops a continuous monitoring strategy that includes ongoing security status monitoring of organization-defined metrics;

-
- - CA-7(d)[2] -

implements a continuous monitoring program that includes ongoing security status monitoring of organization-defined metrics in accordance with the organizational continuous monitoring strategy;

-
-
- - CA-7(e) - - CA-7(e)[1] -

develops a continuous monitoring strategy that includes correlation and analysis of security-related information generated by assessments and monitoring;

-
- - CA-7(e)[2] -

implements a continuous monitoring program that includes correlation and analysis of security-related information generated by assessments and monitoring in accordance with the organizational continuous monitoring strategy;

-
-
- - CA-7(f) - - CA-7(f)[1] -

develops a continuous monitoring strategy that includes response actions to address results of the analysis of security-related information;

-
- - CA-7(f)[2] -

implements a continuous monitoring program that includes response actions to address results of the analysis of security-related information in accordance with the organizational continuous monitoring strategy;

-
-
- - CA-7(g) - - CA-7(g)[1] -

develops a continuous monitoring strategy that defines the personnel or roles to whom the security status of the organization and information system are to be reported;

-
- - CA-7(g)[2] -

develops a continuous monitoring strategy that defines the frequency to report the security status of the organization and information system to organization-defined personnel or roles;

-
- - CA-7(g)[3] -

develops a continuous monitoring strategy that includes reporting the security status of the organization or information system to organizational-defined personnel or roles with the organization-defined frequency; and

-
- - CA-7(g)[4] -

implements a continuous monitoring program that includes reporting the security status of the organization and information system to organization-defined personnel or roles with the organization-defined frequency in accordance with the organizational continuous monitoring strategy.

-
-
-
- - EXAMINE - -

Security assessment and authorization policy

-

procedures addressing continuous monitoring of information system security controls

-

procedures addressing configuration management

-

security plan

-

security assessment report

-

plan of action and milestones

-

information system monitoring records

-

configuration management records, security impact analyses

-

status reports

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with continuous monitoring responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Mechanisms implementing continuous monitoring

-
-
- - Independent Assessment - - - - CA-7(1) - -

The organization employs assessors or assessment teams with to monitor the security controls in the information system on an ongoing basis.

-
- -

Organizations can maximize the value of assessments of security controls during the continuous monitoring process by requiring that such assessments be conducted by assessors or assessment teams with appropriate levels of independence based on continuous monitoring strategies. Assessor independence provides a degree of impartiality to the monitoring process. To achieve such impartiality, assessors should not: (i) create a mutual or conflicting interest with the organizations where the assessments are being conducted; (ii) assess their own work; (iii) act as management or employees of the organizations they are serving; or (iv) place themselves in advocacy positions for the organizations acquiring their services.

-
- -

Determine if the organization:

- - CA-7(1)[1] -

defines a level of independence to be employed to monitor the security controls in the information system on an ongoing basis; and

-
- - CA-7(1)[2] -

employs assessors or assessment teams with the organization-defined level of independence to monitor the security controls in the information system on an ongoing basis.

-
-
- - EXAMINE - -

Security assessment and authorization policy

-

procedures addressing continuous monitoring of information system security controls

-

security plan

-

security assessment report

-

plan of action and milestones

-

information system monitoring records

-

security impact analyses

-

status reports

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with continuous monitoring responsibilities

-

organizational personnel with information security responsibilities

-
-
-
- - Types of Assessments - CA-7(2) - Withdrawn - CA-2 - - - Trend Analyses - CA-7(3) - -

The organization employs trend analyses to determine if security control implementations, the frequency of continuous monitoring activities, and/or the types of activities used in the continuous monitoring process need to be modified based on empirical data.

-
- -

Trend analyses can include, for example, examining recent threat information regarding the types of threat events that have occurred within the organization or across the federal government, success rates of certain types of cyber attacks, emerging vulnerabilities in information technologies, evolving social engineering techniques, results from multiple security control assessments, the effectiveness of configuration settings, and findings from Inspectors General or auditors.

-
- -

Determine if the organization employs trend analyses to determine if the following items need to be modified based on empirical data:

- - CA-7(3)[1] -

security control implementations;

-
- - CA-7(3)[2] -

the frequency of continuous monitoring activities; and/or

-
- - CA-7(3)[3] -

the types of activities used in the continuous monitoring process.

-
-
- - EXAMINE - -

Continuous monitoring strategy

-

Security assessment and authorization policy

-

procedures addressing continuous monitoring of information system security controls

-

security plan

-

security assessment report

-

plan of action and milestones

-

information system monitoring records

-

security impact analyses

-

status reports

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with continuous monitoring responsibilities

-

organizational personnel with information security responsibilities

-
-
-
- - OMB Memorandum 11-33 - - NIST Special Publication 800-37 - - NIST Special Publication 800-39 - - NIST Special Publication 800-53A - - NIST Special Publication 800-115 - - NIST Special Publication 800-137 - - US-CERT Technical Cyber Security Alerts - - DoD Information Assurance Vulnerability Alerts - -
- - Penetration Testing - - - - - - - CA-8 - -

The organization conducts penetration testing on .

-
- -

Penetration testing is a specialized type of assessment conducted on information systems or individual system components to identify vulnerabilities that could be exploited by adversaries. Such testing can be used to either validate vulnerabilities or determine the degree of resistance organizational information systems have to adversaries within a set of specified constraints (e.g., time, resources, and/or skills). Penetration testing attempts to duplicate the actions of adversaries in carrying out hostile cyber attacks against organizations and provides a more in-depth analysis of security-related weaknesses/deficiencies. Organizations can also use the results of vulnerability analyses to support penetration testing activities. Penetration testing can be conducted on the hardware, software, or firmware components of an information system and can exercise both physical and technical security controls. A standard method for penetration testing includes, for example: (i) pretest analysis based on full knowledge of the target system; (ii) pretest identification of potential vulnerabilities based on pretest analysis; and (iii) testing designed to determine exploitability of identified vulnerabilities. All parties agree to the rules of engagement before the commencement of penetration testing scenarios. Organizations correlate the penetration testing rules of engagement with the tools, techniques, and procedures that are anticipated to be employed by adversaries carrying out attacks. Organizational risk assessments guide decisions on the level of independence required for personnel conducting penetration testing.

- SA-12 -
- -

Determine if the organization:

- - CA-8[1] -

defines information systems or system components on which penetration testing is to be conducted;

-
- - CA-8[2] -

defines the frequency to conduct penetration testing on organization-defined information systems or system components; and

-
- - CA-8[3] -

conducts penetration testing on organization-defined information systems or system components with the organization-defined frequency.

-
-
- - EXAMINE - -

Security assessment and authorization policy

-

procedures addressing penetration testing

-

security plan

-

security assessment plan

-

penetration test report

-

security assessment report

-

security assessment evidence

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security assessment responsibilities

-

organizational personnel with information security responsibilities, system/network administrators

-
-
- - TEST - -

Automated mechanisms supporting penetration testing

-
-
- - Independent Penetration Agent or Team - CA-8(1) - -

The organization employs an independent penetration agent or penetration team to perform penetration testing on the information system or system components.

-
- -

Independent penetration agents or teams are individuals or groups who conduct impartial penetration testing of organizational information systems. Impartiality implies that penetration agents or teams are free from any perceived or actual conflicts of interest with regard to the development, operation, or management of the information systems that are the targets of the penetration testing. Supplemental guidance for CA-2 (1) provides additional information regarding independent assessments that can be applied to penetration testing.

- CA-2 -
- -

Determine if the organization employs an independent penetration agent or penetration team to perform penetration testing on the information system or system components.

-
- - EXAMINE - -

Security assessment and authorization policy

-

procedures addressing penetration testing

-

security plan

-

security assessment plan

-

penetration test report

-

security assessment report

-

security assessment evidence

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security assessment responsibilities

-

organizational personnel with information security responsibilities

-
-
-
- - Red Team Exercises - - - - - - - CA-8(2) - -

The organization employs to simulate attempts by adversaries to compromise organizational information systems in accordance with .

-
- -

Red team exercises extend the objectives of penetration testing by examining the security posture of organizations and their ability to implement effective cyber defenses. As such, red team exercises reflect simulated adversarial attempts to compromise organizational mission/business functions and provide a comprehensive assessment of the security state of information systems and organizations. Simulated adversarial attempts to compromise organizational missions/business functions and the information systems that support those missions/functions may include technology-focused attacks (e.g., interactions with hardware, software, or firmware components and/or mission/business processes) and social engineering-based attacks (e.g., interactions via email, telephone, shoulder surfing, or personal conversations). While penetration testing may be largely laboratory-based testing, organizations use red team exercises to provide more comprehensive assessments that reflect real-world conditions. Red team exercises can be used to improve security awareness and training and to assess levels of security control effectiveness.

-
- -

Determine if the organization:

- - CA-8(2)[1] -

defines red team exercises to be employed to simulate attempts by adversaries to compromise organizational information systems;

-
- - CA-8(2)[2] -

defines rules of engagement for employing organization-defined red team exercises; and

-
- - CA-8(2)[3] -

employs organization-defined red team exercises to simulate attempts by adversaries to compromise organizational information systems in accordance with organization-defined rules of engagement.

-
-
- - EXAMINE - -

Security assessment and authorization policy

-

procedures addressing penetration testing

-

procedures addressing red team exercises

-

security plan

-

security assessment plan

-

results of red team exercise

-

penetration test report

-

security assessment report

-

rules of engagement

-

security assessment evidence

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security assessment responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms supporting employment of red team exercises

-
-
-
-
- - Internal System Connections - - - - CA-9 - -

The organization:

- - a. -

Authorizes internal connections of to the information system; and

-
- - b. -

Documents, for each internal connection, the interface characteristics, security requirements, and the nature of the information communicated.

-
-
- -

This control applies to connections between organizational information systems and (separate) constituent system components (i.e., intra-system connections) including, for example, system connections with mobile devices, notebook/desktop computers, printers, copiers, facsimile machines, scanners, sensors, and servers. Instead of authorizing each individual internal connection, organizations can authorize internal connections for a class of components with common characteristics and/or configurations, for example, all digital printers, scanners, and copiers with a specified processing, storage, and transmission capability or all smart phones with a specific baseline configuration.

- AC-3 - AC-4 - AC-18 - AC-19 - AU-2 - AU-12 - CA-7 - CM-2 - IA-3 - SC-7 - SI-4 -
- -

Determine if the organization:

- - CA-9(a) - - CA-9(a)[1] -

defines information system components or classes of components to be authorized as internal connections to the information system;

-
- - CA-9(a)[2] -

authorizes internal connections of organization-defined information system components or classes of components to the information system;

-
-
- - CA-9(b) -

documents, for each internal connection:

- - CA-9(b)[1] -

the interface characteristics;

-
- - CA-9(b)[2] -

the security requirements; and

-
- - CA-9(b)[3] -

the nature of the information communicated.

-
-
-
- - EXAMINE - -

Access control policy

-

procedures addressing information system connections

-

system and communications protection policy

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of components or classes of components authorized as internal system connections

-

security assessment report

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for developing, implementing, or authorizing internal system connections

-

organizational personnel with information security responsibilities

-
-
- - Security Compliance Checks - CA-9(1) - -

The information system performs security compliance checks on constituent system components prior to the establishment of the internal connection.

-
- -

Security compliance checks may include, for example, verification of the relevant baseline configuration.

- CM-6 -
- -

Determine if the information system performs security compliance checks on constituent system components prior to the establishment of the internal connection.

-
- - EXAMINE - -

Access control policy

-

procedures addressing information system connections

-

system and communications protection policy

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of components or classes of components authorized as internal system connections

-

security assessment report

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for developing, implementing, or authorizing internal system connections

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting compliance checks

-
-
-
-
-
- - Configuration Management - - Configuration Management Policy and Procedures - - - - - - - - - - CM-1 - -

The organization:

- - a. -

Develops, documents, and disseminates to :

- - 1. -

A configuration management policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and

-
- - 2. -

Procedures to facilitate the implementation of the configuration management policy and associated configuration management controls; and

-
-
- - b. -

Reviews and updates the current:

- - 1. -

Configuration management policy ; and

-
- - 2. -

Configuration management procedures .

-
-
-
- -

This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the CM family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures.

- PM-9 -
- -

Determine if the organization:

- - CM-1(a) - - CM-1(a)(1) - - CM-1(a)(1)[1] -

develops and documents a configuration management policy that addresses:

- - CM-1(a)(1)[1][a] -

purpose;

-
- - CM-1(a)(1)[1][b] -

scope;

-
- - CM-1(a)(1)[1][c] -

roles;

-
- - CM-1(a)(1)[1][d] -

responsibilities;

-
- - CM-1(a)(1)[1][e] -

management commitment;

-
- - CM-1(a)(1)[1][f] -

coordination among organizational entities;

-
- - CM-1(a)(1)[1][g] -

compliance;

-
-
- - CM-1(a)(1)[2] -

defines personnel or roles to whom the configuration management policy is to be disseminated;

-
- - CM-1(a)(1)[3] -

disseminates the configuration management policy to organization-defined personnel or roles;

-
-
- - CM-1(a)(2) - - CM-1(a)(2)[1] -

develops and documents procedures to facilitate the implementation of the configuration management policy and associated configuration management controls;

-
- - CM-1(a)(2)[2] -

defines personnel or roles to whom the procedures are to be disseminated;

-
- - CM-1(a)(2)[3] -

disseminates the procedures to organization-defined personnel or roles;

-
-
-
- - CM-1(b) - - CM-1(b)(1) - - CM-1(b)(1)[1] -

defines the frequency to review and update the current configuration management policy;

-
- - CM-1(b)(1)[2] -

reviews and updates the current configuration management policy with the organization-defined frequency;

-
-
- - CM-1(b)(2) - - CM-1(b)(2)[1] -

defines the frequency to review and update the current configuration management procedures; and

-
- - CM-1(b)(2)[2] -

reviews and updates the current configuration management procedures with the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

Configuration management policy and procedures

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with configuration management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - NIST Special Publication 800-12 - - NIST Special Publication 800-100 - -
- - Baseline Configuration - CM-2 - -

The organization develops, documents, and maintains under configuration control, a current baseline configuration of the information system.

-
- -

This control establishes baseline configurations for information systems and system components including communications and connectivity-related aspects of systems. Baseline configurations are documented, formally reviewed and agreed-upon sets of specifications for information systems or configuration items within those systems. Baseline configurations serve as a basis for future builds, releases, and/or changes to information systems. Baseline configurations include information about information system components (e.g., standard software packages installed on workstations, notebook computers, servers, network components, or mobile devices; current version numbers and patch information on operating systems and applications; and configuration settings/parameters), network topology, and the logical placement of those components within the system architecture. Maintaining baseline configurations requires creating new baselines as organizational information systems change over time. Baseline configurations of information systems reflect the current enterprise architecture.

- CM-3 - CM-6 - CM-8 - CM-9 - SA-10 - PM-5 - PM-7 -
- -

Determine if the organization:

- - CM-2[1] -

develops and documents a current baseline configuration of the information system; and

-
- - CM-2[2] -

maintains, under configuration control, a current baseline configuration of the information system.

-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing the baseline configuration of the information system

-

configuration management plan

-

enterprise architecture documentation

-

information system design documentation

-

information system architecture and configuration documentation

-

information system configuration settings and associated documentation

-

change control records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with configuration management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for managing baseline configurations

-

automated mechanisms supporting configuration control of the baseline configuration

-
-
- - Reviews and Updates - - - - - - - CM-2(1) - -

The organization reviews and updates the baseline configuration of the information system:

- - (a) -

- ;

-
- - (b) -

When required due to ; and

-
- - (c) -

As an integral part of information system component installations and upgrades.

-
-
- - CM-5 - - -

Determine if the organization:

- - CM-2(1)(a) - - CM-2(1)(a)[1] -

defines the frequency to review and update the baseline configuration of the information system;

-
- - CM-2(1)(a)[2] -

reviews and updates the baseline configuration of the information system with the organization-defined frequency;

-
- CM-2(1)(a) -
- - CM-2(1)(b) - - CM-2(1)(b)[1] -

defines circumstances that require the baseline configuration of the information system to be reviewed and updated;

-
- - CM-2(1)(b)[2] -

reviews and updates the baseline configuration of the information system when required due to organization-defined circumstances; and

-
- CM-2(1)(b) -
- - CM-2(1)(c) -

reviews and updates the baseline configuration of the information system as an integral part of information system component installations and upgrades.

- CM-2(1)(c) -
-
- - EXAMINE - -

Configuration management policy

-

configuration management plan

-

procedures addressing the baseline configuration of the information system

-

procedures addressing information system component installations and upgrades

-

information system architecture and configuration documentation

-

information system configuration settings and associated documentation

-

records of information system baseline configuration reviews and updates

-

information system component installations/upgrades and associated records

-

change control records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with configuration management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for managing baseline configurations

-

automated mechanisms supporting review and update of the baseline configuration

-
-
-
- - Automation Support for Accuracy / Currency - CM-2(2) - -

The organization employs automated mechanisms to maintain an up-to-date, complete, accurate, and readily available baseline configuration of the information system.

-
- -

Automated mechanisms that help organizations maintain consistent baseline configurations for information systems include, for example, hardware and software inventory tools, configuration management tools, and network management tools. Such tools can be deployed and/or allocated as common controls, at the information system level, or at the operating system or component level (e.g., on workstations, servers, notebook computers, network components, or mobile devices). Tools can be used, for example, to track version numbers on operating system applications, types of software installed, and current patch levels. This control enhancement can be satisfied by the implementation of CM-8 (2) for organizations that choose to combine information system component inventory and baseline configuration activities.

- CM-7 - RA-5 -
- -

Determine if the organization employs automated mechanisms to maintain:

- - CM-2(2)[1] -

an up-to-date baseline configuration of the information system;

-
- - CM-2(2)[2] -

a complete baseline configuration of the information system;

-
- - CM-2(2)[3] -

an accurate baseline configuration of the information system; and

-
- - CM-2(2)[4] -

a readily available baseline configuration of the information system.

-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing the baseline configuration of the information system

-

configuration management plan

-

information system design documentation

-

information system architecture and configuration documentation

-

information system configuration settings and associated documentation

-

configuration change control records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with configuration management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for managing baseline configurations

-

automated mechanisms implementing baseline configuration maintenance

-
-
-
- - Retention of Previous Configurations - - - - CM-2(3) - -

The organization retains to support rollback.

-
- -

Retaining previous versions of baseline configurations to support rollback may include, for example, hardware, software, firmware, configuration files, and configuration records.

-
- -

Determine if the organization:

- - CM-2(3)[1] -

defines previous versions of baseline configurations of the information system to be retained to support rollback; and

-
- - CM-2(3)[2] -

retains organization-defined previous versions of baseline configurations of the information system to support rollback.

-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing the baseline configuration of the information system

-

configuration management plan

-

information system architecture and configuration documentation

-

information system configuration settings and associated documentation

-

copies of previous baseline configuration versions

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with configuration management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for managing baseline configurations

-
-
-
- - Unauthorized Software - CM-2(4) - Withdrawn - CM-7 - - - Authorized Software - CM-2(5) - Withdrawn - CM-7 - - - Development and Test Environments - CM-2(6) - -

The organization maintains a baseline configuration for information system development and test environments that is managed separately from the operational baseline configuration.

-
- -

Establishing separate baseline configurations for development, testing, and operational environments helps protect information systems from unplanned/unexpected events related to development and testing activities. Separate baseline configurations allow organizations to apply the configuration management that is most appropriate for each type of configuration. For example, management of operational configurations typically emphasizes the need for stability, while management of development/test configurations requires greater flexibility. Configurations in the test environment mirror the configurations in the operational environment to the extent practicable so that the results of the testing are representative of the proposed changes to the operational systems. This control enhancement requires separate configurations but not necessarily separate physical environments.

- CM-4 - SC-3 - SC-7 -
- -

Determine if the organization maintains a baseline configuration for information system development and test environments that is managed separately from the operational baseline configuration.

-
- - EXAMINE - -

Configuration management policy

-

procedures addressing the baseline configuration of the information system

-

configuration management plan

-

information system design documentation

-

information system architecture and configuration documentation

-

information system configuration settings and associated documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with configuration management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for managing baseline configurations

-

automated mechanisms implementing separate baseline configurations for development, test, and operational environments

-
-
-
- - Configure Systems, Components, or Devices for High-risk Areas - - - - - - - - - - CM-2(7) - -

The organization:

- - (a) -

Issues with to individuals traveling to locations that the organization deems to be of significant risk; and

-
- - (b) -

Applies to the devices when the individuals return.

-
-
- -

When it is known that information systems, system components, or devices (e.g., notebook computers, mobile devices) will be located in high-risk areas, additional security controls may be implemented to counter the greater threat in such areas coupled with the lack of physical security relative to organizational-controlled areas. For example, organizational policies and procedures for notebook computers used by individuals departing on and returning from travel include, for example, determining which locations are of concern, defining required configurations for the devices, ensuring that the devices are configured as intended before travel is initiated, and applying specific safeguards to the device after travel is completed. Specially configured notebook computers include, for example, computers with sanitized hard drives, limited applications, and additional hardening (e.g., more stringent configuration settings). Specified safeguards applied to mobile devices upon return from travel include, for example, examining the device for signs of physical tampering and purging/reimaging the hard disk drive. Protecting information residing on mobile devices is covered in the media protection family.

-
- -

Determine if the organization:

- - CM-2(7)(a) - - CM-2(7)(a)[1] -

defines information systems, system components, or devices to be issued to individuals traveling to locations that the organization deems to be of significant risk;

-
- - CM-2(7)(a)[2] -

defines configurations to be employed on organization-defined information systems, system components, or devices issued to individuals traveling to such locations;

-
- - CM-2(7)(a)[3] -

issues organization-defined information systems, system components, or devices with organization-defined configurations to individuals traveling to locations that the organization deems to be of significant risk;

-
- CM-2(7)(a) -
- - CM-2(7)(b) - - CM-2(7)(b)[1] -

defines security safeguards to be applied to the devices when the individuals return; and

-
- - CM-2(7)(b)[2] -

applies organization-defined safeguards to the devices when the individuals return.

-
- CM-2(7)(b) -
-
- - EXAMINE - -

Configuration management policy

-

configuration management plan

-

procedures addressing the baseline configuration of the information system

-

procedures addressing information system component installations and upgrades

-

information system architecture and configuration documentation

-

information system configuration settings and associated documentation

-

records of information system baseline configuration reviews and updates

-

information system component installations/upgrades and associated records

-

change control records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with configuration management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for managing baseline configurations

-
-
-
- - NIST Special Publication 800-128 - -
- - Configuration Change Control - - - - - - - - - - - - - - - - CM-3 - -

The organization:

- - a. -

Determines the types of changes to the information system that are configuration-controlled;

-
- - b. -

Reviews proposed configuration-controlled changes to the information system and approves or disapproves such changes with explicit consideration for security impact analyses;

-
- - c. -

Documents configuration change decisions associated with the information system;

-
- - d. -

Implements approved configuration-controlled changes to the information system;

-
- - e. -

Retains records of configuration-controlled changes to the information system for ;

-
- - f. -

Audits and reviews activities associated with configuration-controlled changes to the information system; and

-
- - g. -

Coordinates and provides oversight for configuration change control activities through that convenes .

-
-
- -

Configuration change controls for organizational information systems involve the systematic proposal, justification, implementation, testing, review, and disposition of changes to the systems, including system upgrades and modifications. Configuration change control includes changes to baseline configurations for components and configuration items of information systems, changes to configuration settings for information technology products (e.g., operating systems, applications, firewalls, routers, and mobile devices), unscheduled/unauthorized changes, and changes to remediate vulnerabilities. Typical processes for managing configuration changes to information systems include, for example, Configuration Control Boards that approve proposed changes to systems. For new development information systems or systems undergoing major upgrades, organizations consider including representatives from development organizations on the Configuration Control Boards. Auditing of changes includes activities before and after changes are made to organizational information systems and the auditing activities required to implement such changes.

- CA-7 - CM-2 - CM-4 - CM-5 - CM-6 - CM-9 - SA-10 - SI-2 - SI-12 -
- -

Determine if the organization:

- - CM-3(a) -

determines the type of changes to the information system that must be configuration-controlled;

-
- - CM-3(b) -

reviews proposed configuration-controlled changes to the information system and approves or disapproves such changes with explicit consideration for security impact analyses;

-
- - CM-3(c) -

documents configuration change decisions associated with the information system;

-
- - CM-3(d) -

implements approved configuration-controlled changes to the information system;

-
- - CM-3(e) - - CM-3(e)[1] -

defines a time period to retain records of configuration-controlled changes to the information system;

-
- - CM-3(e)[2] -

retains records of configuration-controlled changes to the information system for the organization-defined time period;

-
-
- - CM-3(f) -

audits and reviews activities associated with configuration-controlled changes to the information system;

-
- - CM-3(g) - - CM-3(g)[1] -

defines a configuration change control element (e.g., committee, board) responsible for coordinating and providing oversight for configuration change control activities;

-
- - CM-3(g)[2] -

defines the frequency with which the configuration change control element must convene; and/or

-
- - CM-3(g)[3] -

defines configuration change conditions that prompt the configuration change control element to convene; and

-
- - CM-3(g)[4] -

coordinates and provides oversight for configuration change control activities through organization-defined configuration change control element that convenes at organization-defined frequency and/or for any organization-defined configuration change conditions.

-
-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing information system configuration change control

-

configuration management plan

-

information system architecture and configuration documentation

-

security plan

-

change control records

-

information system audit records

-

change control audit and review reports

-

agenda /minutes from configuration change control oversight meetings

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with configuration change control responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

members of change control board or similar

-
-
- - TEST - -

Organizational processes for configuration change control

-

automated mechanisms that implement configuration change control

-
-
- - Automated Document / Notification / Prohibition of Changes - - - - - - - - - - CM-3(1) - -

The organization employs automated mechanisms to:

- - (a) -

Document proposed changes to the information system;

-
- - (b) -

Notify of proposed changes to the information system and request change approval;

-
- - (c) -

Highlight proposed changes to the information system that have not been approved or disapproved by ;

-
- - (d) -

Prohibit changes to the information system until designated approvals are received;

-
- - (e) -

Document all changes to the information system; and

-
- - (f) -

Notify when approved changes to the information system are completed.

-
-
- -

Determine if the organization:

- - CM-3(1)(a) -

employs automated mechanisms to document proposed changes to the information system;

- CM-3(1)(a) -
- - CM-3(1)(b) - - CM-3(1)(b)[1] -

defines approval authorities to be notified of proposed changes to the information system and request change approval;

-
- - CM-3(1)(b)[2] -

employs automated mechanisms to notify organization-defined approval authorities of proposed changes to the information system and request change approval;

-
- CM-3(1)(b) -
- - CM-3(1)(c) - - CM-3(1)(c)[1] -

defines the time period within which proposed changes to the information system that have not been approved or disapproved must be highlighted;

-
- - CM-3(1)(c)[2] -

employs automated mechanisms to highlight proposed changes to the information system that have not been approved or disapproved by organization-defined time period;

-
- CM-3(1)(c) -
- - CM-3(1)(d) -

employs automated mechanisms to prohibit changes to the information system until designated approvals are received;

- CM-3(1)(d) -
- - CM-3(1)(e) -

employs automated mechanisms to document all changes to the information system;

- CM-3(1)(e) -
- - CM-3(1)(f) - - CM-3(1)(f)[1] -

defines personnel to be notified when approved changes to the information system are completed; and

-
- - CM-3(1)(f)[2] -

employs automated mechanisms to notify organization-defined personnel when approved changes to the information system are completed.

-
- CM-3(1)(f) -
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing information system configuration change control

-

configuration management plan

-

information system design documentation

-

information system architecture and configuration documentation

-

automated configuration control mechanisms

-

information system configuration settings and associated documentation

-

change control records

-

information system audit records

-

change approval requests

-

change approvals

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with configuration change control responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Organizational processes for configuration change control

-

automated mechanisms implementing configuration change control activities

-
-
-
- - Test / Validate / Document Changes - CM-3(2) - -

The organization tests, validates, and documents changes to the information system before implementing the changes on the operational system.

-
- -

Changes to information systems include modifications to hardware, software, or firmware components and configuration settings defined in CM-6. Organizations ensure that testing does not interfere with information system operations. Individuals/groups conducting tests understand organizational security policies and procedures, information system security policies and procedures, and the specific health, safety, and environmental risks associated with particular facilities/processes. Operational systems may need to be taken off-line, or replicated to the extent feasible, before testing can be conducted. If information systems must be taken off-line for testing, the tests are scheduled to occur during planned system outages whenever possible. If testing cannot be conducted on operational systems, organizations employ compensating controls (e.g., testing on replicated systems).

-
- -

Determine if the organization, before implementing changes on the operational system:

- - CM-3(2)[1] -

tests changes to the information system;

-
- - CM-3(2)[2] -

validates changes to the information system; and

-
- - CM-3(2)[3] -

documents changes to the information system.

-
-
- - EXAMINE - -

Configuration management policy

-

configuration management plan

-

procedures addressing information system configuration change control

-

information system design documentation

-

information system architecture and configuration documentation

-

information system configuration settings and associated documentation

-

test records

-

validation records

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with configuration change control responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for configuration change control

-

automated mechanisms supporting and/or implementing testing, validating, and documenting information system changes

-
-
-
- - Automated Change Implementation - CM-3(3) - -

The organization employs automated mechanisms to implement changes to the current information system baseline and deploys the updated baseline across the installed base.

-
- -

Determine if the organization:

- - CM-3(3)[1] -

employs automated mechanisms to implement changes to the current information system baseline; and

-
- - CM-3(3)[2] -

deploys the updated baseline across the installed base.

-
-
- - EXAMINE - -

Configuration management policy

-

configuration management plan

-

procedures addressing information system configuration change control

-

information system design documentation

-

information system architecture and configuration documentation

-

automated configuration control mechanisms

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with configuration change control responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Organizational processes for configuration change control

-

automated mechanisms implementing changes to current information system baseline

-
-
-
- - Security Representative - - - - CM-3(4) - -

The organization requires an information security representative to be a member of the .

-
- -

Information security representatives can include, for example, senior agency information security officers, information system security officers, or information system security managers. Representation by personnel with information security expertise is important because changes to information system configurations can have unintended side effects, some of which may be security-relevant. Detecting such changes early in the process can help avoid unintended, negative consequences that could ultimately affect the security state of organizational information systems. The configuration change control element in this control enhancement reflects the change control elements defined by organizations in CM-3.

-
- -

Determine if the organization:

- - CM-3(4)[1] -

specifies the configuration change control elements (as defined in CM-3g) of which an information security representative is to be a member; and

-
- - CM-3(4)[2] -

requires an information security representative to be a member of the specified configuration control element.

-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing information system configuration change control

-

configuration management plan

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with configuration change control responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for configuration change control

-
-
-
- - Automated Security Response - - - - CM-3(5) - -

The information system implements automatically if baseline configurations are changed in an unauthorized manner.

-
- -

Security responses include, for example, halting information system processing, halting selected system functions, or issuing alerts/notifications to organizational personnel when there is an unauthorized modification of a configuration item.

-
- -

Determine if:

- - CM-3(5)[1] -

the organization defines security responses to be implemented automatically if baseline configurations are changed in an unauthorized manner; and

-
- - CM-3(5)[2] -

the information system implements organization-defined security responses automatically if baseline configurations are changed in an unauthorized manner.

-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing information system configuration change control

-

configuration management plan

-

security plan

-

information system design documentation

-

information system architecture and configuration documentation

-

information system configuration settings and associated documentation

-

alerts/notifications of unauthorized baseline configuration changes

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with configuration change control responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Organizational processes for configuration change control

-

automated mechanisms implementing security responses to changes to the baseline configurations

-
-
-
- - Cryptography Management - - - - CM-3(6) - -

The organization ensures that cryptographic mechanisms used to provide are under configuration management.

-
- -

Regardless of the cryptographic means employed (e.g., public key, private key, shared secrets), organizations ensure that there are processes and procedures in place to effectively manage those means. For example, if devices use certificates as a basis for identification and authentication, there needs to be a process in place to address the expiration of those certificates.

- SC-13 -
- -

Determine if the organization:

- - CM-3(6)[1] -

defines security safeguards provided by cryptographic mechanisms that are to be under configuration management; and

-
- - CM-3(6)[2] -

ensures that cryptographic mechanisms used to provide organization-defined security safeguards are under configuration management.

-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing information system configuration change control

-

configuration management plan

-

security plan

-

information system design documentation

-

information system architecture and configuration documentation

-

information system configuration settings and associated documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with configuration change control responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for configuration change control

-

cryptographic mechanisms implementing organizational security safeguards

-
-
-
- - NIST Special Publication 800-128 - -
- - Security Impact Analysis - CM-4 - -

The organization analyzes changes to the information system to determine potential security impacts prior to change implementation.

-
- -

Organizational personnel with information security responsibilities (e.g., Information System Administrators, Information System Security Officers, Information System Security Managers, and Information System Security Engineers) conduct security impact analyses. Individuals conducting security impact analyses possess the necessary skills/technical expertise to analyze the changes to information systems and the associated security ramifications. Security impact analysis may include, for example, reviewing security plans to understand security control requirements and reviewing system design documentation to understand control implementation and how specific changes might affect the controls. Security impact analyses may also include assessments of risk to better understand the impact of the changes and to determine if additional security controls are required. Security impact analyses are scaled in accordance with the security categories of the information systems.

- CA-2 - CA-7 - CM-3 - CM-9 - SA-4 - SA-5 - SA-10 - SI-2 -
- -

Determine if the organization analyzes changes to the information system to determine potential security impacts prior to change implementation.

-
- - EXAMINE - -

Configuration management policy

-

procedures addressing security impact analysis for changes to the information system

-

configuration management plan

-

security impact analysis documentation

-

analysis tools and associated outputs

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for conducting security impact analysis

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for security impact analysis

-
-
- - Separate Test Environments - CM-4(1) - -

The organization analyzes changes to the information system in a separate test environment before implementation in an operational environment, looking for security impacts due to flaws, weaknesses, incompatibility, or intentional malice.

-
- -

Separate test environment in this context means an environment that is physically or logically isolated and distinct from the operational environment. The separation is sufficient to ensure that activities in the test environment do not impact activities in the operational environment, and information in the operational environment is not inadvertently transmitted to the test environment. Separate environments can be achieved by physical or logical means. If physically separate test environments are not used, organizations determine the strength of mechanism required when implementing logical separation (e.g., separation achieved through virtual machines).

- SA-11 - SC-3 - SC-7 -
- -

Determine if the organization:

- - CM-4(1)[1] -

analyzes changes to the information system in a separate test environment before implementation in an operational environment;

-
- - CM-4(1)[2] -

when analyzing changes to the information system in a separate test environment, looks for security impacts due to:

- - CM-4(1)[2][a] -

flaws;

-
- - CM-4(1)[2][b] -

weaknesses;

-
- - CM-4(1)[2][c] -

incompatibility; and

-
- - CM-4(1)[2][d] -

intentional malice.

-
-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing security impact analysis for changes to the information system

-

configuration management plan

-

security impact analysis documentation

-

analysis tools and associated outputs information system design documentation

-

information system architecture and configuration documentation

-

change control records

-

information system audit records

-

documentation evidence of separate test and operational environments

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for conducting security impact analysis

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for security impact analysis

-

automated mechanisms supporting and/or implementing security impact analysis of changes

-
-
-
- - Verification of Security Functions - CM-4(2) - -

The organization, after the information system is changed, checks the security functions to verify that the functions are implemented correctly, operating as intended, and producing the desired outcome with regard to meeting the security requirements for the system.

-
- -

Implementation is this context refers to installing changed code in the operational information system.

- SA-11 -
- -

Determine if the organization, after the information system is changed, checks the security functions to verify that the functions are:

- - CM-4(2)[1] -

implemented correctly;

-
- - CM-4(2)[2] -

operating as intended; and

-
- - CM-4(2)[3] -

producing the desired outcome with regard to meeting the security requirements for the system.

-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing security impact analysis for changes to the information system

-

configuration management plan

-

security impact analysis documentation

-

analysis tools and associated outputs

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for conducting security impact analysis

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for security impact analysis

-

automated mechanisms supporting and/or implementing verification of security functions

-
-
-
- - NIST Special Publication 800-128 - -
- - Access Restrictions for Change - CM-5 - -

The organization defines, documents, approves, and enforces physical and logical access restrictions associated with changes to the information system.

-
- -

Any changes to the hardware, software, and/or firmware components of information systems can potentially have significant effects on the overall security of the systems. Therefore, organizations permit only qualified and authorized individuals to access information systems for purposes of initiating changes, including upgrades and modifications. Organizations maintain records of access to ensure that configuration change control is implemented and to support after-the-fact actions should organizations discover any unauthorized changes. Access restrictions for change also include software libraries. Access restrictions include, for example, physical and logical access controls (see AC-3 and PE-3), workflow automation, media libraries, abstract layers (e.g., changes implemented into third-party interfaces rather than directly into information systems), and change windows (e.g., changes occur only during specified times, making unauthorized changes easy to discover).

- AC-3 - AC-6 - PE-3 -
- -

Determine if the organization:

- - CM-5[1] -

defines physical access restrictions associated with changes to the information system;

-
- - CM-5[2] -

documents physical access restrictions associated with changes to the information system;

-
- - CM-5[3] -

approves physical access restrictions associated with changes to the information system;

-
- - CM-5[4] -

enforces physical access restrictions associated with changes to the information system;

-
- - CM-5[5] -

defines logical access restrictions associated with changes to the information system;

-
- - CM-5[6] -

documents logical access restrictions associated with changes to the information system;

-
- - CM-5[7] -

approves logical access restrictions associated with changes to the information system; and

-
- - CM-5[8] -

enforces logical access restrictions associated with changes to the information system.

-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing access restrictions for changes to the information system

-

configuration management plan

-

information system design documentation

-

information system architecture and configuration documentation

-

information system configuration settings and associated documentation

-

logical access approvals

-

physical access approvals

-

access credentials

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with logical access control responsibilities

-

organizational personnel with physical access control responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for managing access restrictions to change

-

automated mechanisms supporting/implementing/enforcing access restrictions associated with changes to the information system

-
-
- - Automated Access Enforcement / Auditing - CM-5(1) - -

The information system enforces access restrictions and supports auditing of the enforcement actions.

-
- - AU-2 - AU-12 - AU-6 - CM-3 - CM-6 - - -

Determine if the information system:

- - CM-5(1)[1] -

enforces access restrictions for change; and

-
- - CM-5(1)[2] -

supports auditing of the enforcement actions.

-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing access restrictions for changes to the information system

-

information system design documentation

-

information system architecture and configuration documentation

-

information system configuration settings and associated documentation

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Organizational processes for managing access restrictions to change

-

automated mechanisms implementing enforcement of access restrictions for changes to the information system

-

automated mechanisms supporting auditing of enforcement actions

-
-
-
- - Review System Changes - - - - - - - CM-5(2) - -

The organization reviews information system changes and to determine whether unauthorized changes have occurred.

-
- -

Indications that warrant review of information system changes and the specific circumstances justifying such reviews may be obtained from activities carried out by organizations during the configuration change process.

- AU-6 - AU-7 - CM-3 - CM-5 - PE-6 - PE-8 -
- -

Determine if the organization, in an effort to ascertain whether unauthorized changes have occurred:

- - CM-5(2)[1] -

defines the frequency to review information system changes;

-
- - CM-5(2)[2] -

defines circumstances that warrant review of information system changes;

-
- - CM-5(2)[3] -

reviews information system changes with the organization-defined frequency; and

-
- - CM-5(2)[4] -

reviews information system changes with the organization-defined circumstances.

-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing access restrictions for changes to the information system

-

configuration management plan

-

security plan

-

reviews of information system changes

-

audit and review reports

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for managing access restrictions to change

-

automated mechanisms supporting/implementing information system reviews to determine whether unauthorized changes have occurred

-
-
-
- - Signed Components - - - - CM-5(3) - -

The information system prevents the installation of without verification that the component has been digitally signed using a certificate that is recognized and approved by the organization.

-
- -

Software and firmware components prevented from installation unless signed with recognized and approved certificates include, for example, software and firmware version updates, patches, service packs, device drivers, and basic input output system (BIOS) updates. Organizations can identify applicable software and firmware components by type, by specific items, or a combination of both. Digital signatures and organizational verification of such signatures, is a method of code authentication.

- CM-7 - SC-13 - SI-7 -
- -

Determine if:

- - CM-5(3)[1] -

the organization defines software and firmware components that the information system will prevent from being installed without verification that such components have been digitally signed using a certificate that is recognized and approved by the organization; and

-
- - CM-5(3)[2] -

the information system prevents the installation of organization-defined software and firmware components without verification that such components have been digitally signed using a certificate that is recognized and approved by the organization.

-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing access restrictions for changes to the information system

-

configuration management plan

-

security plan

-

list of software and firmware components to be prohibited from installation without a recognized and approved certificate

-

information system design documentation

-

information system architecture and configuration documentation

-

information system configuration settings and associated documentation

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Organizational processes for managing access restrictions to change

-

automated mechanisms preventing installation of software and firmware components not signed with an organization-recognized and approved certificate

-
-
-
- - Dual Authorization - - - - CM-5(4) - -

The organization enforces dual authorization for implementing changes to .

-
- -

Organizations employ dual authorization to ensure that any changes to selected information system components and information cannot occur unless two qualified individuals implement such changes. The two individuals possess sufficient skills/expertise to determine if the proposed changes are correct implementations of approved changes. Dual authorization may also be known as two-person control.

- AC-5 - CM-3 -
- -

Determine if the organization:

- - CM-5(4)[1] -

defines information system components and system-level information requiring dual authorization to be enforced when implementing changes; and

-
- - CM-5(4)[2] -

enforces dual authorization for implementing changes to organization-defined information system components and system-level information.

-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing access restrictions for changes to the information system

-

configuration management plan

-

security plan

-

information system design documentation

-

information system architecture and configuration documentation

-

information system configuration settings and associated documentation

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with dual authorization enforcement responsibilities for implementing information system changes

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for managing access restrictions to change

-

automated mechanisms implementing dual authorization enforcement

-
-
-
- - Limit Production / Operational Privileges - - - - CM-5(5) - -

The organization:

- - (a) -

Limits privileges to change information system components and system-related information within a production or operational environment; and

-
- - (b) -

Reviews and reevaluates privileges .

-
-
- -

In many organizations, information systems support multiple core missions/business functions. Limiting privileges to change information system components with respect to operational systems is necessary because changes to a particular information system component may have far-reaching effects on mission/business processes supported by the system where the component resides. The complex, many-to-many relationships between systems and mission/business processes are in some cases, unknown to developers.

- AC-2 -
- -

Determine if the organization:

- - CM-5(5)(a) -

limits privileges to change information system components and system-related information within a production or operational environment;

- CM-5(5)(a) -
- - CM-5(5)(b) - - CM-5(5)(b)[1] -

defines the frequency to review and reevaluate privileges; and

-
- - CM-5(5)(b)[2] -

reviews and reevaluates privileges with the organization-defined frequency.

-
- CM-5(5)(b) -
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing access restrictions for changes to the information system

-

configuration management plan

-

security plan

-

information system design documentation

-

information system architecture and configuration documentation

-

information system configuration settings and associated documentation

-

user privilege reviews

-

user privilege recertifications

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for managing access restrictions to change

-

automated mechanisms supporting and/or implementing access restrictions for change

-
-
-
- - Limit Library Privileges - CM-5(6) - -

The organization limits privileges to change software resident within software libraries.

-
- -

Software libraries include privileged programs.

- AC-2 -
- -

Determine if the organization limits privileges to change software resident within software libraries.

-
- - EXAMINE - -

Configuration management policy

-

procedures addressing access restrictions for changes to the information system

-

configuration management plan

-

information system design documentation

-

information system architecture and configuration documentation

-

information system configuration settings and associated documentation

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for managing access restrictions to change

-

automated mechanisms supporting and/or implementing access restrictions for change

-
-
-
- - Automatic Implementation of Security Safeguards - CM-5(7) - Withdrawn - SI-7 - -
- - Configuration Settings - - - - - - - - - - CM-6 - -

The organization:

- - a. -

Establishes and documents configuration settings for information technology products employed within the information system using that reflect the most restrictive mode consistent with operational requirements;

-
- - b. -

Implements the configuration settings;

-
- - c. -

Identifies, documents, and approves any deviations from established configuration settings for based on ; and

-
- - d. -

Monitors and controls changes to the configuration settings in accordance with organizational policies and procedures.

-
-
- -

Configuration settings are the set of parameters that can be changed in hardware, software, or firmware components of the information system that affect the security posture and/or functionality of the system. Information technology products for which security-related configuration settings can be defined include, for example, mainframe computers, servers (e.g., database, electronic mail, authentication, web, proxy, file, domain name), workstations, input/output devices (e.g., scanners, copiers, and printers), network components (e.g., firewalls, routers, gateways, voice and data switches, wireless access points, network appliances, sensors), operating systems, middleware, and applications. Security-related parameters are those parameters impacting the security state of information systems including the parameters required to satisfy other security control requirements. Security-related parameters include, for example: (i) registry settings; (ii) account, file, directory permission settings; and (iii) settings for functions, ports, protocols, services, and remote connections. Organizations establish organization-wide configuration settings and subsequently derive specific settings for information systems. The established settings become part of the systems configuration baseline. -Common secure configurations (also referred to as security configuration checklists, lockdown and hardening guides, security reference guides, security technical implementation guides) provide recognized, standardized, and established benchmarks that stipulate secure configuration settings for specific information technology platforms/products and instructions for configuring those information system components to meet operational requirements. Common secure configurations can be developed by a variety of organizations including, for example, information technology product developers, manufacturers, vendors, consortia, academia, industry, federal agencies, and other organizations in the public and private sectors. Common secure configurations include the United States Government Configuration Baseline (USGCB) which affects the implementation of CM-6 and other controls such as AC-19 and CM-7. The Security Content Automation Protocol (SCAP) and the defined standards within the protocol (e.g., Common Configuration Enumeration) provide an effective method to uniquely identify, track, and control configuration settings. OMB establishes federal policy on configuration requirements for federal information systems.

- AC-19 - CM-2 - CM-3 - CM-7 - SI-4 -
- -

Determine if the organization:

- - CM-6(a) - - CM-6(a)[1] -

defines security configuration checklists to be used to establish and document configuration settings for the information technology products employed;

-
- - CM-6(a)[2] -

ensures the defined security configuration checklists reflect the most restrictive mode consistent with operational requirements;

-
- - CM-6(a)[3] -

establishes and documents configuration settings for information technology products employed within the information system using organization-defined security configuration checklists;

-
-
- - CM-6(b) -

implements the configuration settings established/documented in CM-6(a);;

-
- - CM-6(c) - - CM-6(c)[1] -

defines information system components for which any deviations from established configuration settings must be:

- - CM-6(c)[1][a] -

identified;

-
- - CM-6(c)[1][b] -

documented;

-
- - CM-6(c)[1][c] -

approved;

-
-
- - CM-6(c)[2] -

defines operational requirements to support:

- - CM-6(c)[2][a] -

the identification of any deviations from established configuration settings;

-
- - CM-6(c)[2][b] -

the documentation of any deviations from established configuration settings;

-
- - CM-6(c)[2][c] -

the approval of any deviations from established configuration settings;

-
-
- - CM-6(c)[3] -

identifies any deviations from established configuration settings for organization-defined information system components based on organizational-defined operational requirements;

-
- - CM-6(c)[4] -

documents any deviations from established configuration settings for organization-defined information system components based on organizational-defined operational requirements;

-
- - CM-6(c)[5] -

approves any deviations from established configuration settings for organization-defined information system components based on organizational-defined operational requirements;

-
-
- - CM-6(d) - - CM-6(d)[1] -

monitors changes to the configuration settings in accordance with organizational policies and procedures; and

-
- - CM-6(d)[2] -

controls changes to the configuration settings in accordance with organizational policies and procedures.

-
-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing configuration settings for the information system

-

configuration management plan

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

security configuration checklists

-

evidence supporting approved deviations from established configuration settings

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security configuration management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for managing configuration settings

-

automated mechanisms that implement, monitor, and/or control information system configuration settings

-

automated mechanisms that identify and/or document deviations from established configuration settings

-
-
- - Automated Central Management / Application / Verification - - - - CM-6(1) - -

The organization employs automated mechanisms to centrally manage, apply, and verify configuration settings for .

-
- - CA-7 - CM-4 - - -

Determine if the organization:

- - CM-6(1)[1] -

defines information system components for which automated mechanisms are to be employed to:

- - CM-6(1)[1][a] -

centrally manage configuration settings of such components;

-
- - CM-6(1)[1][b] -

apply configuration settings of such components;

-
- - CM-6(1)[1][c] -

verify configuration settings of such components;

-
-
- - CM-6(1)[2] -

employs automated mechanisms to:

- - CM-6(1)[2][a] -

centrally manage configuration settings for organization-defined information system components;

-
- - CM-6(1)[2][b] -

apply configuration settings for organization-defined information system components; and

-
- - CM-6(1)[2][c] -

verify configuration settings for organization-defined information system components.

-
-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing configuration settings for the information system

-

configuration management plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

security configuration checklists

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security configuration management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Organizational processes for managing configuration settings

-

automated mechanisms implemented to centrally manage, apply, and verify information system configuration settings

-
-
-
- - Respond to Unauthorized Changes - - - - - - - CM-6(2) - -

The organization employs to respond to unauthorized changes to .

-
- -

Responses to unauthorized changes to configuration settings can include, for example, alerting designated organizational personnel, restoring established configuration settings, or in extreme cases, halting affected information system processing.

- IR-4 - SI-7 -
- -

Determine if the organization:

- - CM-6(2)[1] -

defines configuration settings that, if modified by unauthorized changes, result in organizational security safeguards being employed to respond to such changes;

-
- - CM-6(2)[2] -

defines security safeguards to be employed to respond to unauthorized changes to organization-defined configuration settings; and

-
- - CM-6(2)[3] -

employs organization-defined security safeguards to respond to unauthorized changes to organization-defined configuration settings.

-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing configuration settings for the information system

-

configuration management plan

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

alerts/notifications of unauthorized changes to information system configuration settings

-

documented responses to unauthorized changes to information system configuration settings

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security configuration management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational process for responding to unauthorized changes to information system configuration settings

-

automated mechanisms supporting and/or implementing security safeguards for response to unauthorized changes

-
-
-
- - Unauthorized Change Detection - CM-6(3) - Withdrawn - SI-7 - - - Conformance Demonstration - CM-6(4) - Withdrawn - CM-4 - - - OMB Memorandum 07-11 - - OMB Memorandum 07-18 - - OMB Memorandum 08-22 - - NIST Special Publication 800-70 - - NIST Special Publication 800-128 - - http://nvd.nist.gov - - http://checklists.nist.gov - - http://www.nsa.gov - -
- - Least Functionality - - - - CM-7 - -

The organization:

- - a. -

Configures the information system to provide only essential capabilities; and

-
- - b. -

Prohibits or restricts the use of the following functions, ports, protocols, and/or services: .

-
-
- -

Information systems can provide a wide variety of functions and services. Some of the functions and services, provided by default, may not be necessary to support essential organizational operations (e.g., key missions, functions). Additionally, it is sometimes convenient to provide multiple services from single information system components, but doing so increases risk over limiting the services provided by any one component. Where feasible, organizations limit component functionality to a single function per device (e.g., email servers or web servers, but not both). Organizations review functions and services provided by information systems or individual components of information systems, to determine which functions and services are candidates for elimination (e.g., Voice Over Internet Protocol, Instant Messaging, auto-execute, and file sharing). Organizations consider disabling unused or unnecessary physical and logical ports/protocols (e.g., Universal Serial Bus, File Transfer Protocol, and Hyper Text Transfer Protocol) on information systems to prevent unauthorized connection of devices, unauthorized transfer of information, or unauthorized tunneling. Organizations can utilize network scanning tools, intrusion detection and prevention systems, and end-point protections such as firewalls and host-based intrusion detection systems to identify and prevent the use of prohibited functions, ports, protocols, and services.

- AC-6 - CM-2 - RA-5 - SA-5 - SC-7 -
- -

Determine if the organization:

- - CM-7(a) -

configures the information system to provide only essential capabilities;

-
- - CM-7(b) - - CM-7(b)[1] -

defines prohibited or restricted:

- - CM-7(b)[1][a] -

functions;

-
- - CM-7(b)[1][b] -

ports;

-
- - CM-7(b)[1][c] -

protocols; and/or

-
- - CM-7(b)[1][d] -

services;

-
-
- - CM-7(b)[2] -

prohibits or restricts the use of organization-defined:

- - CM-7(b)[2][a] -

functions;

-
- - CM-7(b)[2][b] -

ports;

-
- - CM-7(b)[2][c] -

protocols; and/or

-
- - CM-7(b)[2][d] -

services.

-
-
-
-
- - EXAMINE - -

Configuration management policy

-

configuration management plan

-

procedures addressing least functionality in the information system

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

security configuration checklists

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security configuration management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes prohibiting or restricting functions, ports, protocols, and/or services

-

automated mechanisms implementing restrictions or prohibition of functions, ports, protocols, and/or services

-
-
- - Periodic Review - - - - - - - CM-7(1) - -

The organization:

- - (a) -

Reviews the information system to identify unnecessary and/or nonsecure functions, ports, protocols, and services; and

-
- - (b) -

Disables .

-
-
- -

The organization can either make a determination of the relative security of the function, port, protocol, and/or service or base the security decision on the assessment of other entities. Bluetooth, FTP, and peer-to-peer networking are examples of less than secure protocols.

- AC-18 - CM-7 - IA-2 -
- -

Determine if the organization:

- - CM-7(1)(a) - - CM-7(1)(a)[1] -

defines the frequency to review the information system to identify unnecessary and/or nonsecure:

- - CM-7(1)(a)[1][a] -

functions;

-
- - CM-7(1)(a)[1][b] -

ports;

-
- - CM-7(1)(a)[1][c] -

protocols; and/or

-
- - CM-7(1)(a)[1][d] -

services;

-
-
- - CM-7(1)(a)[2] -

reviews the information system with the organization-defined frequency to identify unnecessary and/or nonsecure:

- - CM-7(1)(a)[2][a] -

functions;

-
- - CM-7(1)(a)[2][b] -

ports;

-
- - CM-7(1)(a)[2][c] -

protocols; and/or

-
- - CM-7(1)(a)[2][d] -

services;

-
-
- CM-7(1)(a) -
- - CM-7(1)(b) - - CM-7(1)(b)[1] -

defines, within the information system, unnecessary and/or nonsecure:

- - CM-7(1)(b)[1][a] -

functions;

-
- - CM-7(1)(b)[1][b] -

ports;

-
- - CM-7(1)(b)[1][c] -

protocols; and/or

-
- - CM-7(1)(b)[1][d] -

services;

-
-
- - CM-7(1)(b)[2] -

disables organization-defined unnecessary and/or nonsecure:

- - CM-7(1)(b)[2][a] -

functions;

-
- - CM-7(1)(b)[2][b] -

ports;

-
- - CM-7(1)(b)[2][c] -

protocols; and/or

-
- - CM-7(1)(b)[2][d] -

services.

-
-
- CM-7(1)(b) -
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing least functionality in the information system

-

configuration management plan

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

security configuration checklists

-

documented reviews of functions, ports, protocols, and/or services

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for reviewing functions, ports, protocols, and services on the information system

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for reviewing/disabling nonsecure functions, ports, protocols, and/or services

-

automated mechanisms implementing review and disabling of nonsecure functions, ports, protocols, and/or services

-
-
-
- - Prevent Program Execution - - - - - - - CM-7(2) - -

The information system prevents program execution in accordance with .

-
- - CM-8 - PM-5 - - -

Determine if:

- - CM-7(2)[1] -

the organization defines policies regarding software program usage and restrictions;

-
- - CM-7(2)[2] -

the information system prevents program execution in accordance with one or more of the following:

- - CM-7(2)[2][a] -

organization-defined policies regarding program usage and restrictions; and/or

-
- - CM-7(2)[2][b] -

rules authorizing the terms and conditions of software program usage.

-
-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing least functionality in the information system

-

configuration management plan

-

security plan

-

information system design documentation

-

specifications for preventing software program execution

-

information system configuration settings and associated documentation

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Organizational processes preventing program execution on the information system

-

organizational processes for software program usage and restrictions

-

automated mechanisms preventing program execution on the information system

-

automated mechanisms supporting and/or implementing software program usage and restrictions

-
-
-
- - Registration Compliance - - - - CM-7(3) - -

The organization ensures compliance with .

-
- -

Organizations use the registration process to manage, track, and provide oversight for information systems and implemented functions, ports, protocols, and services.

-
- -

Determine if the organization:

- - CM-7(3)[1] -

defines registration requirements for:

- - CM-7(3)[1][a] -

functions;

-
- - CM-7(3)[1][b] -

ports;

-
- - CM-7(3)[1][c] -

protocols; and/or

-
- - CM-7(3)[1][d] -

services;

-
-
- - CM-7(3)[2] -

ensures compliance with organization-defined registration requirements for:

- - CM-7(3)[2][a] -

functions;

-
- - CM-7(3)[2][b] -

ports;

-
- - CM-7(3)[2][c] -

protocols; and/or

-
- - CM-7(3)[2][d] -

services.

-
-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing least functionality in the information system

-

configuration management plan

-

security plan

-

information system configuration settings and associated documentation

-

audit and compliance reviews

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes ensuring compliance with registration requirements for functions, ports, protocols, and/or services

-

automated mechanisms implementing compliance with registration requirements for functions, ports, protocols, and/or services

-
-
-
- - Unauthorized Software / Blacklisting - - - - - - - CM-7(4) - -

The organization:

- - (a) -

Identifies ;

-
- - (b) -

Employs an allow-all, deny-by-exception policy to prohibit the execution of unauthorized software programs on the information system; and

-
- - (c) -

Reviews and updates the list of unauthorized software programs .

-
-
- -

The process used to identify software programs that are not authorized to execute on organizational information systems is commonly referred to as blacklisting. Organizations can implement CM-7 (5) instead of this control enhancement if whitelisting (the stronger of the two policies) is the preferred approach for restricting software program execution.

- CM-6 - CM-8 - PM-5 -
- -

Determine if the organization:

- - CM-7(4)(a) -

Identifies/defines software programs not authorized to execute on the information system;

- CM-7(4)(a) -
- - CM-7(4)(b) -

employs an allow-all, deny-by-exception policy to prohibit the execution of unauthorized software programs on the information system;

- CM-7(4)(b) -
- - CM-7(4)(c) - - CM-7(4)(c)[1] -

defines the frequency to review and update the list of unauthorized software programs on the information system; and

-
- - CM-7(4)(c)[2] -

reviews and updates the list of unauthorized software programs with the organization-defined frequency.

-
- CM-7(4)(c) -
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing least functionality in the information system

-

configuration management plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of software programs not authorized to execute on the information system

-

security configuration checklists

-

review and update records associated with list of unauthorized software programs

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for identifying software not authorized to execute on the information system

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational process for identifying, reviewing, and updating programs not authorized to execute on the information system

-

organizational process for implementing blacklisting

-

automated mechanisms supporting and/or implementing blacklisting

-
-
-
- - Authorized Software / Whitelisting - - - - - - - CM-7(5) - -

The organization:

- - (a) -

Identifies ;

-
- - (b) -

Employs a deny-all, permit-by-exception policy to allow the execution of authorized software programs on the information system; and

-
- - (c) -

Reviews and updates the list of authorized software programs .

-
-
- -

The process used to identify software programs that are authorized to execute on organizational information systems is commonly referred to as whitelisting. In addition to whitelisting, organizations consider verifying the integrity of white-listed software programs using, for example, cryptographic checksums, digital signatures, or hash functions. Verification of white-listed software can occur either prior to execution or at system startup.

- CM-2 - CM-6 - CM-8 - PM-5 - SA-10 - SC-34 - SI-7 -
- -

Determine if the organization:

- - CM-7(5)(a) -

Identifies/defines software programs authorized to execute on the information system;

- CM-7(5)(a) -
- - CM-7(5)(b) -

employs a deny-all, permit-by-exception policy to allow the execution of authorized software programs on the information system;

- CM-7(5)(b) -
- - CM-7(5)(c) - - CM-7(5)(c)[1] -

defines the frequency to review and update the list of authorized software programs on the information system; and

-
- - CM-7(5)(c)[2] -

reviews and updates the list of authorized software programs with the organization-defined frequency.

-
- CM-7(5)(c) -
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing least functionality in the information system

-

configuration management plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of software programs authorized to execute on the information system

-

security configuration checklists

-

review and update records associated with list of authorized software programs

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for identifying software authorized to execute on the information system

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational process for identifying, reviewing, and updating programs authorized to execute on the information system

-

organizational process for implementing whitelisting

-

automated mechanisms implementing whitelisting

-
-
-
- - DoD Instruction 8551.01 - -
- - Information System Component Inventory - - - - - - - CM-8 - -

The organization:

- - a. -

Develops and documents an inventory of information system components that:

- - 1. -

Accurately reflects the current information system;

-
- - 2. -

Includes all components within the authorization boundary of the information system;

-
- - 3. -

Is at the level of granularity deemed necessary for tracking and reporting; and

-
- - 4. -

Includes ; and

-
-
- - b. -

Reviews and updates the information system component inventory .

-
-
- -

Organizations may choose to implement centralized information system component inventories that include components from all organizational information systems. In such situations, organizations ensure that the resulting inventories include system-specific information required for proper component accountability (e.g., information system association, information system owner). Information deemed necessary for effective accountability of information system components includes, for example, hardware inventory specifications, software license information, software version numbers, component owners, and for networked components or devices, machine names and network addresses. Inventory specifications include, for example, manufacturer, device type, model, serial number, and physical location.

- CM-2 - CM-6 - PM-5 -
- -

Determine if the organization:

- - CM-8(a) - - CM-8(a)(1) -

develops and documents an inventory of information system components that accurately reflects the current information system;

-
- - CM-8(a)(2) -

develops and documents an inventory of information system components that includes all components within the authorization boundary of the information system;

-
- - CM-8(a)(3) -

develops and documents an inventory of information system components that is at the level of granularity deemed necessary for tracking and reporting;

-
- - CM-8(a)(4) - - CM-8(a)(4)[1] -

defines the information deemed necessary to achieve effective information system component accountability;

-
- - CM-8(a)(4)[2] -

develops and documents an inventory of information system components that includes organization-defined information deemed necessary to achieve effective information system component accountability;

-
-
-
- - CM-8(b) - - CM-8(b)[1] -

defines the frequency to review and update the information system component inventory; and

-
- - CM-8(b)[2] -

reviews and updates the information system component inventory with the organization-defined frequency.

-
-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing information system component inventory

-

configuration management plan

-

security plan

-

information system inventory records

-

inventory reviews and update records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for information system component inventory

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for developing and documenting an inventory of information system components

-

automated mechanisms supporting and/or implementing the information system component inventory

-
-
- - Updates During Installations / Removals - CM-8(1) - -

The organization updates the inventory of information system components as an integral part of component installations, removals, and information system updates.

-
- -

Determine if the organization updates the inventory of information system components as an integral part of:

- - CM-8(1)[1] -

component installations;

-
- - CM-8(1)[2] -

component removals; and

-
- - CM-8(1)[3] -

information system updates.

-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing information system component inventory

-

configuration management plan

-

security plan

-

information system inventory records

-

inventory reviews and update records

-

component installation records

-

component removal records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for updating the information system component inventory

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for updating inventory of information system components

-

automated mechanisms implementing updating of the information system component inventory

-
-
-
- - Automated Maintenance - CM-8(2) - -

The organization employs automated mechanisms to help maintain an up-to-date, complete, accurate, and readily available inventory of information system components.

-
- -

Organizations maintain information system inventories to the extent feasible. Virtual machines, for example, can be difficult to monitor because such machines are not visible to the network when not in use. In such cases, organizations maintain as up-to-date, complete, and accurate an inventory as is deemed reasonable. This control enhancement can be satisfied by the implementation of CM-2 (2) for organizations that choose to combine information system component inventory and baseline configuration activities.

- SI-7 -
- -

Determine if the organization employs automated mechanisms to maintain an inventory of information system components that is:

- - CM-8(2)[1] -

up-to-date;

-
- - CM-8(2)[2] -

complete;

-
- - CM-8(2)[3] -

accurate; and

-
- - CM-8(2)[4] -

readily available.

-
-
- - EXAMINE - -

Configuration management policy

-

configuration management plan

-

procedures addressing information system component inventory

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system inventory records

-

change control records

-

information system maintenance records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for managing the automated mechanisms implementing the information system component inventory

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Organizational processes for maintaining the inventory of information system components

-

automated mechanisms implementing the information system component inventory

-
-
-
- - Automated Unauthorized Component Detection - - - - - - - - - - CM-8(3) - -

The organization:

- - (a) -

Employs automated mechanisms to detect the presence of unauthorized hardware, software, and firmware components within the information system; and

-
- - (b) -

Takes the following actions when unauthorized components are detected: .

-
-
- -

This control enhancement is applied in addition to the monitoring for unauthorized remote connections and mobile devices. Monitoring for unauthorized system components may be accomplished on an ongoing basis or by the periodic scanning of systems for that purpose. Automated mechanisms can be implemented within information systems or in other separate devices. Isolation can be achieved, for example, by placing unauthorized information system components in separate domains or subnets or otherwise quarantining such components. This type of component isolation is commonly referred to as sandboxing.

- AC-17 - AC-18 - AC-19 - CA-7 - SI-3 - SI-4 - SI-7 - RA-5 -
- -

Determine if the organization:

- - CM-8(3)(a) - - CM-8(3)(a)[1] -

defines the frequency to employ automated mechanisms to detect the presence of unauthorized:

- - CM-8(3)(a)[1][a] -

hardware components within the information system;

-
- - CM-8(3)(a)[1][b] -

software components within the information system;

-
- - CM-8(3)(a)[1][c] -

firmware components within the information system;

-
-
- - CM-8(3)(a)[2] -

employs automated mechanisms with the organization-defined frequency to detect the presence of unauthorized:

- - CM-8(3)(a)[2][a] -

hardware components within the information system;

-
- - CM-8(3)(a)[2][b] -

software components within the information system;

-
- - CM-8(3)(a)[2][c] -

firmware components within the information system;

-
-
- CM-8(3)(a) -
- - CM-8(3)(b) - - CM-8(3)(b)[1] -

defines personnel or roles to be notified when unauthorized components are detected;

-
- - CM-8(3)(b)[2] -

takes one or more of the following actions when unauthorized components are detected:

- - CM-8(3)(b)[2][a] -

disables network access by such components;

-
- - CM-8(3)(b)[2][b] -

isolates the components; and/or

-
- - CM-8(3)(b)[2][c] -

notifies organization-defined personnel or roles.

-
-
- CM-8(3)(b) -
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing information system component inventory

-

configuration management plan

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system inventory records

-

alerts/notifications of unauthorized components within the information system

-

information system monitoring records

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for managing the automated mechanisms implementing unauthorized information system component detection

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Organizational processes for detection of unauthorized information system components

-

automated mechanisms implementing the detection of unauthorized information system components

-
-
-
- - Accountability Information - - - - CM-8(4) - -

The organization includes in the information system component inventory information, a means for identifying by , individuals responsible/accountable for administering those components.

-
- -

Identifying individuals who are both responsible and accountable for administering information system components helps to ensure that the assigned components are properly administered and organizations can contact those individuals if some action is required (e.g., component is determined to be the source of a breach/compromise, component needs to be recalled/replaced, or component needs to be relocated).

-
- -

Determine if the organization includes in the information system component inventory for information system components, a means for identifying the individuals responsible and accountable for administering those components by one or more of the following:

- - CM-8(4)[1] -

name;

-
- - CM-8(4)[2] -

position; and/or

-
- - CM-8(4)[3] -

role.

-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing information system component inventory

-

configuration management plan

-

security plan

-

information system inventory records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for managing the information system component inventory

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for maintaining the inventory of information system components

-

automated mechanisms implementing the information system component inventory

-
-
-
- - No Duplicate Accounting of Components - CM-8(5) - -

The organization verifies that all components within the authorization boundary of the information system are not duplicated in other information system component inventories.

-
- -

This control enhancement addresses the potential problem of duplicate accounting of information system components in large or complex interconnected systems.

-
- -

Determine if the organization verifies that all components within the authorization boundary of the information system are not duplicated in other information system inventories.

-
- - EXAMINE - -

Configuration management policy

-

procedures addressing information system component inventory

-

configuration management plan

-

security plan

-

information system inventory records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system inventory responsibilities

-

organizational personnel with responsibilities for defining information system components within the authorization boundary of the system

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for maintaining the inventory of information system components

-

automated mechanisms implementing the information system component inventory

-
-
-
- - Assessed Configurations / Approved Deviations - CM-8(6) - -

The organization includes assessed component configurations and any approved deviations to current deployed configurations in the information system component inventory.

-
- -

This control enhancement focuses on configuration settings established by organizations for information system components, the specific components that have been assessed to determine compliance with the required configuration settings, and any approved deviations from established configuration settings.

- CM-2 - CM-6 -
- -

Determine if the organization includes in the information system component inventory:

- - CM-8(6)[1] -

assessed component configurations; and

-
- - CM-8(6)[2] -

any approved deviations to current deployed configurations.

-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing information system component inventory

-

configuration management plan

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system inventory records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with inventory management and assessment responsibilities for information system components

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for maintaining the inventory of information system components

-

automated mechanisms implementing the information system component inventory

-
-
-
- - Centralized Repository - CM-8(7) - -

The organization provides a centralized repository for the inventory of information system components.

-
- -

Organizations may choose to implement centralized information system component inventories that include components from all organizational information systems. Centralized repositories of information system component inventories provide opportunities for efficiencies in accounting for organizational hardware, software, and firmware assets. Such repositories may also help organizations rapidly identify the location and responsible individuals of system components that have been compromised, breached, or are otherwise in need of mitigation actions. Organizations ensure that the resulting centralized inventories include system-specific information required for proper component accountability (e.g., information system association, information system owner).

-
- -

Determine if the organization provides a centralized repository for the inventory of information system components.

-
- - EXAMINE - -

Configuration management policy

-

procedures addressing information system component inventory

-

configuration management plan

-

information system design documentation

-

information system inventory repository

-

information system inventory records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with inventory management responsibilities for information system components

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms implementing the information system component inventory in a centralized repository

-
-
-
- - Automated Location Tracking - CM-8(8) - -

The organization employs automated mechanisms to support tracking of information system components by geographic location.

-
- -

The use of automated mechanisms to track the location of information system components can increase the accuracy of component inventories. Such capability may also help organizations rapidly identify the location and responsible individuals of system components that have been compromised, breached, or are otherwise in need of mitigation actions.

-
- -

Determine if the organization employs automated mechanisms to support tracking of information system components by geographic location.

-
- - EXAMINE - -

Configuration management policy

-

procedures addressing information system component inventory

-

configuration management plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system inventory records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with inventory management responsibilities for information system components

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing the information system component inventory

-

automated mechanisms supporting tracking of information system components by geographic location

-
-
-
- - Assignment of Components to Systems - - - - CM-8(9) - -

The organization:

- - (a) -

Assigns to an information system; and

-
- - (b) -

Receives an acknowledgement from the information system owner of this assignment.

-
-
- -

Organizations determine the criteria for or types of information system components (e.g., microprocessors, motherboards, software, programmable logic controllers, and network devices) that are subject to this control enhancement.

- SA-4 -
- -

Determine if the organization:

- - CM-8(9)(a) - - CM-8(9)(a)[1] -

defines acquired information system components to be assigned to an information system; and

-
- - CM-8(9)(a)[2] -

assigns organization-defined acquired information system components to an information system; and

-
- CM-8(9)(a) -
- - CM-8(9)(b) -

receives an acknowledgement from the information system owner of the assignment.

- CM-8(9)(b) -
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing information system component inventory

-

configuration management plan

-

security plan

-

information system design documentation

-

acknowledgements of information system component assignments

-

information system inventory records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with inventory management responsibilities for information system components

-

information system owner

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for assigning components to systems

-

organizational processes for acknowledging assignment of components to systems

-

automated mechanisms implementing assignment of acquired components to the information system

-

automated mechanisms implementing acknowledgment of assignment of acquired components to the information system

-
-
-
- - NIST Special Publication 800-128 - -
- - Configuration Management Plan - CM-9 - -

The organization develops, documents, and implements a configuration management plan for the information system that:

- - a. -

Addresses roles, responsibilities, and configuration management processes and procedures;

-
- - b. -

Establishes a process for identifying configuration items throughout the system development life cycle and for managing the configuration of the configuration items;

-
- - c. -

Defines the configuration items for the information system and places the configuration items under configuration management; and

-
- - d. -

Protects the configuration management plan from unauthorized disclosure and modification.

-
-
- -

Configuration management plans satisfy the requirements in configuration management policies while being tailored to individual information systems. Such plans define detailed processes and procedures for how configuration management is used to support system development life cycle activities at the information system level. Configuration management plans are typically developed during the development/acquisition phase of the system development life cycle. The plans describe how to move changes through change management processes, how to update configuration settings and baselines, how to maintain information system component inventories, how to control development, test, and operational environments, and how to develop, release, and update key documents. Organizations can employ templates to help ensure consistent and timely development and implementation of configuration management plans. Such templates can represent a master configuration management plan for the organization at large with subsets of the plan implemented on a system by system basis. Configuration management approval processes include designation of key management stakeholders responsible for reviewing and approving proposed changes to information systems, and personnel that conduct security impact analyses prior to the implementation of changes to the systems. Configuration items are the information system items (hardware, software, firmware, and documentation) to be configuration-managed. As information systems continue through the system development life cycle, new configuration items may be identified and some existing configuration items may no longer need to be under configuration control.

- CM-2 - CM-3 - CM-4 - CM-5 - CM-8 - SA-10 -
- -

Determine if the organization develops, documents, and implements a configuration management plan for the information system that:

- - CM-9(a) - - CM-9(a)[1] -

addresses roles;

-
- - CM-9(a)[2] -

addresses responsibilities;

-
- - CM-9(a)[3] -

addresses configuration management processes and procedures;

-
-
- - CM-9(b) -

establishes a process for:

- - CM-9(b)[1] -

identifying configuration items throughout the SDLC;

-
- - CM-9(b)[2] -

managing the configuration of the configuration items;

-
-
- - CM-9(c) - - CM-9(c)[1] -

defines the configuration items for the information system;

-
- - CM-9(c)[2] -

places the configuration items under configuration management;

-
-
- - CM-9(d) -

protects the configuration management plan from unauthorized:

- - CM-9(d)[1] -

disclosure; and

-
- - CM-9(d)[2] -

modification.

-
-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing configuration management planning

-

configuration management plan

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for developing the configuration management plan

-

organizational personnel with responsibilities for implementing and managing processes defined in the configuration management plan

-

organizational personnel with responsibilities for protecting the configuration management plan

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for developing and documenting the configuration management plan

-

organizational processes for identifying and managing configuration items

-

organizational processes for protecting the configuration management plan

-

automated mechanisms implementing the configuration management plan

-

automated mechanisms for managing configuration items

-

automated mechanisms for protecting the configuration management plan

-
-
- - Assignment of Responsibility - CM-9(1) - -

The organization assigns responsibility for developing the configuration management process to organizational personnel that are not directly involved in information system development.

-
- -

In the absence of dedicated configuration management teams assigned within organizations, system developers may be tasked to develop configuration management processes using personnel who are not directly involved in system development or integration. This separation of duties ensures that organizations establish and maintain a sufficient degree of independence between the information system development and integration processes and configuration management processes to facilitate quality control and more effective oversight.

-
- -

Determine if the organization assigns responsibility for developing the configuration management process to organizational personnel that are not directly involved in information system development.

-
- - EXAMINE - -

Configuration management policy

-

procedures addressing responsibilities for configuration management process development

-

configuration management plan

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for configuration management process development

-

organizational personnel with information security responsibilities

-
-
-
- - NIST Special Publication 800-128 - -
- - Software Usage Restrictions - CM-10 - -

The organization:

- - a. -

Uses software and associated documentation in accordance with contract agreements and copyright laws;

-
- - b. -

Tracks the use of software and associated documentation protected by quantity licenses to control copying and distribution; and

-
- - c. -

Controls and documents the use of peer-to-peer file sharing technology to ensure that this capability is not used for the unauthorized distribution, display, performance, or reproduction of copyrighted work.

-
-
- -

Software license tracking can be accomplished by manual methods (e.g., simple spreadsheets) or automated methods (e.g., specialized tracking applications) depending on organizational needs.

- AC-17 - CM-8 - SC-7 -
- -

Determine if the organization:

- - CM-10(a) -

uses software and associated documentation in accordance with contract agreements and copyright laws;

-
- - CM-10(b) -

tracks the use of software and associated documentation protected by quantity licenses to control copying and distribution; and

-
- - CM-10(c) -

controls and documents the use of peer-to-peer file sharing technology to ensure that this capability is not used for the unauthorized distribution, display, performance, or reproduction of copyrighted work.

-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing software usage restrictions

-

configuration management plan

-

security plan

-

software contract agreements and copyright laws

-

site license documentation

-

list of software usage restrictions

-

software license tracking reports

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-

organizational personnel operating, using, and/or maintaining the information system

-

organizational personnel with software license management responsibilities

-
-
- - TEST - -

Organizational process for tracking the use of software protected by quantity licenses

-

organization process for controlling/documenting the use of peer-to-peer file sharing technology

-

automated mechanisms implementing software license tracking

-

automated mechanisms implementing and controlling the use of peer-to-peer files sharing technology

-
-
- - Open Source Software - - - - CM-10(1) - -

The organization establishes the following restrictions on the use of open source software: .

-
- -

Open source software refers to software that is available in source code form. Certain software rights normally reserved for copyright holders are routinely provided under software license agreements that permit individuals to study, change, and improve the software. From a security perspective, the major advantage of open source software is that it provides organizations with the ability to examine the source code. However, there are also various licensing issues associated with open source software including, for example, the constraints on derivative use of such software.

-
- -

Determine if the organization:

- - CM-10(1)[1] -

defines restrictions on the use of open source software; and

-
- - CM-10(1)[2] -

establishes organization-defined restrictions on the use of open source software.

-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing restrictions on use of open source software

-

configuration management plan

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for establishing and enforcing restrictions on use of open source software

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational process for restricting the use of open source software

-

automated mechanisms implementing restrictions on the use of open source software

-
-
-
-
- - User-installed Software - - - - - - - - - - CM-11 - -

The organization:

- - a. -

Establishes governing the installation of software by users;

-
- - b. -

Enforces software installation policies through ; and

-
- - c. -

Monitors policy compliance at .

-
-
- -

If provided the necessary privileges, users have the ability to install software in organizational information systems. To maintain control over the types of software installed, organizations identify permitted and prohibited actions regarding software installation. Permitted software installations may include, for example, updates and security patches to existing software and downloading applications from organization-approved “app stores” Prohibited software installations may include, for example, software with unknown or suspect pedigrees or software that organizations consider potentially malicious. The policies organizations select governing user-installed software may be organization-developed or provided by some external entity. Policy enforcement methods include procedural methods (e.g., periodic examination of user accounts), automated methods (e.g., configuration settings implemented on organizational information systems), or both.

- AC-3 - CM-2 - CM-3 - CM-5 - CM-6 - CM-7 - PL-4 -
- -

Determine if the organization:

- - CM-11(a) - - CM-11(a)[1] -

defines policies to govern the installation of software by users;

-
- - CM-11(a)[2] -

establishes organization-defined policies governing the installation of software by users;

-
-
- - CM-11(b) - - CM-11(b)[1] -

defines methods to enforce software installation policies;

-
- - CM-11(b)[2] -

enforces software installation policies through organization-defined methods;

-
-
- - CM-11(c) - - CM-11(c)[1] -

defines frequency to monitor policy compliance; and

-
- - CM-11(c)[2] -

monitors policy compliance at organization-defined frequency.

-
-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing user installed software

-

configuration management plan

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of rules governing user installed software

-

information system monitoring records

-

information system audit records

-

other relevant documents or records

-

continuous monitoring strategy

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for governing user-installed software

-

organizational personnel operating, using, and/or maintaining the information system

-

organizational personnel monitoring compliance with user-installed software policy

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes governing user-installed software on the information system

-

automated mechanisms enforcing rules/methods for governing the installation of software by users

-

automated mechanisms monitoring policy compliance

-
-
- - Alerts for Unauthorized Installations - - - - CM-11(1) - -

The information system alerts when the unauthorized installation of software is detected.

-
- - CA-7 - SI-4 - - -

Determine if:

- - CM-11(1)[1] -

the organization defines personnel or roles to be alerted when the unauthorized installation of software is detected; and

-
- - CM-11(1)[2] -

the information system alerts organization-defined personnel or roles when the unauthorized installation of software is detected.

-
-
- - EXAMINE - -

Configuration management policy

-

procedures addressing user installed software

-

configuration management plan

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for governing user-installed software

-

organizational personnel operating, using, and/or maintaining the information system

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Organizational processes governing user-installed software on the information system

-

automated mechanisms for alerting personnel/roles when unauthorized installation of software is detected

-
-
-
- - Prohibit Installation Without Privileged Status - CM-11(2) - -

The information system prohibits user installation of software without explicit privileged status.

-
- -

Privileged status can be obtained, for example, by serving in the role of system administrator.

- AC-6 -
- -

Determine if the information system prohibits user installation of software without explicit privileged status.

-
- - EXAMINE - -

Configuration management policy

-

procedures addressing user installed software

-

configuration management plan

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

alerts/notifications of unauthorized software installations

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for governing user-installed software

-

organizational personnel operating, using, and/or maintaining the information system

-
-
- - TEST - -

Organizational processes governing user-installed software on the information system

-

automated mechanisms for prohibiting installation of software without privileged status (e.g., access controls)

-
-
-
-
-
- - Contingency Planning - - Contingency Planning Policy and Procedures - - - - - - - - - - CP-1 - -

The organization:

- - a. -

Develops, documents, and disseminates to :

- - 1. -

A contingency planning policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and

-
- - 2. -

Procedures to facilitate the implementation of the contingency planning policy and associated contingency planning controls; and

-
-
- - b. -

Reviews and updates the current:

- - 1. -

Contingency planning policy ; and

-
- - 2. -

Contingency planning procedures .

-
-
-
- -

This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the CP family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures.

- PM-9 -
- -

Determine if:

- - CP-1(a) - - CP-1(a)(1) - - CP-1(a)(1)[1] -

the organization develops and documents a contingency planning policy that addresses:

- - CP-1(a)(1)[1][a] -

purpose;

-
- - CP-1(a)(1)[1][b] -

scope;

-
- - CP-1(a)(1)[1][c] -

roles;

-
- - CP-1(a)(1)[1][d] -

responsibilities;

-
- - CP-1(a)(1)[1][e] -

management commitment;

-
- - CP-1(a)(1)[1][f] -

coordination among organizational entities;

-
- - CP-1(a)(1)[1][g] -

compliance;

-
-
- - CP-1(a)(1)[2] -

the organization defines personnel or roles to whom the contingency planning policy is to be disseminated;

-
- - CP-1(a)(1)[3] -

the organization disseminates the contingency planning policy to organization-defined personnel or roles;

-
-
- - CP-1(a)(2) - - CP-1(a)(2)[1] -

the organization develops and documents procedures to facilitate the implementation of the contingency planning policy and associated contingency planning controls;

-
- - CP-1(a)(2)[2] -

the organization defines personnel or roles to whom the procedures are to be disseminated;

-
- - CP-1(a)(2)[3] -

the organization disseminates the procedures to organization-defined personnel or roles;

-
-
-
- - CP-1(b) - - CP-1(b)(1) - - CP-1(b)(1)[1] -

the organization defines the frequency to review and update the current contingency planning policy;

-
- - CP-1(b)(1)[2] -

the organization reviews and updates the current contingency planning with the organization-defined frequency;

-
-
- - CP-1(b)(2) - - CP-1(b)(2)[1] -

the organization defines the frequency to review and update the current contingency planning procedures; and

-
- - CP-1(b)(2)[2] -

the organization reviews and updates the current contingency planning procedures with the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

Contingency planning policy and procedures

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency planning responsibilities

-

organizational personnel with information security responsibilities

-
-
- - Federal Continuity Directive 1 - - NIST Special Publication 800-12 - - NIST Special Publication 800-34 - - NIST Special Publication 800-100 - -
- - Contingency Plan - - - - - - - - - - - - - CP-2 - -

The organization:

- - a. -

Develops a contingency plan for the information system that:

- - 1. -

Identifies essential missions and business functions and associated contingency requirements;

-
- - 2. -

Provides recovery objectives, restoration priorities, and metrics;

-
- - 3. -

Addresses contingency roles, responsibilities, assigned individuals with contact information;

-
- - 4. -

Addresses maintaining essential missions and business functions despite an information system disruption, compromise, or failure;

-
- - 5. -

Addresses eventual, full information system restoration without deterioration of the security safeguards originally planned and implemented; and

-
- - 6. -

Is reviewed and approved by ;

-
-
- - b. -

Distributes copies of the contingency plan to ;

-
- - c. -

Coordinates contingency planning activities with incident handling activities;

-
- - d. -

Reviews the contingency plan for the information system ;

-
- - e. -

Updates the contingency plan to address changes to the organization, information system, or environment of operation and problems encountered during contingency plan implementation, execution, or testing;

-
- - f. -

Communicates contingency plan changes to ; and

-
- - g. -

Protects the contingency plan from unauthorized disclosure and modification.

-
-
- -

Contingency planning for information systems is part of an overall organizational program for achieving continuity of operations for mission/business functions. Contingency planning addresses both information system restoration and implementation of alternative mission/business processes when systems are compromised. The effectiveness of contingency planning is maximized by considering such planning throughout the phases of the system development life cycle. Performing contingency planning on hardware, software, and firmware development can be an effective means of achieving information system resiliency. Contingency plans reflect the degree of restoration required for organizational information systems since not all systems may need to fully recover to achieve the level of continuity of operations desired. Information system recovery objectives reflect applicable laws, Executive Orders, directives, policies, standards, regulations, and guidelines. In addition to information system availability, contingency plans also address other security-related events resulting in a reduction in mission and/or business effectiveness, such as malicious attacks compromising the confidentiality or integrity of information systems. Actions addressed in contingency plans include, for example, orderly/graceful degradation, information system shutdown, fallback to a manual mode, alternate information flows, and operating in modes reserved for when systems are under attack. By closely coordinating contingency planning with incident handling activities, organizations can ensure that the necessary contingency planning activities are in place and activated in the event of a security incident.

- AC-14 - CP-6 - CP-7 - CP-8 - CP-9 - CP-10 - IR-4 - IR-8 - MP-2 - MP-4 - MP-5 - PM-8 - PM-11 -
- -

Determine if the organization:

- - CP-2(a) -

develops and documents a contingency plan for the information system that:

- - CP-2(a)(1) -

identifies essential missions and business functions and associated contingency requirements;

-
- - CP-2(a)(2) - - CP-2(a)(2)[1] -

provides recovery objectives;

-
- - CP-2(a)(2)[2] -

provides restoration priorities;

-
- - CP-2(a)(2)[3] -

provides metrics;

-
-
- - CP-2(a)(3) - - CP-2(a)(3)[1] -

addresses contingency roles;

-
- - CP-2(a)(3)[2] -

addresses contingency responsibilities;

-
- - CP-2(a)(3)[3] -

addresses assigned individuals with contact information;

-
-
- - CP-2(a)(4) -

addresses maintaining essential missions and business functions despite an information system disruption, compromise, or failure;

-
- - CP-2(a)(5) -

addresses eventual, full information system restoration without deterioration of the security safeguards originally planned and implemented;

-
- - CP-2(a)(6) - - CP-2(a)(6)[1] -

defines personnel or roles to review and approve the contingency plan for the information system;

-
- - CP-2(a)(6)[2] -

is reviewed and approved by organization-defined personnel or roles;

-
-
-
- - CP-2(b) - - CP-2(b)[1] -

defines key contingency personnel (identified by name and/or by role) and organizational elements to whom copies of the contingency plan are to be distributed;

-
- - CP-2(b)[2] -

distributes copies of the contingency plan to organization-defined key contingency personnel and organizational elements;

-
-
- - CP-2(c) -

coordinates contingency planning activities with incident handling activities;

-
- - CP-2(d) - - CP-2(d)[1] -

defines a frequency to review the contingency plan for the information system;

-
- - CP-2(d)[2] -

reviews the contingency plan with the organization-defined frequency;

-
-
- - CP-2(e) -

updates the contingency plan to address:

- - CP-2(e)[1] -

changes to the organization, information system, or environment of operation;

-
- - CP-2(e)[2] -

problems encountered during plan implementation, execution, and testing;

-
-
- - CP-2(f) - - CP-2(f)[1] -

defines key contingency personnel (identified by name and/or by role) and organizational elements to whom contingency plan changes are to be communicated;

-
- - CP-2(f)[2] -

communicates contingency plan changes to organization-defined key contingency personnel and organizational elements; and

-
-
- - CP-2(g) -

protects the contingency plan from unauthorized disclosure and modification.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing contingency operations for the information system

-

contingency plan

-

security plan

-

evidence of contingency plan reviews and updates

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency planning and plan implementation responsibilities

-

organizational personnel with incident handling responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for contingency plan development, review, update, and protection

-

automated mechanisms for developing, reviewing, updating and/or protecting the contingency plan

-
-
- - Coordinate with Related Plans - CP-2(1) - -

The organization coordinates contingency plan development with organizational elements responsible for related plans.

-
- -

Plans related to contingency plans for organizational information systems include, for example, Business Continuity Plans, Disaster Recovery Plans, Continuity of Operations Plans, Crisis Communications Plans, Critical Infrastructure Plans, Cyber Incident Response Plans, Insider Threat Implementation Plan, and Occupant Emergency Plans.

-
- -

Determine if the organization coordinates contingency plan development with organizational elements responsible for related plans.

-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing contingency operations for the information system

-

contingency plan

-

business contingency plans

-

disaster recovery plans

-

continuity of operations plans

-

crisis communications plans

-

critical infrastructure plans

-

cyber incident response plan

-

insider threat implementation plans

-

occupant emergency plans

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency planning and plan implementation responsibilities

-

organizational personnel with information security responsibilities

-

personnel with responsibility for related plans

-
-
-
- - Capacity Planning - CP-2(2) - -

The organization conducts capacity planning so that necessary capacity for information processing, telecommunications, and environmental support exists during contingency operations.

-
- -

Capacity planning is needed because different types of threats (e.g., natural disasters, targeted cyber attacks) can result in a reduction of the available processing, telecommunications, and support services originally intended to support the organizational missions/business functions. Organizations may need to anticipate degraded operations during contingency operations and factor such degradation into capacity planning.

-
- -

Determine if the organization conducts capacity planning so that necessary capacity exists during contingency operations for:

- - CP-2(2)[1] -

information processing;

-
- - CP-2(2)[2] -

telecommunications; and

-
- - CP-2(2)[3] -

environmental support.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing contingency operations for the information system

-

contingency plan

-

capacity planning documents

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency planning and plan implementation responsibilities

-

organizational personnel with information security responsibilities

-
-
-
- - Resume Essential Missions / Business Functions - - - - CP-2(3) - -

The organization plans for the resumption of essential missions and business functions within of contingency plan activation.

-
- -

Organizations may choose to carry out the contingency planning activities in this control enhancement as part of organizational business continuity planning including, for example, as part of business impact analyses. The time period for resumption of essential missions/business functions may be dependent on the severity/extent of disruptions to the information system and its supporting infrastructure.

- PE-12 -
- -

Determine if the organization:

- - CP-2(3)[1] -

defines the time period to plan for the resumption of essential missions and business functions as a result of contingency plan activation; and

-
- - CP-2(3)[2] -

plans for the resumption of essential missions and business functions within organization-defined time period of contingency plan activation.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing contingency operations for the information system

-

contingency plan

-

security plan

-

business impact assessment

-

other related plans

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency planning and plan implementation responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for resumption of missions and business functions

-
-
-
- - Resume All Missions / Business Functions - - - - CP-2(4) - -

The organization plans for the resumption of all missions and business functions within of contingency plan activation.

-
- -

Organizations may choose to carry out the contingency planning activities in this control enhancement as part of organizational business continuity planning including, for example, as part of business impact analyses. The time period for resumption of all missions/business functions may be dependent on the severity/extent of disruptions to the information system and its supporting infrastructure.

- PE-12 -
- -

Determine if the organization:

- - CP-2(4)[1] -

defines the time period to plan for the resumption of all missions and business functions as a result of contingency plan activation; and

-
- - CP-2(4)[2] -

plans for the resumption of all missions and business functions within organization-defined time period of contingency plan activation.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing contingency operations for the information system

-

contingency plan

-

security plan

-

business impact assessment

-

other related plans

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency planning and plan implementation responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for resumption of missions and business functions

-
-
-
- - Continue Essential Missions / Business Functions - CP-2(5) - -

The organization plans for the continuance of essential missions and business functions with little or no loss of operational continuity and sustains that continuity until full information system restoration at primary processing and/or storage sites.

-
- -

Organizations may choose to carry out the contingency planning activities in this control enhancement as part of organizational business continuity planning including, for example, as part of business impact analyses. Primary processing and/or storage sites defined by organizations as part of contingency planning may change depending on the circumstances associated with the contingency (e.g., backup sites may become primary sites).

- PE-12 -
- -

Determine if the organization:

- - CP-2(5)[1] -

plans for the continuance of essential missions and business functions with little or no loss of operational continuity; and

-
- - CP-2(5)[2] -

sustains that operational continuity until full information system restoration at primary processing and/or storage sites.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing contingency operations for the information system

-

contingency plan

-

business impact assessment

-

primary processing site agreements

-

primary storage site agreements

-

alternate processing site agreements

-

alternate storage site agreements

-

contingency plan test documentation

-

contingency plan test results

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency planning and plan implementation responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for continuing missions and business functions

-
-
-
- - Alternate Processing / Storage Site - CP-2(6) - -

The organization plans for the transfer of essential missions and business functions to alternate processing and/or storage sites with little or no loss of operational continuity and sustains that continuity through information system restoration to primary processing and/or storage sites.

-
- -

Organizations may choose to carry out the contingency planning activities in this control enhancement as part of organizational business continuity planning including, for example, as part of business impact analyses. Primary processing and/or storage sites defined by organizations as part of contingency planning may change depending on the circumstances associated with the contingency (e.g., backup sites may become primary sites).

- PE-12 -
- -

Determine if the organization:

- - CP-2(6)[1] -

plans for the transfer of essential missions and business functions to alternate processing and/or storage sites with little or no loss of operational continuity; and

-
- - CP-2(6)[2] -

sustains that operational continuity through information system restoration to primary processing and/or storage sites.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing contingency operations for the information system

-

contingency plan

-

business impact assessment

-

alternate processing site agreements

-

alternate storage site agreements

-

contingency plan testing documentation

-

contingency plan test results

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency planning and plan implementation responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for transfer of essential missions and business functions to alternate processing/storage sites

-
-
-
- - Coordinate with External Service Providers - CP-2(7) - -

The organization coordinates its contingency plan with the contingency plans of external service providers to ensure that contingency requirements can be satisfied.

-
- -

When the capability of an organization to successfully carry out its core missions/business functions is dependent on external service providers, developing a timely and comprehensive contingency plan may become more challenging. In this situation, organizations coordinate contingency planning activities with the external entities to ensure that the individual plans reflect the overall contingency needs of the organization.

- SA-9 -
- -

Determine if the organization coordinates its contingency plan with the contingency plans of external service provides to ensure contingency requirements can be satisfied.

-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing contingency operations for the information system

-

contingency plan

-

contingency plans of external

-

service providers

-

service level agreements

-

security plan

-

contingency plan requirements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency planning and plan implementation responsibilities

-

external service providers

-

organizational personnel with information security responsibilities

-
-
-
- - Identify Critical Assets - CP-2(8) - -

The organization identifies critical information system assets supporting essential missions and business functions.

-
- -

Organizations may choose to carry out the contingency planning activities in this control enhancement as part of organizational business continuity planning including, for example, as part of business impact analyses. Organizations identify critical information system assets so that additional safeguards and countermeasures can be employed (above and beyond those safeguards and countermeasures routinely implemented) to help ensure that organizational missions/business functions can continue to be conducted during contingency operations. In addition, the identification of critical information assets facilitates the prioritization of organizational resources. Critical information system assets include technical and operational aspects. Technical aspects include, for example, information technology services, information system components, information technology products, and mechanisms. Operational aspects include, for example, procedures (manually executed operations) and personnel (individuals operating technical safeguards and/or executing manual procedures). Organizational program protection plans can provide assistance in identifying critical assets.

- SA-14 - SA-15 -
- -

Determine if the organization identifies critical information system assets supporting essential missions and business functions.

-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing contingency operations for the information system

-

contingency plan

-

business impact assessment

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency planning and plan implementation responsibilities

-

organizational personnel with information security responsibilities

-
-
-
- - Federal Continuity Directive 1 - - NIST Special Publication 800-34 - -
- - Contingency Training - - - - - - - CP-3 - -

The organization provides contingency training to information system users consistent with assigned roles and responsibilities:

- - a. -

Within of assuming a contingency role or responsibility;

-
- - b. -

When required by information system changes; and

-
- - c. -

- thereafter.

-
-
- -

Contingency training provided by organizations is linked to the assigned roles and responsibilities of organizational personnel to ensure that the appropriate content and level of detail is included in such training. For example, regular users may only need to know when and where to report for duty during contingency operations and if normal duties are affected; system administrators may require additional training on how to set up information systems at alternate processing and storage sites; and managers/senior leaders may receive more specific training on how to conduct mission-essential functions in designated off-site locations and how to establish communications with other governmental entities for purposes of coordination on contingency-related activities. Training for contingency roles/responsibilities reflects the specific continuity requirements in the contingency plan.

- AT-2 - AT-3 - CP-2 - IR-2 -
- -

Determine if the organization:

- - CP-3(a) - - CP-3(a)[1] -

defines a time period within which contingency training is to be provided to information system users assuming a contingency role or responsibility;

-
- - CP-3(a)[2] -

provides contingency training to information system users consistent with assigned roles and responsibilities within the organization-defined time period of assuming a contingency role or responsibility;

-
-
- - CP-3(b) -

provides contingency training to information system users consistent with assigned roles and responsibilities when required by information system changes;

-
- - CP-3(c) - - CP-3(c)[1] -

defines the frequency for contingency training thereafter; and

-
- - CP-3(c)[2] -

provides contingency training to information system users consistent with assigned roles and responsibilities with the organization-defined frequency thereafter.

-
-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing contingency training

-

contingency plan

-

contingency training curriculum

-

contingency training material

-

security plan

-

contingency training records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency planning, plan implementation, and training responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for contingency training

-
-
- - Simulated Events - CP-3(1) - -

The organization incorporates simulated events into contingency training to facilitate effective response by personnel in crisis situations.

-
- -

Determine if the organization incorporates simulated events into contingency training to facilitate effective response by personnel in crisis situations.

-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing contingency training

-

contingency plan

-

contingency training curriculum

-

contingency training material

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency planning, plan implementation, and training responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for contingency training

-

automated mechanisms for simulating contingency events

-
-
-
- - Automated Training Environments - CP-3(2) - -

The organization employs automated mechanisms to provide a more thorough and realistic contingency training environment.

-
- -

Determine if the organization employs automated mechanisms to provide a more thorough and realistic contingency training environment.

-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing contingency training

-

contingency plan

-

contingency training curriculum

-

contingency training material

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency planning, plan implementation, and training responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for contingency training

-

automated mechanisms for providing contingency training environments

-
-
-
- - Federal Continuity Directive 1 - - NIST Special Publication 800-16 - - NIST Special Publication 800-50 - -
- - Contingency Plan Testing - - - - - - - CP-4 - -

The organization:

- - a. -

Tests the contingency plan for the information system using to determine the effectiveness of the plan and the organizational readiness to execute the plan;

-
- - b. -

Reviews the contingency plan test results; and

-
- - c. -

Initiates corrective actions, if needed.

-
-
- -

Methods for testing contingency plans to determine the effectiveness of the plans and to identify potential weaknesses in the plans include, for example, walk-through and tabletop exercises, checklists, simulations (parallel, full interrupt), and comprehensive exercises. Organizations conduct testing based on the continuity requirements in contingency plans and include a determination of the effects on organizational operations, assets, and individuals arising due to contingency operations. Organizations have flexibility and discretion in the breadth, depth, and timelines of corrective actions.

- CP-2 - CP-3 - IR-3 -
- -

Determine if the organization:

- - CP-4(a) - - CP-4(a)[1] -

defines tests to determine the effectiveness of the contingency plan and the organizational readiness to execute the plan;

-
- - CP-4(a)[2] -

defines a frequency to test the contingency plan for the information system;

-
- - CP-4(a)[3] -

tests the contingency plan for the information system with the organization-defined frequency, using organization-defined tests to determine the effectiveness of the plan and the organizational readiness to execute the plan;

-
-
- - CP-4(b) -

reviews the contingency plan test results; and

-
- - CP-4(c) -

initiates corrective actions, if needed.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing contingency plan testing

-

contingency plan

-

security plan

-

contingency plan test documentation

-

contingency plan test results

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for contingency plan testing, reviewing or responding to contingency plan tests

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for contingency plan testing

-

automated mechanisms supporting the contingency plan and/or contingency plan testing

-
-
- - Coordinate with Related Plans - CP-4(1) - -

The organization coordinates contingency plan testing with organizational elements responsible for related plans.

-
- -

Plans related to contingency plans for organizational information systems include, for example, Business Continuity Plans, Disaster Recovery Plans, Continuity of Operations Plans, Crisis Communications Plans, Critical Infrastructure Plans, Cyber Incident Response Plans, and Occupant Emergency Plans. This control enhancement does not require organizations to create organizational elements to handle related plans or to align such elements with specific plans. It does require, however, that if such organizational elements are responsible for related plans, organizations should coordinate with those elements.

- IR-8 - PM-8 -
- -

Determine if the organization coordinates contingency plan testing with organizational elements responsible for related plans.

-
- - EXAMINE - -

Contingency planning policy

-

incident response policy

-

procedures addressing contingency plan testing

-

contingency plan testing documentation

-

contingency plan

-

business continuity plans

-

disaster recovery plans

-

continuity of operations plans

-

crisis communications plans

-

critical infrastructure plans

-

cyber incident response plans

-

occupant emergency plans

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency plan testing responsibilities

-

organizational personnel

-

personnel with responsibilities for related plans

-

organizational personnel with information security responsibilities

-
-
-
- - Alternate Processing Site - CP-4(2) - -

The organization tests the contingency plan at the alternate processing site:

- - (a) -

To familiarize contingency personnel with the facility and available resources; and

-
- - (b) -

To evaluate the capabilities of the alternate processing site to support contingency operations.

-
-
- - CP-7 - - -

Determine if the organization tests the contingency plan at the alternate processing site to:

- - CP-4(2)(a) -

familiarize contingency personnel with the facility and available resources; and

- CP-4(2)(a) -
- - CP-4(2)(b) -

evaluate the capabilities of the alternate processing site to support contingency operations.

- CP-4(2)(b) -
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing contingency plan testing

-

contingency plan

-

contingency plan test documentation

-

contingency plan test results

-

alternate processing site agreements

-

service-level agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency planning and plan implementation responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for contingency plan testing

-

automated mechanisms supporting the contingency plan and/or contingency plan testing

-
-
-
- - Automated Testing - CP-4(3) - -

The organization employs automated mechanisms to more thoroughly and effectively test the contingency plan.

-
- -

Automated mechanisms provide more thorough and effective testing of contingency plans, for example: (i) by providing more complete coverage of contingency issues; (ii) by selecting more realistic test scenarios and environments; and (iii) by effectively stressing the information system and supported missions.

-
- -

Determine if the organization employs automated mechanisms to more thoroughly and effectively test the contingency plan.

-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing contingency plan testing

-

contingency plan

-

automated mechanisms supporting contingency plan testing

-

contingency plan test documentation

-

contingency plan test results

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency plan testing responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for contingency plan testing

-

automated mechanisms supporting contingency plan testing

-
-
-
- - Full Recovery / Reconstitution - CP-4(4) - -

The organization includes a full recovery and reconstitution of the information system to a known state as part of contingency plan testing.

-
- - CP-10 - SC-24 - - -

Determine if the organization:

- - CP-4(4)[1] -

includes a full recovery of the information system to a known state as part of contingency plan testing; and

-
- - CP-4(4)[2] -

includes a full reconstitution of the information system to a known state as part of contingency plan testing.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing information system recovery and reconstitution

-

contingency plan

-

contingency plan test documentation

-

contingency plan test results

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency plan testing responsibilities

-

organizational personnel with information system recovery and reconstitution responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for contingency plan testing

-

automated mechanisms supporting contingency plan testing

-

automated mechanisms supporting recovery and reconstitution of the information system

-
-
-
- - Federal Continuity Directive 1 - - FIPS Publication 199 - - NIST Special Publication 800-34 - - NIST Special Publication 800-84 - -
- - Contingency Plan Update - CP-5 - Withdrawn - CP-2 - - - Alternate Storage Site - CP-6 - -

The organization:

- - a. -

Establishes an alternate storage site including necessary agreements to permit the storage and retrieval of information system backup information; and

-
- - b. -

Ensures that the alternate storage site provides information security safeguards equivalent to that of the primary site.

-
-
- -

Alternate storage sites are sites that are geographically distinct from primary storage sites. An alternate storage site maintains duplicate copies of information and data in the event that the primary storage site is not available. Items covered by alternate storage site agreements include, for example, environmental conditions at alternate sites, access rules, physical and environmental protection requirements, and coordination of delivery/retrieval of backup media. Alternate storage sites reflect the requirements in contingency plans so that organizations can maintain essential missions/business functions despite disruption, compromise, or failure in organizational information systems.

- CP-2 - CP-7 - CP-9 - CP-10 - MP-4 -
- -

Determine if the organization:

- - CP-6[1] -

establishes an alternate storage site including necessary agreements to permit the storage and retrieval of information system backup information; and

-
- - CP-6[2] -

ensures that the alternate storage site provides information security safeguards equivalent to that of the primary site.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing alternate storage sites

-

contingency plan

-

alternate storage site agreements

-

primary storage site agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency plan alternate storage site responsibilities

-

organizational personnel with information system recovery responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for storing and retrieving information system backup information at the alternate storage site

-

automated mechanisms supporting and/or implementing storage and retrieval of information system backup information at the alternate storage site

-
-
- - Separation from Primary Site - CP-6(1) - -

The organization identifies an alternate storage site that is separated from the primary storage site to reduce susceptibility to the same threats.

-
- -

Threats that affect alternate storage sites are typically defined in organizational assessments of risk and include, for example, natural disasters, structural failures, hostile cyber attacks, and errors of omission/commission. Organizations determine what is considered a sufficient degree of separation between primary and alternate storage sites based on the types of threats that are of concern. For one particular type of threat (i.e., hostile cyber attack), the degree of separation between sites is less relevant.

- RA-3 -
- -

Determine if the organization identifies an alternate storage site that is separated from the primary storage site to reduce susceptibility to the same threats.

-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing alternate storage sites

-

contingency plan

-

alternate storage site

-

alternate storage site agreements

-

primary storage site agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency plan alternate storage site responsibilities

-

organizational personnel with information system recovery responsibilities

-

organizational personnel with information security responsibilities

-
-
-
- - Recovery Time / Point Objectives - CP-6(2) - -

The organization configures the alternate storage site to facilitate recovery operations in accordance with recovery time and recovery point objectives.

-
- -

Determine if the organization configures the alternate storage site to facilitate recovery operations in accordance with recovery time objectives and recovery point objectives (as specified in the information system contingency plan).

-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing alternate storage sites

-

contingency plan

-

alternate storage site

-

alternate storage site agreements

-

alternate storage site configurations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency plan testing responsibilities

-

organizational personnel with responsibilities for testing related plans

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for contingency plan testing

-

automated mechanisms supporting recovery time/point objectives

-
-
-
- - Accessibility - CP-6(3) - -

The organization identifies potential accessibility problems to the alternate storage site in the event of an area-wide disruption or disaster and outlines explicit mitigation actions.

-
- -

Area-wide disruptions refer to those types of disruptions that are broad in geographic scope (e.g., hurricane, regional power outage) with such determinations made by organizations based on organizational assessments of risk. Explicit mitigation actions include, for example: (i) duplicating backup information at other alternate storage sites if access problems occur at originally designated alternate sites; or (ii) planning for physical access to retrieve backup information if electronic accessibility to the alternate site is disrupted.

- RA-3 -
- -

Determine if the organization:

- - CP-6(3)[1] -

identifies potential accessibility problems to the alternate storage site in the event of an area-wide disruption or disaster; and

-
- - CP-6(3)[2] -

outlines explicit mitigation actions for such potential accessibility problems to the alternate storage site in the event of an area-wide disruption or disaster.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing alternate storage sites

-

contingency plan

-

alternate storage site

-

list of potential accessibility problems to alternate storage site

-

mitigation actions for accessibility problems to alternate storage site

-

organizational risk assessments

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency plan alternate storage site responsibilities

-

organizational personnel with information system recovery responsibilities

-

organizational personnel with information security responsibilities

-
-
-
- - NIST Special Publication 800-34 - -
- - Alternate Processing Site - - - - - - - CP-7 - -

The organization:

- - a. -

Establishes an alternate processing site including necessary agreements to permit the transfer and resumption of for essential missions/business functions within when the primary processing capabilities are unavailable;

-
- - b. -

Ensures that equipment and supplies required to transfer and resume operations are available at the alternate processing site or contracts are in place to support delivery to the site within the organization-defined time period for transfer/resumption; and

-
- - c. -

Ensures that the alternate processing site provides information security safeguards equivalent to those of the primary site.

-
-
- -

Alternate processing sites are sites that are geographically distinct from primary processing sites. An alternate processing site provides processing capability in the event that the primary processing site is not available. Items covered by alternate processing site agreements include, for example, environmental conditions at alternate sites, access rules, physical and environmental protection requirements, and coordination for the transfer/assignment of personnel. Requirements are specifically allocated to alternate processing sites that reflect the requirements in contingency plans to maintain essential missions/business functions despite disruption, compromise, or failure in organizational information systems.

- CP-2 - CP-6 - CP-8 - CP-9 - CP-10 - MA-6 -
- -

Determine if the organization:

- - CP-7(a) - - CP-7(a)[1] -

defines information system operations requiring an alternate processing site to be established to permit the transfer and resumption of such operations;

-
- - CP-7(a)[2] -

defines the time period consistent with recovery time objectives and recovery point objectives (as specified in the information system contingency plan) for transfer/resumption of organization-defined information system operations for essential missions/business functions;

-
- - CP-7(a)[3] -

establishes an alternate processing site including necessary agreements to permit the transfer and resumption of organization-defined information system operations for essential missions/business functions, within the organization-defined time period, when the primary processing capabilities are unavailable;

-
-
- - CP-7(b) - - CP-7(b)[1] -

ensures that equipment and supplies required to transfer and resume operations are available at the alternate processing site; or

-
- - CP-7(b)[2] -

ensures that contracts are in place to support delivery to the site within the organization-defined time period for transfer/resumption; and

-
-
- - CP-7(c) -

ensures that the alternate processing site provides information security safeguards equivalent to those of the primary site.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing alternate processing sites

-

contingency plan

-

alternate processing site agreements

-

primary processing site agreements

-

spare equipment and supplies inventory at alternate processing site

-

equipment and supply contracts

-

service-level agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for contingency planning and/or alternate site arrangements

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for recovery at the alternate site

-

automated mechanisms supporting and/or implementing recovery at the alternate processing site

-
-
- - Separation from Primary Site - CP-7(1) - -

The organization identifies an alternate processing site that is separated from the primary processing site to reduce susceptibility to the same threats.

-
- -

Threats that affect alternate processing sites are typically defined in organizational assessments of risk and include, for example, natural disasters, structural failures, hostile cyber attacks, and errors of omission/commission. Organizations determine what is considered a sufficient degree of separation between primary and alternate processing sites based on the types of threats that are of concern. For one particular type of threat (i.e., hostile cyber attack), the degree of separation between sites is less relevant.

- RA-3 -
- -

Determine if the organization identifies an alternate processing site that is separated from the primary storage site to reduce susceptibility to the same threats.

-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing alternate processing sites

-

contingency plan

-

alternate processing site

-

alternate processing site agreements

-

primary processing site agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency plan alternate processing site responsibilities

-

organizational personnel with information system recovery responsibilities

-

organizational personnel with information security responsibilities

-
-
-
- - Accessibility - CP-7(2) - -

The organization identifies potential accessibility problems to the alternate processing site in the event of an area-wide disruption or disaster and outlines explicit mitigation actions.

-
- -

Area-wide disruptions refer to those types of disruptions that are broad in geographic scope (e.g., hurricane, regional power outage) with such determinations made by organizations based on organizational assessments of risk.

- RA-3 -
- -

Determine if the organization:

- - CP-7(2)[1] -

identifies potential accessibility problems to the alternate processing site in the event of an area-wide disruption or disaster; and

-
- - CP-7(2)[2] -

outlines explicit mitigation actions for such potential accessibility problems to the alternate processing site in the event of an area-wide disruption or disaster.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing alternate processing sites

-

contingency plan

-

alternate processing site

-

alternate processing site agreements

-

primary processing site agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency plan alternate processing site responsibilities

-

organizational personnel with information system recovery responsibilities

-

organizational personnel with information security responsibilities

-
-
-
- - Priority of Service - CP-7(3) - -

The organization develops alternate processing site agreements that contain priority-of-service provisions in accordance with organizational availability requirements (including recovery time objectives).

-
- -

Priority-of-service agreements refer to negotiated agreements with service providers that ensure that organizations receive priority treatment consistent with their availability requirements and the availability of information resources at the alternate processing site.

-
- -

Determine if the organization develops alternate processing site agreements that contain priority-of-service provisions in accordance with organizational availability requirements (including recovery time objectives as specified in the information system contingency plan).

-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing alternate processing sites

-

contingency plan

-

alternate processing site agreements

-

service-level agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency plan alternate processing site responsibilities

-

organizational personnel with information system recovery responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for acquisitions/contractual agreements

-
-
-
- - Preparation for Use - CP-7(4) - -

The organization prepares the alternate processing site so that the site is ready to be used as the operational site supporting essential missions and business functions.

-
- -

Site preparation includes, for example, establishing configuration settings for information system components at the alternate processing site consistent with the requirements for such settings at the primary site and ensuring that essential supplies and other logistical considerations are in place.

- CM-2 - CM-6 -
- -

Determine if the organization prepares the alternate processing site so that the site is ready to be used as the operational site supporting essential missions and business functions.

-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing alternate processing sites

-

contingency plan

-

alternate processing site

-

alternate processing site agreements

-

alternate processing site configurations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency plan alternate processing site responsibilities

-

organizational personnel with information system recovery responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing recovery at the alternate processing site

-
-
-
- - Equivalent Information Security Safeguards - CP-7(5) - Withdrawn - CP-7 - - - Inability to Return to Primary Site - CP-7(6) - -

The organization plans and prepares for circumstances that preclude returning to the primary processing site.

-
- -

Determine if the organization plans and prepares for circumstances that preclude returning to the primary processing site.

-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing alternate processing sites

-

contingency plan

-

alternate processing site

-

alternate processing site agreements

-

alternate processing site configurations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system reconstitution responsibilities

-

organizational personnel with information security responsibilities

-
-
-
- - NIST Special Publication 800-34 - -
- - Telecommunications Services - - - - - - - CP-8 - -

The organization establishes alternate telecommunications services including necessary agreements to permit the resumption of for essential missions and business functions within when the primary telecommunications capabilities are unavailable at either the primary or alternate processing or storage sites.

-
- -

This control applies to telecommunications services (data and voice) for primary and alternate processing and storage sites. Alternate telecommunications services reflect the continuity requirements in contingency plans to maintain essential missions/business functions despite the loss of primary telecommunications services. Organizations may specify different time periods for primary/alternate sites. Alternate telecommunications services include, for example, additional organizational or commercial ground-based circuits/lines or satellites in lieu of ground-based communications. Organizations consider factors such as availability, quality of service, and access when entering into alternate telecommunications agreements.

- CP-2 - CP-6 - CP-7 -
- -

Determine if the organization:

- - CP-8[1] -

defines information system operations requiring alternate telecommunications services to be established to permit the resumption of such operations;

-
- - CP-8[2] -

defines the time period to permit resumption of organization-defined information system operations for essential missions and business functions; and

-
- - CP-8[3] -

establishes alternate telecommunications services including necessary agreements to permit the resumption of organization-defined information system operations for essential missions and business functions, within the organization-defined time period, when the primary telecommunications capabilities are unavailable at either the primary or alternate processing or storage sites.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing alternate telecommunications services

-

contingency plan

-

primary and alternate telecommunications service agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency plan telecommunications responsibilities

-

organizational personnel with information system recovery responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for acquisitions/contractual agreements

-
-
- - TEST - -

Automated mechanisms supporting telecommunications

-
-
- - Priority of Service Provisions - CP-8(1) - -

The organization:

- - (a) -

Develops primary and alternate telecommunications service agreements that contain priority-of-service provisions in accordance with organizational availability requirements (including recovery time objectives); and

-
- - (b) -

Requests Telecommunications Service Priority for all telecommunications services used for national security emergency preparedness in the event that the primary and/or alternate telecommunications services are provided by a common carrier.

-
-
- -

Organizations consider the potential mission/business impact in situations where telecommunications service providers are servicing other organizations with similar priority-of-service provisions.

-
- -

Determine if the organization:

- - CP-8(1)[1] -

develops primary and alternate telecommunications service agreements that contain priority-of-service provisions in accordance with organizational availability requirements (including recovery time objectives as specified in the information system contingency plan); and

-
- - CP-8(1)[2] -

requests Telecommunications Service Priority for all telecommunications services used for national security emergency preparedness in the event that the primary and/or alternate telecommunications services are provided by a common carrier.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing primary and alternate telecommunications services

-

contingency plan

-

primary and alternate telecommunications service agreements

-

Telecommunications Service Priority documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency plan telecommunications responsibilities

-

organizational personnel with information system recovery responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for acquisitions/contractual agreements

-
-
- - TEST - -

Automated mechanisms supporting telecommunications

-
-
-
- - Single Points of Failure - CP-8(2) - -

The organization obtains alternate telecommunications services to reduce the likelihood of sharing a single point of failure with primary telecommunications services.

-
- -

Determine if the organization obtains alternate telecommunications services to reduce the likelihood of sharing a single point of failure with primary telecommunications services.

-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing primary and alternate telecommunications services

-

contingency plan

-

primary and alternate telecommunications service agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency plan telecommunications responsibilities

-

organizational personnel with information system recovery responsibilities

-

primary and alternate telecommunications service providers

-

organizational personnel with information security responsibilities

-
-
-
- - Separation of Primary / Alternate Providers - CP-8(3) - -

The organization obtains alternate telecommunications services from providers that are separated from primary service providers to reduce susceptibility to the same threats.

-
- -

Threats that affect telecommunications services are typically defined in organizational assessments of risk and include, for example, natural disasters, structural failures, hostile cyber/physical attacks, and errors of omission/commission. Organizations seek to reduce common susceptibilities by, for example, minimizing shared infrastructure among telecommunications service providers and achieving sufficient geographic separation between services. Organizations may consider using a single service provider in situations where the service provider can provide alternate telecommunications services meeting the separation needs addressed in the risk assessment.

-
- -

Determine if the organization obtains alternate telecommunications services from providers that are separated from primary service providers to reduce susceptibility to the same threats.

-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing primary and alternate telecommunications services

-

contingency plan

-

primary and alternate telecommunications service agreements

-

alternate telecommunications service provider site

-

primary telecommunications service provider site

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency plan telecommunications responsibilities

-

organizational personnel with information system recovery responsibilities

-

primary and alternate telecommunications service providers

-

organizational personnel with information security responsibilities

-
-
-
- - Provider Contingency Plan - - - - CP-8(4) - -

The organization:

- - (a) -

Requires primary and alternate telecommunications service providers to have contingency plans;

-
- - (b) -

Reviews provider contingency plans to ensure that the plans meet organizational contingency requirements; and

-
- - (c) -

Obtains evidence of contingency testing/training by providers .

-
-
- -

Reviews of provider contingency plans consider the proprietary nature of such plans. In some situations, a summary of provider contingency plans may be sufficient evidence for organizations to satisfy the review requirement. Telecommunications service providers may also participate in ongoing disaster recovery exercises in coordination with the Department of Homeland Security, state, and local governments. Organizations may use these types of activities to satisfy evidentiary requirements related to service provider contingency plan reviews, testing, and training.

-
- -

Determine if the organization:

- - CP-8(4)(a) - - CP-8(4)(a)[1] -

requires primary telecommunications service provider to have contingency plans;

-
- - CP-8(4)(a)[2] -

requires alternate telecommunications service provider(s) to have contingency plans;

-
- CP-8(4)(a) -
- - CP-8(4)(b) -

reviews provider contingency plans to ensure that the plans meet organizational contingency requirements;

- CP-8(4)(b) -
- - CP-8(4)(c) - - CP-8(4)(c)[1] -

defines the frequency to obtain evidence of contingency testing/training by providers; and

-
- - CP-8(4)(c)[2] -

obtains evidence of contingency testing/training by providers with the organization-defined frequency.

-
- CP-8(4)(c) -
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing primary and alternate telecommunications services

-

contingency plan

-

provider contingency plans

-

evidence of contingency testing/training by providers

-

primary and alternate telecommunications service agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency planning, plan implementation, and testing responsibilities

-

primary and alternate telecommunications service providers

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for acquisitions/contractual agreements

-
-
-
- - Alternate Telecommunication Service Testing - - - - CP-8(5) - -

The organization tests alternate telecommunication services .

-
- -

Determine if the organization:

- - CP-8(5)[1] -

defines the frequency to test alternate telecommunication services; and

-
- - CP-8(5)[2] -

tests alternate telecommunication services with the organization-defined frequency.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing alternate telecommunications services

-

contingency plan

-

evidence of testing alternate telecommunications services

-

alternate telecommunications service agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency planning, plan implementation, and testing responsibilities

-

alternate telecommunications service providers

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting testing alternate telecommunications services

-
-
-
- - NIST Special Publication 800-34 - - National Communications Systems Directive 3-10 - - http://www.dhs.gov/telecommunications-service-priority-tsp - -
- - Information System Backup - - - - - - - - - - CP-9 - -

The organization:

- - a. -

Conducts backups of user-level information contained in the information system ;

-
- - b. -

Conducts backups of system-level information contained in the information system ;

-
- - c. -

Conducts backups of information system documentation including security-related documentation ; and

-
- - d. -

Protects the confidentiality, integrity, and availability of backup information at storage locations.

-
-
- -

System-level information includes, for example, system-state information, operating system and application software, and licenses. User-level information includes any information other than system-level information. Mechanisms employed by organizations to protect the integrity of information system backups include, for example, digital signatures and cryptographic hashes. Protection of system backup information while in transit is beyond the scope of this control. Information system backups reflect the requirements in contingency plans as well as other organizational requirements for backing up information.

- CP-2 - CP-6 - MP-4 - MP-5 - SC-13 -
- -

Determine if the organization:

- - CP-9(a) - - CP-9(a)[1] -

defines a frequency, consistent with recovery time objectives and recovery point objectives as specified in the information system contingency plan, to conduct backups of user-level information contained in the information system;

-
- - CP-9(a)[2] -

conducts backups of user-level information contained in the information system with the organization-defined frequency;

-
-
- - CP-9(b) - - CP-9(b)[1] -

defines a frequency, consistent with recovery time objectives and recovery point objectives as specified in the information system contingency plan, to conduct backups of system-level information contained in the information system;

-
- - CP-9(b)[2] -

conducts backups of system-level information contained in the information system with the organization-defined frequency;

-
-
- - CP-9(c) - - CP-9(c)[1] -

defines a frequency, consistent with recovery time objectives and recovery point objectives as specified in the information system contingency plan, to conduct backups of information system documentation including security-related documentation;

-
- - CP-9(c)[2] -

conducts backups of information system documentation, including security-related documentation, with the organization-defined frequency; and

-
-
- - CP-9(d) -

protects the confidentiality, integrity, and availability of backup information at storage locations.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing information system backup

-

contingency plan

-

backup storage location(s)

-

information system backup logs or records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system backup responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for conducting information system backups

-

automated mechanisms supporting and/or implementing information system backups

-
-
- - Testing for Reliability / Integrity - - - - CP-9(1) - -

The organization tests backup information to verify media reliability and information integrity.

-
- - CP-4 - - -

Determine if the organization:

- - CP-9(1)[1] -

defines the frequency to test backup information to verify media reliability and information integrity; and

-
- - CP-9(1)[2] -

tests backup information with the organization-defined frequency to verify media reliability and information integrity.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing information system backup

-

contingency plan

-

information system backup test results

-

contingency plan test documentation

-

contingency plan test results

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system backup responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for conducting information system backups

-

automated mechanisms supporting and/or implementing information system backups

-
-
-
- - Test Restoration Using Sampling - CP-9(2) - -

The organization uses a sample of backup information in the restoration of selected information system functions as part of contingency plan testing.

-
- - CP-4 - - -

Determine if the organization uses a sample of backup information in the restoration of selected information system functions as part of contingency plan testing.

-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing information system backup

-

contingency plan

-

information system backup test results

-

contingency plan test documentation

-

contingency plan test results

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system backup responsibilities

-

organizational personnel with contingency planning/contingency plan testing responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for conducting information system backups

-

automated mechanisms supporting and/or implementing information system backups

-
-
-
- - Separate Storage for Critical Information - - - - CP-9(3) - -

The organization stores backup copies of in a separate facility or in a fire-rated container that is not collocated with the operational system.

-
- -

Critical information system software includes, for example, operating systems, cryptographic key management systems, and intrusion detection/prevention systems. Security-related information includes, for example, organizational inventories of hardware, software, and firmware components. Alternate storage sites typically serve as separate storage facilities for organizations.

- CM-2 - CM-8 -
- -

Determine if the organization:

- - CP-9(3)[1] - - CP-9(3)[1][a] -

defines critical information system software and other security-related information requiring backup copies to be stored in a separate facility; or

-
- - CP-9(3)[1][b] -

defines critical information system software and other security-related information requiring backup copies to be stored in a fire-rated container that is not collocated with the operational system; and

-
-
- - CP-9(3)[2] -

stores backup copies of organization-defined critical information system software and other security-related information in a separate facility or in a fire-rated container that is not collocated with the operational system.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing information system backup

-

contingency plan

-

backup storage location(s)

-

information system backup configurations and associated documentation

-

information system backup logs or records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency planning and plan implementation responsibilities

-

organizational personnel with information system backup responsibilities

-

organizational personnel with information security responsibilities

-
-
-
- - Protection from Unauthorized Modification - CP-9(4) - Withdrawn - CP-9 - - - Transfer to Alternate Storage Site - - - - CP-9(5) - -

The organization transfers information system backup information to the alternate storage site .

-
- -

Information system backup information can be transferred to alternate storage sites either electronically or by physical shipment of storage media.

-
- -

Determine if the organization:

- - CP-9(5)[1] -

defines a time period, consistent with recovery time objectives and recovery point objectives as specified in the information system contingency plan, to transfer information system backup information to the alternate storage site;

-
- - CP-9(5)[2] -

defines a transfer rate, consistent with recovery time objectives and recovery point objectives as specified in the information system contingency plan, to transfer information system backup information to the alternate storage site; and

-
- - CP-9(5)[3] -

transfers information system backup information to the alternate storage site with the organization-defined time period and transfer rate.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing information system backup

-

contingency plan

-

information system backup logs or records

-

evidence of system backup information transferred to alternate storage site

-

alternate storage site agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system backup responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for transferring information system backups to the alternate storage site

-

automated mechanisms supporting and/or implementing information system backups

-

automated mechanisms supporting and/or implementing information transfer to the alternate storage site

-
-
-
- - Redundant Secondary System - CP-9(6) - -

The organization accomplishes information system backup by maintaining a redundant secondary system that is not collocated with the primary system and that can be activated without loss of information or disruption to operations.

-
- - CP-7 - CP-10 - - -

Determine if the organization accomplishes information system backup by maintaining a redundant secondary system that:

- - CP-9(6)[1] -

is not collocated with the primary system; and

-
- - CP-9(6)[2] -

can be activated without loss of information or disruption to operations.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing information system backup

-

contingency plan

-

information system backup test results

-

contingency plan test results

-

contingency plan test documentation

-

redundant secondary system for information system backups

-

location(s) of redundant secondary backup system(s)

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system backup responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for the redundant secondary system

-
-
- - TEST - -

Organizational processes for maintaining redundant secondary systems

-

automated mechanisms supporting and/or implementing information system backups

-

automated mechanisms supporting and/or implementing information transfer to a redundant secondary system

-
-
-
- - Dual Authorization - - - - CP-9(7) - -

The organization enforces dual authorization for the deletion or destruction of .

-
- -

Dual authorization ensures that the deletion or destruction of backup information cannot occur unless two qualified individuals carry out the task. Individuals deleting/destroying backup information possess sufficient skills/expertise to determine if the proposed deletion/destruction of backup information reflects organizational policies and procedures. Dual authorization may also be known as two-person control.

- AC-3 - MP-2 -
- -

Determine if the organization:

- - CP-9(7)[1] -

defines backup information that requires dual authorization to be enforced for the deletion or destruction of such information; and

-
- - CP-9(7)[2] -

enforces dual authorization for the deletion or destruction of organization-defined backup information.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing information system backup

-

contingency plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

system generated list of dual authorization credentials or rules

-

logs or records of deletion or destruction of backup information

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system backup responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing dual authorization

-

automated mechanisms supporting and/or implementing deletion/destruction of backup information

-
-
-
- - NIST Special Publication 800-34 - -
- - Information System Recovery and Reconstitution - CP-10 - -

The organization provides for the recovery and reconstitution of the information system to a known state after a disruption, compromise, or failure.

-
- -

Recovery is executing information system contingency plan activities to restore organizational missions/business functions. Reconstitution takes place following recovery and includes activities for returning organizational information systems to fully operational states. Recovery and reconstitution operations reflect mission and business priorities, recovery point/time and reconstitution objectives, and established organizational metrics consistent with contingency plan requirements. Reconstitution includes the deactivation of any interim information system capabilities that may have been needed during recovery operations. Reconstitution also includes assessments of fully restored information system capabilities, reestablishment of continuous monitoring activities, potential information system reauthorizations, and activities to prepare the systems against future disruptions, compromises, or failures. Recovery/reconstitution capabilities employed by organizations can include both automated mechanisms and manual procedures.

- CA-2 - CA-6 - CA-7 - CP-2 - CP-6 - CP-7 - CP-9 - SC-24 -
- -

Determine if the organization provides for:

- - CP-10[1] -

the recovery of the information system to a known state after:

- - CP-10[1][a] -

a disruption;

-
- - CP-10[1][b] -

a compromise; or

-
- - CP-10[1][c] -

a failure;

-
-
- - CP-10[2] -

the reconstitution of the information system to a known state after:

- - CP-10[2][a] -

a disruption;

-
- - CP-10[2][b] -

a compromise; or

-
- - CP-10[2][c] -

a failure.

-
-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing information system backup

-

contingency plan

-

information system backup test results

-

contingency plan test results

-

contingency plan test documentation

-

redundant secondary system for information system backups

-

location(s) of redundant secondary backup system(s)

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency planning, recovery, and/or reconstitution responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes implementing information system recovery and reconstitution operations

-

automated mechanisms supporting and/or implementing information system recovery and reconstitution operations

-
-
- - Contingency Plan Testing - CP-10(1) - Withdrawn - CP-4 - - - Transaction Recovery - CP-10(2) - -

The information system implements transaction recovery for systems that are transaction-based.

-
- -

Transaction-based information systems include, for example, database management systems and transaction processing systems. Mechanisms supporting transaction recovery include, for example, transaction rollback and transaction journaling.

-
- -

Determine if the information system implements transaction recovery for systems that are transaction-based.

-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing information system recovery and reconstitution

-

contingency plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

contingency plan test documentation

-

contingency plan test results

-

information system transaction recovery records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for transaction recovery

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing transaction recovery capability

-
-
-
- - Compensating Security Controls - CP-10(3) - Withdrawn - Chapter 3 - - - Restore Within Time Period - - - - CP-10(4) - -

The organization provides the capability to restore information system components within from configuration-controlled and integrity-protected information representing a known, operational state for the components.

-
- -

Restoration of information system components includes, for example, reimaging which restores components to known, operational states.

- CM-2 -
- -

Determine if the organization:

- - CP-10(4)[1] -

defines a time period to restore information system components from configuration-controlled and integrity-protected information representing a known, operational state for the components; and

-
- - CP-10(4)[2] -

provides the capability to restore information system components within the organization-defined time period from configuration-controlled and integrity-protected information representing a known, operational state for the components.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing information system recovery and reconstitution

-

contingency plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

contingency plan test documentation

-

contingency plan test results

-

evidence of information system recovery and reconstitution operations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system recovery and reconstitution responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing recovery/reconstitution of information system information

-
-
-
- - Failover Capability - CP-10(5) - Withdrawn - SI-13 - - - Component Protection - CP-10(6) - -

The organization protects backup and restoration hardware, firmware, and software.

-
- -

Protection of backup and restoration hardware, firmware, and software components includes both physical and technical safeguards. Backup and restoration software includes, for example, router tables, compilers, and other security-relevant system software.

- AC-3 - AC-6 - PE-3 -
- -

Determine if the organization protects backup and restoration:

- - CP-10(6)[1] -

hardware;

-
- - CP-10(6)[2] -

firmware; and

-
- - CP-10(6)[3] -

software.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing information system recovery and reconstitution

-

contingency plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

logical access credentials

-

physical access credentials

-

logical access authorization records

-

physical access authorization records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system recovery and reconstitution responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for protecting backup and restoration hardware, firmware, and software

-

automated mechanisms supporting and/or implementing protection of backup and restoration hardware, firmware, and software

-
-
-
- - Federal Continuity Directive 1 - - NIST Special Publication 800-34 - -
- - Alternate Communications Protocols - - - - CP-11 - -

The information system provides the capability to employ in support of maintaining continuity of operations.

-
- -

Contingency plans and the associated training and testing for those plans, incorporate an alternate communications protocol capability as part of increasing the resilience of organizational information systems. Alternate communications protocols include, for example, switching from Transmission Control Protocol/Internet Protocol (TCP/IP) Version 4 to TCP/IP Version 6. Switching communications protocols may affect software applications and therefore, the potential side effects of introducing alternate communications protocols are analyzed prior to implementation.

-
- -

Determine if:

- - CP-11[1] -

the organization defines alternative communications protocols to be employed in support of maintaining continuity of operations; and

-
- - CP-11[2] -

the information system provides the capability to employ organization-defined alternative communications protocols in support of maintaining continuity of operations.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing alternative communications protocols

-

contingency plan

-

continuity of operations plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of alternative communications protocols supporting continuity of operations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with contingency planning and plan implementation responsibilities

-

organizational personnel with continuity of operations planning and plan implementation responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms employing alternative communications protocols

-
-
-
- - Safe Mode - - - - - - - CP-12 - -

The information system, when are detected, enters a safe mode of operation with .

-
- -

For information systems supporting critical missions/business functions including, for example, military operations and weapons systems, civilian space operations, nuclear power plant operations, and air traffic control operations (especially real-time operational environments), organizations may choose to identify certain conditions under which those systems revert to a predefined safe mode of operation. The safe mode of operation, which can be activated automatically or manually, restricts the types of activities or operations information systems could execute when those conditions are encountered. Restriction includes, for example, allowing only certain functions that could be carried out under limited power or with reduced communications bandwidth.

-
- -

Determine if:

- - CP-12[1] -

the organization defines conditions that, when detected, requires the information system to enter a safe mode of operation;

-
- - CP-12[2] -

the organization defines restrictions of safe mode of operation; and

-
- - CP-12[3] -

the information system, when organization-defined conditions are detected, enters a safe mode of operation with organization-defined restrictions of safe mode of operation.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing safe mode of operation for the information system

-

contingency plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system administration manuals

-

information system operation manuals

-

information system installation manuals

-

contingency plan test records

-

incident handling records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operation responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms implementing safe mode of operation

-
-
-
- - Alternative Security Mechanisms - - - - - - - CP-13 - -

The organization employs for satisfying when the primary means of implementing the security function is unavailable or compromised.

-
- -

This control supports information system resiliency and contingency planning/continuity of operations. To ensure mission/business continuity, organizations can implement alternative or supplemental security mechanisms. These mechanisms may be less effective than the primary mechanisms (e.g., not as easy to use, not as scalable, or not as secure). However, having the capability to readily employ these alternative/supplemental mechanisms enhances overall mission/business continuity that might otherwise be adversely impacted if organizational operations had to be curtailed until the primary means of implementing the functions was restored. Given the cost and level of effort required to provide such alternative capabilities, this control would typically be applied only to critical security capabilities provided by information systems, system components, or information system services. For example, an organization may issue to senior executives and system administrators one-time pads in case multifactor tokens, the organization’s standard means for secure remote authentication, is compromised.

- CP-2 -
- -

Determine if the organization:

- - CP-13[1] -

defines alternative or supplemental security mechanisms to be employed when the primary means of implementing the security function is unavailable or compromised;

-
- - CP-13[2] -

defines security functions to be satisfied using organization-defined alternative or supplemental security mechanisms when the primary means of implementing the security function is unavailable or compromised; and

-
- - CP-13[3] -

employs organization-defined alternative or supplemental security mechanisms satisfying organization-defined security functions when the primary means of implementing the security function is unavailable or compromised.

-
-
- - EXAMINE - -

Contingency planning policy

-

procedures addressing alternate security mechanisms

-

contingency plan

-

continuity of operations plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

contingency plan test records

-

contingency plan test results

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operation responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Information system capability implementing alternative security mechanisms

-
-
-
-
- - Identification and Authentication - - Identification and Authentication Policy and Procedures - - - - - - - - - - IA-1 - -

The organization:

- - a. -

Develops, documents, and disseminates to :

- - 1. -

An identification and authentication policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and

-
- - 2. -

Procedures to facilitate the implementation of the identification and authentication policy and associated identification and authentication controls; and

-
-
- - b. -

Reviews and updates the current:

- - 1. -

Identification and authentication policy ; and

-
- - 2. -

Identification and authentication procedures .

-
-
-
- -

This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the IA family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures.

- PM-9 -
- -

Determine if the organization:

- - IA-1(a) - - IA-1(a)(1) - - IA-1(a)(1)[1] -

develops and documents an identification and authentication policy that addresses:

- - IA-1(a)(1)[1][a] -

purpose;

-
- - IA-1(a)(1)[1][b] -

scope;

-
- - IA-1(a)(1)[1][c] -

roles;

-
- - IA-1(a)(1)[1][d] -

responsibilities;

-
- - IA-1(a)(1)[1][e] -

management commitment;

-
- - IA-1(a)(1)[1][f] -

coordination among organizational entities;

-
- - IA-1(a)(1)[1][g] -

compliance;

-
-
- - IA-1(a)(1)[2] -

defines personnel or roles to whom the identification and authentication policy is to be disseminated; and

-
- - IA-1(a)(1)[3] -

disseminates the identification and authentication policy to organization-defined personnel or roles;

-
-
- - IA-1(a)(2) - - IA-1(a)(2)[1] -

develops and documents procedures to facilitate the implementation of the identification and authentication policy and associated identification and authentication controls;

-
- - IA-1(a)(2)[2] -

defines personnel or roles to whom the procedures are to be disseminated;

-
- - IA-1(a)(2)[3] -

disseminates the procedures to organization-defined personnel or roles;

-
-
-
- - IA-1(b) - - IA-1(b)(1) - - IA-1(b)(1)[1] -

defines the frequency to review and update the current identification and authentication policy;

-
- - IA-1(b)(1)[2] -

reviews and updates the current identification and authentication policy with the organization-defined frequency; and

-
-
- - IA-1(b)(2) - - IA-1(b)(2)[1] -

defines the frequency to review and update the current identification and authentication procedures; and

-
- - IA-1(b)(2)[2] -

reviews and updates the current identification and authentication procedures with the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

Identification and authentication policy and procedures

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with identification and authentication responsibilities

-

organizational personnel with information security responsibilities

-
-
- - FIPS Publication 201 - - NIST Special Publication 800-12 - - NIST Special Publication 800-63 - - NIST Special Publication 800-73 - - NIST Special Publication 800-76 - - NIST Special Publication 800-78 - - NIST Special Publication 800-100 - -
- - Identification and Authentication (organizational Users) - IA-2 - -

The information system uniquely identifies and authenticates organizational users (or processes acting on behalf of organizational users).

-
- -

Organizational users include employees or individuals that organizations deem to have equivalent status of employees (e.g., contractors, guest researchers). This control applies to all accesses other than: (i) accesses that are explicitly identified and documented in AC-14; and (ii) accesses that occur through authorized use of group authenticators without individual authentication. Organizations may require unique identification of individuals in group accounts (e.g., shared privilege accounts) or for detailed accountability of individual activity. Organizations employ passwords, tokens, or biometrics to authenticate user identities, or in the case multifactor authentication, or some combination thereof. Access to organizational information systems is defined as either local access or network access. Local access is any access to organizational information systems by users (or processes acting on behalf of users) where such access is obtained by direct connections without the use of networks. Network access is access to organizational information systems by users (or processes acting on behalf of users) where such access is obtained through network connections (i.e., nonlocal accesses). Remote access is a type of network access that involves communication through external networks (e.g., the Internet). Internal networks include local area networks and wide area networks. In addition, the use of encrypted virtual private networks (VPNs) for network connections between organization-controlled endpoints and non-organization controlled endpoints may be treated as internal networks from the perspective of protecting the confidentiality and integrity of information traversing the network. -Organizations can satisfy the identification and authentication requirements in this control by complying with the requirements in Homeland Security Presidential Directive 12 consistent with the specific organizational implementation plans. Multifactor authentication requires the use of two or more different factors to achieve authentication. The factors are defined as: (i) something you know (e.g., password, personal identification number [PIN]); (ii) something you have (e.g., cryptographic identification device, token); or (iii) something you are (e.g., biometric). Multifactor solutions that require devices separate from information systems gaining access include, for example, hardware tokens providing time-based or challenge-response authenticators and smart cards such as the U.S. Government Personal Identity Verification card and the DoD common access card. In addition to identifying and authenticating users at the information system level (i.e., at logon), organizations also employ identification and authentication mechanisms at the application level, when necessary, to provide increased information security. Identification and authentication requirements for other than organizational users are described in IA-8.

- AC-2 - AC-3 - AC-14 - AC-17 - AC-18 - IA-4 - IA-5 - IA-8 -
- -

Determine if the information system uniquely identifies and authenticates organizational users (or processes acting on behalf of organizational users).

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing user identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of information system accounts

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

organizational personnel with account management responsibilities

-

system developers

-
-
- - TEST - -

Organizational processes for uniquely identifying and authenticating users

-

automated mechanisms supporting and/or implementing identification and authentication capability

-
-
- - Network Access to Privileged Accounts - IA-2(1) - -

The information system implements multifactor authentication for network access to privileged accounts.

-
- - AC-6 - - -

Determine if the information system implements multifactor authentication for network access to privileged accounts.

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing user identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of information system accounts

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with account management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing multifactor authentication capability

-
-
-
- - Network Access to Non-privileged Accounts - IA-2(2) - -

The information system implements multifactor authentication for network access to non-privileged accounts.

-
- -

Determine if the information system implements multifactor authentication for network access to non-privileged accounts.

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing user identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of information system accounts

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with account management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing multifactor authentication capability

-
-
-
- - Local Access to Privileged Accounts - IA-2(3) - -

The information system implements multifactor authentication for local access to privileged accounts.

-
- - AC-6 - - -

Determine if the information system implements multifactor authentication for local access to privileged accounts.

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing user identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of information system accounts

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with account management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing multifactor authentication capability

-
-
-
- - Local Access to Non-privileged Accounts - IA-2(4) - -

The information system implements multifactor authentication for local access to non-privileged accounts.

-
- -

Determine if the information system implements multifactor authentication for local access to non-privileged accounts.

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing user identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of information system accounts

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with account management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing multifactor authentication capability

-
-
-
- - Group Authentication - IA-2(5) - -

The organization requires individuals to be authenticated with an individual authenticator when a group authenticator is employed.

-
- -

Requiring individuals to use individual authenticators as a second level of authentication helps organizations to mitigate the risk of using group authenticators.

-
- -

Determine if the organization requires individuals to be authenticated with an individual authenticator when a group authenticator is employed.

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing user identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of information system accounts

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with account management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing authentication capability for group accounts

-
-
-
- - Network Access to Privileged Accounts - Separate Device - - - - IA-2(6) - -

The information system implements multifactor authentication for network access to privileged accounts such that one of the factors is provided by a device separate from the system gaining access and the device meets .

-
- - AC-6 - - -

Determine if:

- - IA-2(6)[1] -

the information system implements multifactor authentication for network access to privileged accounts such that one of the factors is provided by a device separate from the system gaining access;

-
- - IA-2(6)[2] -

the organization defines strength of mechanism requirements to be enforced by a device separate from the system gaining network access to privileged accounts; and

-
- - IA-2(6)[3] -

the information system implements multifactor authentication for network access to privileged accounts such that a device, separate from the system gaining access, meets organization-defined strength of mechanism requirements.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing user identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of information system accounts

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with account management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing multifactor authentication capability

-
-
-
- - Network Access to Non-privileged Accounts - Separate Device - - - - IA-2(7) - -

The information system implements multifactor authentication for network access to non-privileged accounts such that one of the factors is provided by a device separate from the system gaining access and the device meets .

-
- -

Determine if:

- - IA-2(7)[1] -

the information system implements multifactor authentication for network access to non-privileged accounts such that one of the factors is provided by a device separate from the system gaining access;

-
- - IA-2(7)[2] -

the organization defines strength of mechanism requirements to be enforced by a device separate from the system gaining network access to non-privileged accounts; and

-
- - IA-2(7)[3] -

the information system implements multifactor authentication for network access to non-privileged accounts such that a device, separate from the system gaining access, meets organization-defined strength of mechanism requirements.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing user identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of information system accounts

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with account management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing multifactor authentication capability

-
-
-
- - Network Access to Privileged Accounts - Replay Resistant - IA-2(8) - -

The information system implements replay-resistant authentication mechanisms for network access to privileged accounts.

-
- -

Authentication processes resist replay attacks if it is impractical to achieve successful authentications by replaying previous authentication messages. Replay-resistant techniques include, for example, protocols that use nonces or challenges such as Transport Layer Security (TLS) and time synchronous or challenge-response one-time authenticators.

-
- -

Determine if the information system implements replay-resistant authentication mechanisms for network access to privileged accounts.

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing user identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of privileged information system accounts

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with account management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing identification and authentication capability

-

automated mechanisms supporting and/or implementing replay resistant authentication mechanisms

-
-
-
- - Network Access to Non-privileged Accounts - Replay Resistant - IA-2(9) - -

The information system implements replay-resistant authentication mechanisms for network access to non-privileged accounts.

-
- -

Authentication processes resist replay attacks if it is impractical to achieve successful authentications by recording/replaying previous authentication messages. Replay-resistant techniques include, for example, protocols that use nonces or challenges such as Transport Layer Security (TLS) and time synchronous or challenge-response one-time authenticators.

-
- -

Determine if the information system implements replay-resistant authentication mechanisms for network access to non-privileged accounts.

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing user identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of non-privileged information system accounts

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with account management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing identification and authentication capability

-

automated mechanisms supporting and/or implementing replay resistant authentication mechanisms

-
-
-
- - Single Sign-on - - - - IA-2(10) - -

The information system provides a single sign-on capability for .

-
- -

Single sign-on enables users to log in once and gain access to multiple information system resources. Organizations consider the operational efficiencies provided by single sign-on capabilities with the increased risk from disclosures of single authenticators providing access to multiple system resources.

-
- -

Determine if:

- - IA-2(10)[1] -

the organization defines a list of information system accounts and services for which a single sign-on capability must be provided; and

-
- - IA-2(10)[2] -

the information system provides a single sign-on capability for organization-defined information system accounts and services.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing single sign-on capability for information system accounts and services

-

procedures addressing identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of information system accounts and services requiring single sign-on capability

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with account management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing identification and authentication capability

-

automated mechanisms supporting and/or implementing single sign-on capability for information system accounts and services

-
-
-
- - Remote Access - Separate Device - - - - IA-2(11) - -

The information system implements multifactor authentication for remote access to privileged and non-privileged accounts such that one of the factors is provided by a device separate from the system gaining access and the device meets .

-
- -

For remote access to privileged/non-privileged accounts, the purpose of requiring a device that is separate from the information system gaining access for one of the factors during multifactor authentication is to reduce the likelihood of compromising authentication credentials stored on the system. For example, adversaries deploying malicious code on organizational information systems can potentially compromise such credentials resident on the system and subsequently impersonate authorized users.

- AC-6 -
- -

Determine if:

- - IA-2(11)[1] -

the information system implements multifactor authentication for remote access to privileged accounts such that one of the factors is provided by a device separate from the system gaining access;

-
- - IA-2(11)[2] -

the information system implements multifactor authentication for remote access to non-privileged accounts such that one of the factors is provided by a device separate from the system gaining access;

-
- - IA-2(11)[3] -

the organization defines strength of mechanism requirements to be enforced by a device separate from the system gaining remote access to privileged accounts;

-
- - IA-2(11)[4] -

the organization defines strength of mechanism requirements to be enforced by a device separate from the system gaining remote access to non-privileged accounts;

-
- - IA-2(11)[5] -

the information system implements multifactor authentication for remote access to privileged accounts such that a device, separate from the system gaining access, meets organization-defined strength of mechanism requirements; and

-
- - IA-2(11)[6] -

the information system implements multifactor authentication for remote access to non-privileged accounts such that a device, separate from the system gaining access, meets organization-defined strength of mechanism requirements.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing user identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of privileged and non-privileged information system accounts

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with account management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing identification and authentication capability

-
-
-
- - Acceptance of PIV Credentials - IA-2(12) - -

The information system accepts and electronically verifies Personal Identity Verification (PIV) credentials.

-
- -

This control enhancement applies to organizations implementing logical access control systems (LACS) and physical access control systems (PACS). Personal Identity Verification (PIV) credentials are those credentials issued by federal agencies that conform to FIPS Publication 201 and supporting guidance documents. OMB Memorandum 11-11 requires federal agencies to continue implementing the requirements specified in HSPD-12 to enable agency-wide use of PIV credentials.

- AU-2 - PE-3 - SA-4 -
- -

Determine if the information system:

- - IA-2(12)[1] -

accepts Personal Identity Verification (PIV) credentials; and

-
- - IA-2(12)[2] -

electronically verifies Personal Identity Verification (PIV) credentials.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing user identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

PIV verification records

-

evidence of PIV credentials

-

PIV credential authorizations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with account management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing acceptance and verification of PIV credentials

-
-
-
- - Out-of-band Authentication - - - - - - - IA-2(13) - -

The information system implements under .

-
- -

Out-of-band authentication (OOBA) refers to the use of two separate communication paths to identify and authenticate users or devices to an information system. The first path (i.e., the in-band path), is used to identify and authenticate users or devices, and generally is the path through which information flows. The second path (i.e., the out-of-band path) is used to independently verify the authentication and/or requested action. For example, a user authenticates via a notebook computer to a remote server to which the user desires access, and requests some action of the server via that communication path. Subsequently, the server contacts the user via the user’s cell phone to verify that the requested action originated from the user. The user may either confirm the intended action to an individual on the telephone or provide an authentication code via the telephone. This type of authentication can be employed by organizations to mitigate actual or suspected man-in the-middle attacks. The conditions for activation can include, for example, suspicious activities, new threat indicators or elevated threat levels, or the impact level or classification level of information in requested transactions.

- IA-10 - IA-11 - SC-37 -
- -

Determine if:

- - IA-2(13)[1] -

the organization defines out-of-band authentication to be implemented by the information system;

-
- - IA-2(13)[2] -

the organization defines conditions under which the information system implements organization-defined out-of-band authentication; and

-
- - IA-2(13)[3] -

the information system implements organization-defined out-of-band authentication under organization-defined conditions.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing user identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

system-generated list of out-of-band authentication paths

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with account management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing out-of-band authentication capability

-
-
-
- - HSPD-12 - - OMB Memorandum 04-04 - - OMB Memorandum 06-16 - - OMB Memorandum 11-11 - - FIPS Publication 201 - - NIST Special Publication 800-63 - - NIST Special Publication 800-73 - - NIST Special Publication 800-76 - - NIST Special Publication 800-78 - - FICAM Roadmap and Implementation Guidance - - http://idmanagement.gov - -
- - Device Identification and Authentication - - - - - - - IA-3 - -

The information system uniquely identifies and authenticates before establishing a connection.

-
- -

Organizational devices requiring unique device-to-device identification and authentication may be defined by type, by device, or by a combination of type/device. Information systems typically use either shared known information (e.g., Media Access Control [MAC] or Transmission Control Protocol/Internet Protocol [TCP/IP] addresses) for device identification or organizational authentication solutions (e.g., IEEE 802.1x and Extensible Authentication Protocol [EAP], Radius server with EAP-Transport Layer Security [TLS] authentication, Kerberos) to identify/authenticate devices on local and/or wide area networks. Organizations determine the required strength of authentication mechanisms by the security categories of information systems. Because of the challenges of applying this control on large scale, organizations are encouraged to only apply the control to those limited number (and type) of devices that truly need to support this capability.

- AC-17 - AC-18 - AC-19 - CA-3 - IA-4 - IA-5 -
- -

Determine if:

- - IA-3[1] -

the organization defines specific and/or types of devices that the information system uniquely identifies and authenticates before establishing one or more of the following:

- - IA-3[1][a] -

a local connection;

-
- - IA-3[1][b] -

a remote connection; and/or

-
- - IA-3[1][c] -

a network connection; and

-
-
- - IA-3[2] -

the information system uniquely identifies and authenticates organization-defined devices before establishing one or more of the following:

- - IA-3[2][a] -

a local connection;

-
- - IA-3[2][b] -

a remote connection; and/or

-
- - IA-3[2][c] -

a network connection.

-
-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing device identification and authentication

-

information system design documentation

-

list of devices requiring unique identification and authentication

-

device connection reports

-

information system configuration settings and associated documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with operational responsibilities for device identification and authentication

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing device identification and authentication capability

-
-
- - Cryptographic Bidirectional Authentication - - - - - - - IA-3(1) - -

The information system authenticates before establishing connection using bidirectional authentication that is cryptographically based.

-
- -

A local connection is any connection with a device communicating without the use of a network. A network connection is any connection with a device that communicates through a network (e.g., local area or wide area network, Internet). A remote connection is any connection with a device communicating through an external network (e.g., the Internet). Bidirectional authentication provides stronger safeguards to validate the identity of other devices for connections that are of greater risk (e.g., remote connections).

- SC-8 - SC-12 - SC-13 -
- -

Determine if:

- - IA-3(1)[1] -

the organization defines specific and/or types of devices requiring use of cryptographically based, bidirectional authentication to authenticate before establishing one or more of the following:

- - IA-3(1)[1][a] -

a local connection;

-
- - IA-3(1)[1][b] -

a remote connection; and/or

-
- - IA-3(1)[1][c] -

a network connection;

-
-
- - IA-3(1)[2] -

the information system uses cryptographically based bidirectional authentication to authenticate organization-defined devices before establishing one or more of the following:

- - IA-3(1)[2][a] -

a local connection;

-
- - IA-3(1)[2][b] -

a remote connection; and/or

-
- - IA-3(1)[2][c] -

a network connection.

-
-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing device identification and authentication

-

information system design documentation

-

list of devices requiring unique identification and authentication

-

device connection reports

-

information system configuration settings and associated documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with operational responsibilities for device identification and authentication

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing device authentication capability

-

cryptographically based bidirectional authentication mechanisms

-
-
-
- - Cryptographic Bidirectional Network Authentication - IA-3(2) - Withdrawn - IA-3 (1) - - - Dynamic Address Allocation - - - - IA-3(3) - -

The organization:

- - (a) -

Standardizes dynamic address allocation lease information and the lease duration assigned to devices in accordance with ; and

-
- - (b) -

Audits lease information when assigned to a device.

-
-
- -

DHCP-enabled clients obtaining leases for IP addresses from DHCP servers, is a typical example of dynamic address allocation for devices.

- AU-2 - AU-3 - AU-6 - AU-12 -
- -

Determine if the organization:

- - IA-3(3)(a) - - IA-3(3)(a)[1] -

defines lease information to be employed to standardize dynamic address allocation for devices;

-
- - IA-3(3)(a)[2] -

defines lease duration to be employed to standardize dynamic address allocation for devices;

-
- - IA-3(3)(a)[3] -

standardizes dynamic address allocation of lease information assigned to devices in accordance with organization-defined lease information;

-
- - IA-3(3)(a)[4] -

standardizes dynamic address allocation of the lease duration assigned to devices in accordance with organization-defined lease duration; and

-
- IA-3(3)(a) -
- - IA-3(3)(b) -

audits lease information when assigned to a device.

- IA-3(3)(b) -
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing device identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

evidence of lease information and lease duration assigned to devices

-

device connection reports

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with operational responsibilities for device identification and authentication

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing device identification and authentication capability

-

automated mechanisms supporting and/or implementing dynamic address allocation

-

automated mechanisms supporting and/or implanting auditing of lease information

-
-
-
- - Device Attestation - - - - IA-3(4) - -

The organization ensures that device identification and authentication based on attestation is handled by .

-
- -

Device attestation refers to the identification and authentication of a device based on its configuration and known operating state. This might be determined via some cryptographic hash of the device. If device attestation is the means of identification and authentication, then it is important that patches and updates to the device are handled via a configuration management process such that the those patches/updates are done securely and at the same time do not disrupt the identification and authentication to other devices.

-
- -

Determine if the organization:

- - IA-3(4)[1] -

defines configuration management process to be employed to handle device identification and authentication based on attestation; and

-
- - IA-3(4)[2] -

ensures that device identification and authentication based on attestation is handled by organization-defined configuration management process.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing device identification and authentication

-

procedures addressing device configuration management

-

information system design documentation

-

information system configuration settings and associated documentation

-

configuration management records

-

change control records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with operational responsibilities for device identification and authentication

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing device identification and authentication capability

-

automated mechanisms supporting and/or implementing configuration management

-

cryptographic mechanisms supporting device attestation

-
-
-
-
- - Identifier Management - - - - - - - - - - IA-4 - -

The organization manages information system identifiers by:

- - a. -

Receiving authorization from to assign an individual, group, role, or device identifier;

-
- - b. -

Selecting an identifier that identifies an individual, group, role, or device;

-
- - c. -

Assigning the identifier to the intended individual, group, role, or device;

-
- - d. -

Preventing reuse of identifiers for ; and

-
- - e. -

Disabling the identifier after .

-
-
- -

Common device identifiers include, for example, media access control (MAC), Internet protocol (IP) addresses, or device-unique token identifiers. Management of individual identifiers is not applicable to shared information system accounts (e.g., guest and anonymous accounts). Typically, individual identifiers are the user names of the information system accounts assigned to those individuals. In such instances, the account management activities of AC-2 use account names provided by IA-4. This control also addresses individual identifiers not necessarily associated with information system accounts (e.g., identifiers used in physical security control databases accessed by badge reader systems for access to information systems). Preventing reuse of identifiers implies preventing the assignment of previously used individual, group, role, or device identifiers to different individuals, groups, roles, or devices.

- AC-2 - IA-2 - IA-3 - IA-5 - IA-8 - SC-37 -
- -

Determine if the organization manages information system identifiers by:

- - IA-4(a) - - IA-4(a)[1] -

defining personnel or roles from whom authorization must be received to assign:

- - IA-4(a)[1][a] -

an individual identifier;

-
- - IA-4(a)[1][b] -

a group identifier;

-
- - IA-4(a)[1][c] -

a role identifier; and/or

-
- - IA-4(a)[1][d] -

a device identifier;

-
-
- - IA-4(a)[2] -

receiving authorization from organization-defined personnel or roles to assign:

- - IA-4(a)[2][a] -

an individual identifier;

-
- - IA-4(a)[2][b] -

a group identifier;

-
- - IA-4(a)[2][c] -

a role identifier; and/or

-
- - IA-4(a)[2][d] -

a device identifier;

-
-
-
- - IA-4(b) -

selecting an identifier that identifies:

- - IA-4(b)[1] -

an individual;

-
- - IA-4(b)[2] -

a group;

-
- - IA-4(b)[3] -

a role; and/or

-
- - IA-4(b)[4] -

a device;

-
-
- - IA-4(c) -

assigning the identifier to the intended:

- - IA-4(c)[1] -

individual;

-
- - IA-4(c)[2] -

group;

-
- - IA-4(c)[3] -

role; and/or

-
- - IA-4(c)[4] -

device;

-
-
- - IA-4(d) - - IA-4(d)[1] -

defining a time period for preventing reuse of identifiers;

-
- - IA-4(d)[2] -

preventing reuse of identifiers for the organization-defined time period;

-
-
- - IA-4(e) - - IA-4(e)[1] -

defining a time period of inactivity to disable the identifier; and

-
- - IA-4(e)[2] -

disabling the identifier after the organization-defined time period of inactivity.

-
-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing identifier management

-

procedures addressing account management

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of information system accounts

-

list of identifiers generated from physical access control devices

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with identifier management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing identifier management

-
-
- - Prohibit Account Identifiers as Public Identifiers - IA-4(1) - -

The organization prohibits the use of information system account identifiers that are the same as public identifiers for individual electronic mail accounts.

-
- -

Prohibiting the use of information systems account identifiers that are the same as some public identifier such as the individual identifier section of an electronic mail address, makes it more difficult for adversaries to guess user identifiers on organizational information systems.

- AT-2 -
- -

Determine if the organization prohibits the use of information system account identifiers that are the same as public identifiers for individual electronic mail accounts.

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing identifier management

-

procedures addressing account management

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with identifier management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing identifier management

-
-
-
- - Supervisor Authorization - IA-4(2) - -

The organization requires that the registration process to receive an individual identifier includes supervisor authorization.

-
- -

Determine if the organization requires that the registration process to receive an individual identifier includes supervisor authorization.

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing identifier management

-

procedures addressing account management

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with identifier management responsibilities

-

supervisors responsible for authorizing identifier registration

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing identifier management

-
-
-
- - Multiple Forms of Certification - IA-4(3) - -

The organization requires multiple forms of certification of individual identification be presented to the registration authority.

-
- -

Requiring multiple forms of identification, such as documentary evidence or a combination of documents and biometrics, reduces the likelihood of individuals using fraudulent identification to establish an identity, or at least increases the work factor of potential adversaries.

-
- -

Determine if the organization requires multiple forms of certification of individual identification such as documentary evidence or a combination of documents and biometrics be presented to the registration authority.

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing identifier management

-

procedures addressing account management

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with identifier management responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing identifier management

-
-
-
- - Identify User Status - - - - IA-4(4) - -

The organization manages individual identifiers by uniquely identifying each individual as .

-
- -

Characteristics identifying the status of individuals include, for example, contractors and foreign nationals. Identifying the status of individuals by specific characteristics provides additional information about the people with whom organizational personnel are communicating. For example, it might be useful for a government employee to know that one of the individuals on an email message is a contractor.

- AT-2 -
- -

Determine if the organization:

- - IA-4(4)[1] -

defines a characteristic to be used to identify individual status; and

-
- - IA-4(4)[2] -

manages individual identifiers by uniquely identifying each individual as the organization-defined characteristic identifying individual status.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing identifier management

-

procedures addressing account management

-

list of characteristics identifying individual status

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with identifier management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing identifier management

-
-
-
- - Dynamic Management - IA-4(5) - -

The information system dynamically manages identifiers.

-
- -

In contrast to conventional approaches to identification which presume static accounts for preregistered users, many distributed information systems including, for example, service-oriented architectures, rely on establishing identifiers at run time for entities that were previously unknown. In these situations, organizations anticipate and provision for the dynamic establishment of identifiers. Preestablished trust relationships and mechanisms with appropriate authorities to validate identities and related credentials are essential.

- AC-16 -
- -

Determine if the information system dynamically manages identifiers.

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing identifier management

-

procedures addressing account management

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with identifier management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing dynamic identifier management

-
-
-
- - Cross-organization Management - - - - IA-4(6) - -

The organization coordinates with for cross-organization management of identifiers.

-
- -

Cross-organization identifier management provides the capability for organizations to appropriately identify individuals, groups, roles, or devices when conducting cross-organization activities involving the processing, storage, or transmission of information.

-
- -

Determine if the organization:

- - IA-4(6)[1] -

defines external organizations with whom to coordinate cross-organization management of identifiers; and

-
- - IA-4(6)[2] -

coordinates with organization-defined external organizations for cross-organization management of identifiers.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing identifier management

-

procedures addressing account management

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with identifier management responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing identifier management

-
-
-
- - In-person Registration - IA-4(7) - -

The organization requires that the registration process to receive an individual identifier be conducted in person before a designated registration authority.

-
- -

In-person registration reduces the likelihood of fraudulent identifiers being issued because it requires the physical presence of individuals and actual face-to-face interactions with designated registration authorities.

-
- -

Determine if the organization requires that the registration process to receive an individual identifier be conducted in person before a designated registration authority.

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing identifier management

-

procedures addressing account management

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with identifier management responsibilities

-

organizational personnel with information security responsibilities

-
-
-
- - FIPS Publication 201 - - NIST Special Publication 800-73 - - NIST Special Publication 800-76 - - NIST Special Publication 800-78 - -
- - Authenticator Management - - - - IA-5 - -

The organization manages information system authenticators by:

- - a. -

Verifying, as part of the initial authenticator distribution, the identity of the individual, group, role, or device receiving the authenticator;

-
- - b. -

Establishing initial authenticator content for authenticators defined by the organization;

-
- - c. -

Ensuring that authenticators have sufficient strength of mechanism for their intended use;

-
- - d. -

Establishing and implementing administrative procedures for initial authenticator distribution, for lost/compromised or damaged authenticators, and for revoking authenticators;

-
- - e. -

Changing default content of authenticators prior to information system installation;

-
- - f. -

Establishing minimum and maximum lifetime restrictions and reuse conditions for authenticators;

-
- - g. -

Changing/refreshing authenticators ;

-
- - h. -

Protecting authenticator content from unauthorized disclosure and modification;

-
- - i. -

Requiring individuals to take, and having devices implement, specific security safeguards to protect authenticators; and

-
- - j. -

Changing authenticators for group/role accounts when membership to those accounts changes.

-
-
- -

Individual authenticators include, for example, passwords, tokens, biometrics, PKI certificates, and key cards. Initial authenticator content is the actual content (e.g., the initial password) as opposed to requirements about authenticator content (e.g., minimum password length). In many cases, developers ship information system components with factory default authentication credentials to allow for initial installation and configuration. Default authentication credentials are often well known, easily discoverable, and present a significant security risk. The requirement to protect individual authenticators may be implemented via control PL-4 or PS-6 for authenticators in the possession of individuals and by controls AC-3, AC-6, and SC-28 for authenticators stored within organizational information systems (e.g., passwords stored in hashed or encrypted formats, files containing encrypted or hashed passwords accessible with administrator privileges). Information systems support individual authenticator management by organization-defined settings and restrictions for various authenticator characteristics including, for example, minimum password length, password composition, validation time window for time synchronous one-time tokens, and number of allowed rejections during the verification stage of biometric authentication. Specific actions that can be taken to safeguard authenticators include, for example, maintaining possession of individual authenticators, not loaning or sharing individual authenticators with others, and reporting lost, stolen, or compromised authenticators immediately. Authenticator management includes issuing and revoking, when no longer needed, authenticators for temporary access such as that required for remote maintenance. Device authenticators include, for example, certificates and passwords.

- AC-2 - AC-3 - AC-6 - CM-6 - IA-2 - IA-4 - IA-8 - PL-4 - PS-5 - PS-6 - SC-12 - SC-13 - SC-17 - SC-28 -
- -

Determine if the organization manages information system authenticators by:

- - IA-5(a) -

verifying, as part of the initial authenticator distribution, the identity of:

- - IA-5(a)[1] -

the individual receiving the authenticator;

-
- - IA-5(a)[2] -

the group receiving the authenticator;

-
- - IA-5(a)[3] -

the role receiving the authenticator; and/or

-
- - IA-5(a)[4] -

the device receiving the authenticator;

-
-
- - IA-5(b) -

establishing initial authenticator content for authenticators defined by the organization;

-
- - IA-5(c) -

ensuring that authenticators have sufficient strength of mechanism for their intended use;

-
- - IA-5(d) - - IA-5(d)[1] -

establishing and implementing administrative procedures for initial authenticator distribution;

-
- - IA-5(d)[2] -

establishing and implementing administrative procedures for lost/compromised or damaged authenticators;

-
- - IA-5(d)[3] -

establishing and implementing administrative procedures for revoking authenticators;

-
-
- - IA-5(e) -

changing default content of authenticators prior to information system installation;

-
- - IA-5(f) - - IA-5(f)[1] -

establishing minimum lifetime restrictions for authenticators;

-
- - IA-5(f)[2] -

establishing maximum lifetime restrictions for authenticators;

-
- - IA-5(f)[3] -

establishing reuse conditions for authenticators;

-
-
- - IA-5(g) - - IA-5(g)[1] -

defining a time period (by authenticator type) for changing/refreshing authenticators;

-
- - IA-5(g)[2] -

changing/refreshing authenticators with the organization-defined time period by authenticator type;

-
-
- - IA-5(h) -

protecting authenticator content from unauthorized:

- - IA-5(h)[1] -

disclosure;

-
- - IA-5(h)[2] -

modification;

-
-
- - IA-5(i) - - IA-5(i)[1] -

requiring individuals to take specific security safeguards to protect authenticators;

-
- - IA-5(i)[2] -

having devices implement specific security safeguards to protect authenticators; and

-
-
- - IA-5(j) -

changing authenticators for group/role accounts when membership to those accounts changes.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing authenticator management

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of information system authenticator types

-

change control records associated with managing information system authenticators

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with authenticator management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing authenticator management capability

-
-
- - Password-based Authentication - - - - - - - - - - - - - IA-5(1) - -

The information system, for password-based authentication:

- - (a) -

Enforces minimum password complexity of ;

-
- - (b) -

Enforces at least the following number of changed characters when new passwords are created: ;

-
- - (c) -

Stores and transmits only cryptographically-protected passwords;

-
- - (d) -

Enforces password minimum and maximum lifetime restrictions of ;

-
- - (e) -

Prohibits password reuse for generations; and

-
- - (f) -

Allows the use of a temporary password for system logons with an immediate change to a permanent password.

-
-
- -

This control enhancement applies to single-factor authentication of individuals using passwords as individual or group authenticators, and in a similar manner, when passwords are part of multifactor authenticators. This control enhancement does not apply when passwords are used to unlock hardware authenticators (e.g., Personal Identity Verification cards). The implementation of such password mechanisms may not meet all of the requirements in the enhancement. Cryptographically-protected passwords include, for example, encrypted versions of passwords and one-way cryptographic hashes of passwords. The number of changed characters refers to the number of changes required with respect to the total number of positions in the current password. Password lifetime restrictions do not apply to temporary passwords. To mitigate certain brute force attacks against passwords, organizations may also consider salting passwords.

- IA-6 -
- -

Determine if, for password-based authentication:

- - IA-5(1)(a) - - IA-5(1)(a)[1] -

the organization defines requirements for case sensitivity;

-
- - IA-5(1)(a)[2] -

the organization defines requirements for number of characters;

-
- - IA-5(1)(a)[3] -

the organization defines requirements for the mix of upper-case letters, lower-case letters, numbers and special characters;

-
- - IA-5(1)(a)[4] -

the organization defines minimum requirements for each type of character;

-
- - IA-5(1)(a)[5] -

the information system enforces minimum password complexity of organization-defined requirements for case sensitivity, number of characters, mix of upper-case letters, lower-case letters, numbers, and special characters, including minimum requirements for each type;

-
- IA-5(1)(a) -
- - IA-5(1)(b) - - IA-5(1)(b)[1] -

the organization defines a minimum number of changed characters to be enforced when new passwords are created;

-
- - IA-5(1)(b)[2] -

the information system enforces at least the organization-defined minimum number of characters that must be changed when new passwords are created;

-
- IA-5(1)(b) -
- - IA-5(1)(c) -

the information system stores and transmits only encrypted representations of passwords;

- IA-5(1)(c) -
- - IA-5(1)(d) - - IA-5(1)(d)[1] -

the organization defines numbers for password minimum lifetime restrictions to be enforced for passwords;

-
- - IA-5(1)(d)[2] -

the organization defines numbers for password maximum lifetime restrictions to be enforced for passwords;

-
- - IA-5(1)(d)[3] -

the information system enforces password minimum lifetime restrictions of organization-defined numbers for lifetime minimum;

-
- - IA-5(1)(d)[4] -

the information system enforces password maximum lifetime restrictions of organization-defined numbers for lifetime maximum;

-
- IA-5(1)(d) -
- - IA-5(1)(e) - - IA-5(1)(e)[1] -

the organization defines the number of password generations to be prohibited from password reuse;

-
- - IA-5(1)(e)[2] -

the information system prohibits password reuse for the organization-defined number of generations; and

-
- IA-5(1)(e) -
- - IA-5(1)(f) -

the information system allows the use of a temporary password for system logons with an immediate change to a permanent password.

- IA-5(1)(f) -
-
- - EXAMINE - -

Identification and authentication policy

-

password policy

-

procedures addressing authenticator management

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

password configurations and associated documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with authenticator management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing password-based authenticator management capability

-
-
-
- - Pki-based Authentication - IA-5(2) - -

The information system, for PKI-based authentication:

- - (a) -

Validates certifications by constructing and verifying a certification path to an accepted trust anchor including checking certificate status information;

-
- - (b) -

Enforces authorized access to the corresponding private key;

-
- - (c) -

Maps the authenticated identity to the account of the individual or group; and

-
- - (d) -

Implements a local cache of revocation data to support path discovery and validation in case of inability to access revocation information via the network.

-
-
- -

Status information for certification paths includes, for example, certificate revocation lists or certificate status protocol responses. For PIV cards, validation of certifications involves the construction and verification of a certification path to the Common Policy Root trust anchor including certificate policy processing.

- IA-6 -
- -

Determine if the information system, for PKI-based authentication:

- - IA-5(2)(a) - - IA-5(2)(a)[1] -

validates certifications by constructing a certification path to an accepted trust anchor;

-
- - IA-5(2)(a)[2] -

validates certifications by verifying a certification path to an accepted trust anchor;

-
- - IA-5(2)(a)[3] -

includes checking certificate status information when constructing and verifying the certification path;

-
- IA-5(2)(a) -
- - IA-5(2)(b) -

enforces authorized access to the corresponding private key;

- IA-5(2)(b) -
- - IA-5(2)(c) -

maps the authenticated identity to the account of the individual or group; and

- IA-5(2)(c) -
- - IA-5(2)(d) -

implements a local cache of revocation data to support path discovery and validation in case of inability to access revocation information via the network.

- IA-5(2)(d) -
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing authenticator management

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

PKI certification validation records

-

PKI certification revocation lists

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with PKI-based, authenticator management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing PKI-based, authenticator management capability

-
-
-
- - In-person or Trusted Third-party Registration - - - - - - - - - - - - - IA-5(3) - -

The organization requires that the registration process to receive be conducted before with authorization by .

-
- -

Determine if the organization:

- - IA-5(3)[1] -

defines types of and/or specific authenticators to be received in person or by a trusted third party;

-
- - IA-5(3)[2] -

defines the registration authority with oversight of the registration process for receipt of organization-defined types of and/or specific authenticators;

-
- - IA-5(3)[3] -

defines personnel or roles responsible for authorizing organization-defined registration authority;

-
- - IA-5(3)[4] -

defines if the registration process is to be conducted:

- - IA-5(3)[4][a] -

in person; or

-
- - IA-5(3)[4][b] -

by a trusted third party; and

-
-
- - IA-5(3)[5] -

requires that the registration process to receive organization-defined types of and/or specific authenticators be conducted in person or by a trusted third party before organization-defined registration authority with authorization by organization-defined personnel or roles.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing authenticator management

-

registration process for receiving information system authenticators

-

list of authenticators requiring in-person registration

-

list of authenticators requiring trusted third party registration

-

authenticator registration documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with authenticator management responsibilities

-

registration authority

-

organizational personnel with information security responsibilities

-
-
-
- - Automated Support for Password Strength Determination - - - - IA-5(4) - -

The organization employs automated tools to determine if password authenticators are sufficiently strong to satisfy .

-
- -

This control enhancement focuses on the creation of strong passwords and the characteristics of such passwords (e.g., complexity) prior to use, the enforcement of which is carried out by organizational information systems in IA-5 (1).

- CA-2 - CA-7 - RA-5 -
- -

Determine if the organization:

- - IA-5(4)[1] -

defines requirements to be satisfied by password authenticators; and

-
- - IA-5(4)[2] -

employs automated tools to determine if password authenticators are sufficiently strong to satisfy organization-defined requirements.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing authenticator management

-

information system design documentation

-

information system configuration settings and associated documentation

-

automated tools for evaluating password authenticators

-

password strength assessment results

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with authenticator management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing password-based authenticator management capability

-

automated tools for determining password strength

-
-
-
- - Change Authenticators Prior to Delivery - IA-5(5) - -

The organization requires developers/installers of information system components to provide unique authenticators or change default authenticators prior to delivery/installation.

-
- -

This control enhancement extends the requirement for organizations to change default authenticators upon information system installation, by requiring developers and/or installers to provide unique authenticators or change default authenticators for system components prior to delivery and/or installation. However, it typically does not apply to the developers of commercial off-the-shelve information technology products. Requirements for unique authenticators can be included in acquisition documents prepared by organizations when procuring information systems or system components.

-
- -

Determine if the organization requires developers/installers of information system components to:

- - IA-5(5)[1] -

provide unique authenticators prior to delivery/installation; or

-
- - IA-5(5)[2] -

change default authenticators prior to delivery/installation.

-
-
- - EXAMINE - -

Identification and authentication policy

-

system and services acquisition policy

-

procedures addressing authenticator management

-

procedures addressing the integration of security requirements into the acquisition process

-

acquisition documentation

-

acquisition contracts for information system procurements or services

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with authenticator management responsibilities

-

organizational personnel with information system security, acquisition, and contracting responsibilities

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing authenticator management capability

-
-
-
- - Protection of Authenticators - IA-5(6) - -

The organization protects authenticators commensurate with the security category of the information to which use of the authenticator permits access.

-
- -

For information systems containing multiple security categories of information without reliable physical or logical separation between categories, authenticators used to grant access to the systems are protected commensurate with the highest security category of information on the systems.

-
- -

Determine if the organization protects authenticators commensurate with the security category of the information to which use of the authenticator permits access.

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing authenticator management

-

security categorization documentation for the information system

-

security assessments of authenticator protections

-

risk assessment results

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with authenticator management responsibilities

-

organizational personnel implementing and/or maintaining authenticator protections

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing authenticator management capability

-

automated mechanisms protecting authenticators

-
-
-
- - No Embedded Unencrypted Static Authenticators - IA-5(7) - -

The organization ensures that unencrypted static authenticators are not embedded in applications or access scripts or stored on function keys.

-
- -

Organizations exercise caution in determining whether embedded or stored authenticators are in encrypted or unencrypted form. If authenticators are used in the manner stored, then those representations are considered unencrypted authenticators. This is irrespective of whether that representation is perhaps an encrypted version of something else (e.g., a password).

-
- -

Determine if the organization ensures that unencrypted static authenticators are not:

- - IA-5(7)[1] -

embedded in applications;

-
- - IA-5(7)[2] -

embedded in access scripts; or

-
- - IA-5(7)[3] -

stored on function keys.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing authenticator management

-

information system design documentation

-

information system configuration settings and associated documentation

-

logical access scripts

-

application code reviews for detecting unencrypted static authenticators

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with authenticator management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing authenticator management capability

-

automated mechanisms implementing authentication in applications

-
-
-
- - Multiple Information System Accounts - - - - IA-5(8) - -

The organization implements to manage the risk of compromise due to individuals having accounts on multiple information systems.

-
- -

When individuals have accounts on multiple information systems, there is the risk that the compromise of one account may lead to the compromise of other accounts if individuals use the same authenticators. Possible alternatives include, for example: (i) having different authenticators on all systems; (ii) employing some form of single sign-on mechanism; or (iii) including some form of one-time passwords on all systems.

-
- -

Determine if the organization:

- - IA-5(8)[1] -

defines security safeguards to manage the risk of compromise due to individuals having accounts on multiple information systems; and

-
- - IA-5(8)[2] -

implements organization-defined security safeguards to manage the risk of compromise due to individuals having accounts on multiple information systems.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing authenticator management

-

security plan

-

list of individuals having accounts on multiple information systems

-

list of security safeguards intended to manage risk of compromise due to individuals having accounts on multiple information systems

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with authenticator management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing safeguards for authenticator management

-
-
-
- - Cross-organization Credential Management - - - - IA-5(9) - -

The organization coordinates with for cross-organization management of credentials.

-
- -

Cross-organization management of credentials provides the capability for organizations to appropriately authenticate individuals, groups, roles, or devices when conducting cross-organization activities involving the processing, storage, or transmission of information.

-
- -

Determine if the organization:

- - IA-5(9)[1] -

defines external organizations with whom to coordinate cross-organizational management of credentials; and

-
- - IA-5(9)[2] -

coordinates with organization-defined external organizations for cross-organizational management of credentials.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing authenticator management

-

procedures addressing account management

-

security plan

-

information security agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with authenticator management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing safeguards for authenticator management

-
-
-
- - Dynamic Credential Association - IA-5(10) - -

The information system dynamically provisions identities.

-
- -

Authentication requires some form of binding between an identity and the authenticator used to confirm the identity. In conventional approaches, this binding is established by pre-provisioning both the identity and the authenticator to the information system. For example, the binding between a username (i.e., identity) and a password (i.e., authenticator) is accomplished by provisioning the identity and authenticator as a pair in the information system. New authentication techniques allow the binding between the identity and the authenticator to be implemented outside an information system. For example, with smartcard credentials, the identity and the authenticator are bound together on the card. Using these credentials, information systems can authenticate identities that have not been pre-provisioned, dynamically provisioning the identity after authentication. In these situations, organizations can anticipate the dynamic provisioning of identities. Preestablished trust relationships and mechanisms with appropriate authorities to validate identities and related credentials are essential.

-
- -

Determine if the information system dynamically provisions identifiers.

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing identifier management

-

security plan

-

information system design documentation

-

automated mechanisms providing dynamic binding of identifiers and authenticators

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with identifier management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms implementing identifier management capability

-

automated mechanisms implementing dynamic provisioning of identifiers

-
-
-
- - Hardware Token-based Authentication - - - - IA-5(11) - -

The information system, for hardware token-based authentication, employs mechanisms that satisfy .

-
- -

Hardware token-based authentication typically refers to the use of PKI-based tokens, such as the U.S. Government Personal Identity Verification (PIV) card. Organizations define specific requirements for tokens, such as working with a particular PKI.

-
- -

Determine if, for hardware token-based authentication:

- - IA-5(11)[1] -

the organization defines token quality requirements to be satisfied; and

-
- - IA-5(11)[2] -

the information system employs mechanisms that satisfy organization-defined token quality requirements.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing authenticator management

-

security plan

-

information system design documentation

-

automated mechanisms employing hardware token-based authentication for the information system

-

list of token quality requirements

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with authenticator management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing hardware token-based authenticator management capability

-
-
-
- - Biometric-based Authentication - - - - IA-5(12) - -

The information system, for biometric-based authentication, employs mechanisms that satisfy .

-
- -

Unlike password-based authentication which provides exact matches of user-input passwords to stored passwords, biometric authentication does not provide such exact matches. Depending upon the type of biometric and the type of collection mechanism, there is likely to be some divergence from the presented biometric and stored biometric which serves as the basis of comparison. There will likely be both false positives and false negatives when making such comparisons. The rate at which the false accept and false reject rates are equal is known as the crossover rate. Biometric quality requirements include, for example, acceptable crossover rates, as that essentially reflects the accuracy of the biometric.

-
- -

Determine if, for biometric-based authentication:

- - IA-5(12)[1] -

the organization defines biometric quality requirements to be satisfied; and

-
- - IA-5(12)[2] -

the information system employs mechanisms that satisfy organization-defined biometric quality requirements.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing authenticator management

-

security plan

-

information system design documentation

-

automated mechanisms employing biometric-based authentication for the information system

-

list of biometric quality requirements

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with authenticator management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing biometric-based authenticator management capability

-
-
-
- - Expiration of Cached Authenticators - - - - IA-5(13) - -

The information system prohibits the use of cached authenticators after .

-
- -

Determine if:

- - IA-5(13)[1] -

the organization defines the time period after which the information system is to prohibit the use of cached authenticators; and

-
- - IA-5(13)[2] -

the information system prohibits the use of cached authenticators after the organization-defined time period.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing authenticator management

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with authenticator management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing authenticator management capability

-
-
-
- - Managing Content of PKI Trust Stores - IA-5(14) - -

The organization, for PKI-based authentication, employs a deliberate organization-wide methodology for managing the content of PKI trust stores installed across all platforms including networks, operating systems, browsers, and applications.

-
- -

Determine if the organization, for PKI-based authentication, employs a deliberate organization-wide methodology for managing the content of PKI trust stores installed across all platforms including:

- - IA-5(14)[1] -

networks;

-
- - IA-5(14)[2] -

operating systems;

-
- - IA-5(14)[3] -

browsers; and

-
- - IA-5(14)[4] -

applications.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing authenticator management

-

security plan

-

organizational methodology for managing content of PKI trust stores across installed all platforms

-

information system design documentation

-

information system configuration settings and associated documentation

-

enterprise security architecture documentation

-

enterprise architecture documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with authenticator management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing PKI-based authenticator management capability

-

automated mechanisms supporting and/or implementing the PKI trust store capability

-
-
-
- - Ficam-approved Products and Services - IA-5(15) - -

The organization uses only FICAM-approved path discovery and validation products and services.

-
- -

Federal Identity, Credential, and Access Management (FICAM)-approved path discovery and validation products and services are those products and services that have been approved through the FICAM conformance program, where applicable.

-
- -

Determine if the organization uses only FICAM-approved path discovery and validation products and services.

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing identifier management

-

security plan

-

information system design documentation

-

automated mechanisms providing dynamic binding of identifiers and authenticators

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with identification and authentication management responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing account management capability

-

automated mechanisms supporting and/or implementing identification and authentication management capability for the information system

-
-
-
- - OMB Memorandum 04-04 - - OMB Memorandum 11-11 - - FIPS Publication 201 - - NIST Special Publication 800-73 - - NIST Special Publication 800-63 - - NIST Special Publication 800-76 - - NIST Special Publication 800-78 - - FICAM Roadmap and Implementation Guidance - - http://idmanagement.gov - -
- - Authenticator Feedback - IA-6 - -

The information system obscures feedback of authentication information during the authentication process to protect the information from possible exploitation/use by unauthorized individuals.

-
- -

The feedback from information systems does not provide information that would allow unauthorized individuals to compromise authentication mechanisms. For some types of information systems or system components, for example, desktops/notebooks with relatively large monitors, the threat (often referred to as shoulder surfing) may be significant. For other types of systems or components, for example, mobile devices with 2-4 inch screens, this threat may be less significant, and may need to be balanced against the increased likelihood of typographic input errors due to the small keyboards. Therefore, the means for obscuring the authenticator feedback is selected accordingly. Obscuring the feedback of authentication information includes, for example, displaying asterisks when users type passwords into input devices, or displaying feedback for a very limited time before fully obscuring it.

- PE-18 -
- -

Determine if the information system obscures feedback of authentication information during the authentication process to protect the information from possible exploitation/use by unauthorized individuals.

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing authenticator feedback

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing the obscuring of feedback of authentication information during authentication

-
-
-
- - Cryptographic Module Authentication - IA-7 - -

The information system implements mechanisms for authentication to a cryptographic module that meet the requirements of applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance for such authentication.

-
- -

Authentication mechanisms may be required within a cryptographic module to authenticate an operator accessing the module and to verify that the operator is authorized to assume the requested role and perform services within that role.

- SC-12 - SC-13 -
- -

Determine if the information system implements mechanisms for authentication to a cryptographic module that meet the requirements of applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance for such authentication.

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing cryptographic module authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for cryptographic module authentication

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing cryptographic module authentication

-
-
- - FIPS Publication 140 - - http://csrc.nist.gov/groups/STM/cmvp/index.html - -
- - Identification and Authentication (non-organizational Users) - IA-8 - -

The information system uniquely identifies and authenticates non-organizational users (or processes acting on behalf of non-organizational users).

-
- -

Non-organizational users include information system users other than organizational users explicitly covered by IA-2. These individuals are uniquely identified and authenticated for accesses other than those accesses explicitly identified and documented in AC-14. In accordance with the E-Authentication E-Government initiative, authentication of non-organizational users accessing federal information systems may be required to protect federal, proprietary, or privacy-related information (with exceptions noted for national security systems). Organizations use risk assessments to determine authentication needs and consider scalability, practicality, and security in balancing the need to ensure ease of use for access to federal information and information systems with the need to protect and adequately mitigate risk. IA-2 addresses identification and authentication requirements for access to information systems by organizational users.

- AC-2 - AC-14 - AC-17 - AC-18 - IA-2 - IA-4 - IA-5 - MA-4 - RA-3 - SA-12 - SC-8 -
- -

Determine if the information system uniquely identifies and authenticates non-organizational users (or processes acting on behalf of non-organizational users).

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing user identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of information system accounts

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

organizational personnel with account management responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing identification and authentication capability

-
-
- - Acceptance of PIV Credentials from Other Agencies - IA-8(1) - -

The information system accepts and electronically verifies Personal Identity Verification (PIV) credentials from other federal agencies.

-
- -

This control enhancement applies to logical access control systems (LACS) and physical access control systems (PACS). Personal Identity Verification (PIV) credentials are those credentials issued by federal agencies that conform to FIPS Publication 201 and supporting guidance documents. OMB Memorandum 11-11 requires federal agencies to continue implementing the requirements specified in HSPD-12 to enable agency-wide use of PIV credentials.

- AU-2 - PE-3 - SA-4 -
- -

Determine if the information system:

- - IA-8(1)[1] -

accepts Personal Identity Verification (PIV) credentials from other agencies; and

-
- - IA-8(1)[2] -

electronically verifies Personal Identity Verification (PIV) credentials from other agencies.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing user identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

PIV verification records

-

evidence of PIV credentials

-

PIV credential authorizations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-

organizational personnel with account management responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing identification and authentication capability

-

automated mechanisms that accept and verify PIV credentials

-
-
-
- - Acceptance of Third-party Credentials - IA-8(2) - -

The information system accepts only FICAM-approved third-party credentials.

-
- -

This control enhancement typically applies to organizational information systems that are accessible to the general public, for example, public-facing websites. Third-party credentials are those credentials issued by nonfederal government entities approved by the Federal Identity, Credential, and Access Management (FICAM) Trust Framework Solutions initiative. Approved third-party credentials meet or exceed the set of minimum federal government-wide technical, security, privacy, and organizational maturity requirements. This allows federal government relying parties to trust such credentials at their approved assurance levels.

- AU-2 -
- -

Determine if the information system accepts only FICAM-approved third-party credentials.

-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing user identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of FICAM-approved, third-party credentialing products, components, or services procured and implemented by organization

-

third-party credential verification records

-

evidence of FICAM-approved third-party credentials

-

third-party credential authorizations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-

organizational personnel with account management responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing identification and authentication capability

-

automated mechanisms that accept FICAM-approved credentials

-
-
-
- - Use of Ficam-approved Products - - - - IA-8(3) - -

The organization employs only FICAM-approved information system components in to accept third-party credentials.

-
- -

This control enhancement typically applies to information systems that are accessible to the general public, for example, public-facing websites. FICAM-approved information system components include, for example, information technology products and software libraries that have been approved by the Federal Identity, Credential, and Access Management conformance program.

- SA-4 -
- -

Determine if the organization:

- - IA-8(3)[1] -

defines information systems in which only FICAM-approved information system components are to be employed to accept third-party credentials; and

-
- - IA-8(3)[2] -

employs only FICAM-approved information system components in organization-defined information systems to accept third-party credentials.

-
-
- - EXAMINE - -

Identification and authentication policy

-

system and services acquisition policy

-

procedures addressing user identification and authentication

-

procedures addressing the integration of security requirements into the acquisition process

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

third-party credential validations

-

third-party credential authorizations

-

third-party credential records

-

list of FICAM-approved information system components procured and implemented by organization

-

acquisition documentation

-

acquisition contracts for information system procurements or services

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

system/network administrators

-

organizational personnel with account management responsibilities

-

organizational personnel with information system security, acquisition, and contracting responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing identification and authentication capability

-
-
-
- - Use of Ficam-issued Profiles - IA-8(4) - -

The information system conforms to FICAM-issued profiles.

-
- -

This control enhancement addresses open identity management standards. To ensure that these standards are viable, robust, reliable, sustainable (e.g., available in commercial information technology products), and interoperable as documented, the United States Government assesses and scopes identity management standards and technology implementations against applicable federal legislation, directives, policies, and requirements. The result is FICAM-issued implementation profiles of approved protocols (e.g., FICAM authentication protocols such as SAML 2.0 and OpenID 2.0, as well as other protocols such as the FICAM Backend Attribute Exchange).

- SA-4 -
- -

Determine if the information system conforms to FICAM-issued profiles.

-
- - EXAMINE - -

Identification and authentication policy

-

system and services acquisition policy

-

procedures addressing user identification and authentication

-

procedures addressing the integration of security requirements into the acquisition process

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of FICAM-issued profiles and associated, approved protocols

-

acquisition documentation

-

acquisition contracts for information system procurements or services

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-

organizational personnel with account management responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing identification and authentication capability

-

automated mechanisms supporting and/or implementing conformance with FICAM-issued profiles

-
-
-
- - Acceptance of PIV-I Credentials - IA-8(5) - -

The information system accepts and electronically verifies Personal Identity Verification-I (PIV-I) credentials.

-
- -

This control enhancement: (i) applies to logical and physical access control systems; and (ii) addresses Non-Federal Issuers (NFIs) of identity cards that desire to interoperate with United States Government Personal Identity Verification (PIV) information systems and that can be trusted by federal government-relying parties. The X.509 certificate policy for the Federal Bridge Certification Authority (FBCA) addresses PIV-I requirements. The PIV-I card is suitable for Assurance Level 4 as defined in OMB Memorandum 04-04 and NIST Special Publication 800-63, and multifactor authentication as defined in NIST Special Publication 800-116. PIV-I credentials are those credentials issued by a PIV-I provider whose PIV-I certificate policy maps to the Federal Bridge PIV-I Certificate Policy. A PIV-I provider is cross-certified (directly or through another PKI bridge) with the FBCA with policies that have been mapped and approved as meeting the requirements of the PIV-I policies defined in the FBCA certificate policy.

- AU-2 -
- -

Determine if the information system:

- - IA-8(5)[1] -

accepts Personal Identity Verification-I (PIV-I) credentials; and

-
- - IA-8(5)[2] -

electronically verifies Personal Identity Verification-I (PIV-I) credentials.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing user identification and authentication

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

PIV-I verification records

-

evidence of PIV-I credentials

-

PIV-I credential authorizations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-

organizational personnel with account management responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing identification and authentication capability

-

automated mechanisms that accept and verify PIV-I credentials

-
-
-
- - OMB Memorandum 04-04 - - OMB Memorandum 11-11 - - OMB Memorandum 10-06-2011 - - FICAM Roadmap and Implementation Guidance - - FIPS Publication 201 - - NIST Special Publication 800-63 - - NIST Special Publication 800-116 - - National Strategy for Trusted Identities in Cyberspace - - http://idmanagement.gov - -
- - Service Identification and Authentication - - - - - - - IA-9 - -

The organization identifies and authenticates using .

-
- -

This control supports service-oriented architectures and other distributed architectural approaches requiring the identification and authentication of information system services. In such architectures, external services often appear dynamically. Therefore, information systems should be able to determine in a dynamic manner, if external providers and associated services are authentic. Safeguards implemented by organizational information systems to validate provider and service authenticity include, for example, information or code signing, provenance graphs, and/or electronic signatures indicating or including the sources of services.

-
- -

Determine if the organization:

- - IA-9[1] -

defines information system services to be identified and authenticated using security safeguards;

-
- - IA-9[2] -

defines security safeguards to be used to identify and authenticate organization-defined information system services; and

-
- - IA-9[3] -

identifies and authenticates organization-defined information system services using organization-defined security safeguards.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing service identification and authentication

-

security plan

-

information system design documentation

-

security safeguards used to identify and authenticate information system services

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-

organizational personnel with identification and authentication responsibilities

-
-
- - TEST - -

Security safeguards implementing service identification and authentication capability

-
-
- - Information Exchange - IA-9(1) - -

The organization ensures that service providers receive, validate, and transmit identification and authentication information.

-
- -

Determine if the organization ensures that service providers:

- - IA-9(1)[1] -

receive identification and authentication information;

-
- - IA-9(1)[2] -

validate identification and authentication information; and

-
- - IA-9(1)[3] -

transmit identification and authentication information.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing service identification and authentication

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with identification and authentication responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

service providers

-
-
- - TEST - -

Automated mechanisms implementing service identification and authentication capabilities

-
-
-
- - Transmission of Decisions - - - - IA-9(2) - -

The organization ensures that identification and authentication decisions are transmitted between consistent with organizational policies.

-
- -

For distributed architectures (e.g., service-oriented architectures), the decisions regarding the validation of identification and authentication claims may be made by services separate from the services acting on those decisions. In such situations, it is necessary to provide the identification and authentication decisions (as opposed to the actual identifiers and authenticators) to the services that need to act on those decisions.

- SC-8 -
- -

Determine if the organization:

- - IA-9(2)[1] -

defines services for which identification and authentication decisions transmitted between such services are to be consistent with organizational policies; and

-
- - IA-9(2)[2] -

ensures that identification and authentication decisions are transmitted between organization-defined services consistent with organizational policies.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing service identification and authentication

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

transmission records

-

transmission verification records

-

rules for identification and authentication transmission decisions between organizational services

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with identification and authentication responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms implementing service identification and authentication capabilities

-
-
-
-
- - Adaptive Identification and Authentication - - - - - - - IA-10 - -

The organization requires that individuals accessing the information system employ under specific .

-
- -

Adversaries may compromise individual authentication mechanisms and subsequently attempt to impersonate legitimate users. This situation can potentially occur with any authentication mechanisms employed by organizations. To address this threat, organizations may employ specific techniques/mechanisms and establish protocols to assess suspicious behavior (e.g., individuals accessing information that they do not typically access as part of their normal duties, roles, or responsibilities, accessing greater quantities of information than the individuals would routinely access, or attempting to access information from suspicious network addresses). In these situations when certain preestablished conditions or triggers occur, organizations can require selected individuals to provide additional authentication information. Another potential use for adaptive identification and authentication is to increase the strength of mechanism based on the number and/or types of records being accessed.

- AU-6 - SI-4 -
- -

Determine if the organization:

- - IA-10[1] -

defines specific circumstances or situations that require individuals accessing the information system to employ supplemental authentication techniques or mechanisms;

-
- - IA-10[2] -

defines supplemental authentication techniques or mechanisms to be employed when accessing the information system under specific organization-defined circumstances or situations; and

-
- - IA-10[3] -

requires that individuals accessing the information system employ organization-defined supplemental authentication techniques or mechanisms under specific organization-defined circumstances or situations.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing adaptive/ supplemental identification and authentication techniques or mechanisms

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

supplemental identification and authentication techniques or mechanisms

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-

organizational personnel with identification and authentication responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing identification and authentication capability

-
-
-
- - Re-authentication - - - - IA-11 - -

The organization requires users and devices to re-authenticate when .

-
- -

In addition to the re-authentication requirements associated with session locks, organizations may require re-authentication of individuals and/or devices in other situations including, for example: (i) when authenticators change; (ii), when roles change; (iii) when security categories of information systems change; (iv), when the execution of privileged functions occurs; (v) after a fixed period of time; or (vi) periodically.

- AC-11 -
- -

Determine if the organization:

- - IA-11[1] -

defines circumstances or situations requiring re-authentication;

-
- - IA-11[2] -

requires users to re-authenticate when organization-defined circumstances or situations require re-authentication; and

-
- - IA-11[3] -

requires devices to re-authenticate when organization-defined circumstances or situations require re-authentication.

-
-
- - EXAMINE - -

Identification and authentication policy

-

procedures addressing user and device re-authentication

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of circumstances or situations requiring re-authentication

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system operations responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-

organizational personnel with identification and authentication responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing identification and authentication capability

-
-
-
-
- - Incident Response - - Incident Response Policy and Procedures - - - - - - - - - - IR-1 - -

The organization:

- - a. -

Develops, documents, and disseminates to :

- - 1. -

An incident response policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and

-
- - 2. -

Procedures to facilitate the implementation of the incident response policy and associated incident response controls; and

-
-
- - b. -

Reviews and updates the current:

- - 1. -

Incident response policy ; and

-
- - 2. -

Incident response procedures .

-
-
-
- -

This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the IR family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures.

- PM-9 -
- -

Determine if the organization:

- - IR-1(a) - - IR-1(a)(1) - - IR-1(a)(1)[1] -

develops and documents an incident response policy that addresses:

- - IR-1(a)(1)[1][a] -

purpose;

-
- - IR-1(a)(1)[1][b] -

scope;

-
- - IR-1(a)(1)[1][c] -

roles;

-
- - IR-1(a)(1)[1][d] -

responsibilities;

-
- - IR-1(a)(1)[1][e] -

management commitment;

-
- - IR-1(a)(1)[1][f] -

coordination among organizational entities;

-
- - IR-1(a)(1)[1][g] -

compliance;

-
-
- - IR-1(a)(1)[2] -

defines personnel or roles to whom the incident response policy is to be disseminated;

-
- - IR-1(a)(1)[3] -

disseminates the incident response policy to organization-defined personnel or roles;

-
-
- - IR-1(a)(2) - - IR-1(a)(2)[1] -

develops and documents procedures to facilitate the implementation of the incident response policy and associated incident response controls;

-
- - IR-1(a)(2)[2] -

defines personnel or roles to whom the procedures are to be disseminated;

-
- - IR-1(a)(2)[3] -

disseminates the procedures to organization-defined personnel or roles;

-
-
-
- - IR-1(b) - - IR-1(b)(1) - - IR-1(b)(1)[1] -

defines the frequency to review and update the current incident response policy;

-
- - IR-1(b)(1)[2] -

reviews and updates the current incident response policy with the organization-defined frequency;

-
-
- - IR-1(b)(2) - - IR-1(b)(2)[1] -

defines the frequency to review and update the current incident response procedures; and

-
- - IR-1(b)(2)[2] -

reviews and updates the current incident response procedures with the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

Incident response policy and procedures

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident response responsibilities

-

organizational personnel with information security responsibilities

-
-
- - NIST Special Publication 800-12 - - NIST Special Publication 800-61 - - NIST Special Publication 800-83 - - NIST Special Publication 800-100 - -
- - Incident Response Training - - - - - - - IR-2 - -

The organization provides incident response training to information system users consistent with assigned roles and responsibilities:

- - a. -

Within of assuming an incident response role or responsibility;

-
- - b. -

When required by information system changes; and

-
- - c. -

- thereafter.

-
-
- -

Incident response training provided by organizations is linked to the assigned roles and responsibilities of organizational personnel to ensure the appropriate content and level of detail is included in such training. For example, regular users may only need to know who to call or how to recognize an incident on the information system; system administrators may require additional training on how to handle/remediate incidents; and incident responders may receive more specific training on forensics, reporting, system recovery, and restoration. Incident response training includes user training in the identification and reporting of suspicious activities, both from external and internal sources.

- AT-3 - CP-3 - IR-8 -
- -

Determine if the organization:

- - IR-2(a) - - IR-2(a)[1] -

defines a time period within which incident response training is to be provided to information system users assuming an incident response role or responsibility;

-
- - IR-2(a)[2] -

provides incident response training to information system users consistent with assigned roles and responsibilities within the organization-defined time period of assuming an incident response role or responsibility;

-
-
- - IR-2(b) -

provides incident response training to information system users consistent with assigned roles and responsibilities when required by information system changes;

-
- - IR-2(c) - - IR-2(c)[1] -

defines the frequency to provide refresher incident response training to information system users consistent with assigned roles or responsibilities; and

-
- - IR-2(c)[2] -

after the initial incident response training, provides refresher incident response training to information system users consistent with assigned roles and responsibilities in accordance with the organization-defined frequency to provide refresher training.

-
-
-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident response training

-

incident response training curriculum

-

incident response training materials

-

security plan

-

incident response plan

-

security plan

-

incident response training records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident response training and operational responsibilities

-

organizational personnel with information security responsibilities

-
-
- - Simulated Events - IR-2(1) - -

The organization incorporates simulated events into incident response training to facilitate effective response by personnel in crisis situations.

-
- -

Determine if the organization incorporates simulated events into incident response training to facilitate effective response by personnel in crisis situations.

-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident response training

-

incident response training curriculum

-

incident response training materials

-

incident response plan

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident response training and operational responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms that support and/or implement simulated events for incident response training

-
-
-
- - Automated Training Environments - IR-2(2) - -

The organization employs automated mechanisms to provide a more thorough and realistic incident response training environment.

-
- -

Determine if the organization employs automated mechanisms to provide a more thorough and realistic incident response training environment.

-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident response training

-

incident response training curriculum

-

incident response training materials

-

automated mechanisms supporting incident response training

-

incident response plan

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident response training and operational responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms that provide a thorough and realistic incident response training environment

-
-
-
- - NIST Special Publication 800-16 - - NIST Special Publication 800-50 - -
- - Incident Response Testing - - - - - - - IR-3 - -

The organization tests the incident response capability for the information system using to determine the incident response effectiveness and documents the results.

-
- -

Organizations test incident response capabilities to determine the overall effectiveness of the capabilities and to identify potential weaknesses or deficiencies. Incident response testing includes, for example, the use of checklists, walk-through or tabletop exercises, simulations (parallel/full interrupt), and comprehensive exercises. Incident response testing can also include a determination of the effects on organizational operations (e.g., reduction in mission capabilities), organizational assets, and individuals due to incident response.

- CP-4 - IR-8 -
- -

Determine if the organization:

- - IR-3[1] -

defines incident response tests to test the incident response capability for the information system;

-
- - IR-3[2] -

defines the frequency to test the incident response capability for the information system; and

-
- - IR-3[3] -

tests the incident response capability for the information system with the organization-defined frequency, using organization-defined tests to determine the incident response effectiveness and documents the results.

-
-
- - EXAMINE - -

Incident response policy

-

contingency planning policy

-

procedures addressing incident response testing

-

procedures addressing contingency plan testing

-

incident response testing material

-

incident response test results

-

incident response test plan

-

incident response plan

-

contingency plan

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident response testing responsibilities

-

organizational personnel with information security responsibilities

-
-
- - Automated Testing - IR-3(1) - -

The organization employs automated mechanisms to more thoroughly and effectively test the incident response capability.

-
- -

Organizations use automated mechanisms to more thoroughly and effectively test incident response capabilities, for example: (i) by providing more complete coverage of incident response issues; (ii) by selecting more realistic test scenarios and test environments; and (iii) by stressing the response capability.

- AT-2 -
- -

Determine if the organization employs automated mechanisms to more thoroughly and effectively test the incident response capability.

-
- - EXAMINE - -

Incident response policy

-

contingency planning policy

-

procedures addressing incident response testing

-

procedures addressing contingency plan testing

-

incident response testing documentation

-

incident response test results

-

incident response test plan

-

incident response plan

-

contingency plan

-

security plan

-

automated mechanisms supporting incident response tests

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident response testing responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms that more thoroughly and effectively test the incident response capability

-
-
-
- - Coordination with Related Plans - IR-3(2) - -

The organization coordinates incident response testing with organizational elements responsible for related plans.

-
- -

Organizational plans related to incident response testing include, for example, Business Continuity Plans, Contingency Plans, Disaster Recovery Plans, Continuity of Operations Plans, Crisis Communications Plans, Critical Infrastructure Plans, and Occupant Emergency Plans.

-
- -

Determine if the organization coordinates incident response testing with organizational elements responsible for related plans.

-
- - EXAMINE - -

Incident response policy

-

contingency planning policy

-

procedures addressing incident response testing

-

incident response testing documentation

-

incident response plan

-

business continuity plans

-

contingency plans

-

disaster recovery plans

-

continuity of operations plans

-

crisis communications plans

-

critical infrastructure plans

-

occupant emergency plans

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident response testing responsibilities

-

organizational personnel with responsibilities for testing organizational plans related to incident response testing

-

organizational personnel with information security responsibilities

-
-
-
- - NIST Special Publication 800-84 - - NIST Special Publication 800-115 - -
- - Incident Handling - IR-4 - -

The organization:

- - a. -

Implements an incident handling capability for security incidents that includes preparation, detection and analysis, containment, eradication, and recovery;

-
- - b. -

Coordinates incident handling activities with contingency planning activities; and

-
- - c. -

Incorporates lessons learned from ongoing incident handling activities into incident response procedures, training, and testing, and implements the resulting changes accordingly.

-
-
- -

Organizations recognize that incident response capability is dependent on the capabilities of organizational information systems and the mission/business processes being supported by those systems. Therefore, organizations consider incident response as part of the definition, design, and development of mission/business processes and information systems. Incident-related information can be obtained from a variety of sources including, for example, audit monitoring, network monitoring, physical access monitoring, user/administrator reports, and reported supply chain events. Effective incident handling capability includes coordination among many organizational entities including, for example, mission/business owners, information system owners, authorizing officials, human resources offices, physical and personnel security offices, legal departments, operations personnel, procurement offices, and the risk executive (function).

- AU-6 - CM-6 - CP-2 - CP-4 - IR-2 - IR-3 - IR-8 - PE-6 - SC-5 - SC-7 - SI-3 - SI-4 - SI-7 -
- -

Determine if the organization:

- - IR-4(a) -

implements an incident handling capability for security incidents that includes:

- - IR-4(a)[1] -

preparation;

-
- - IR-4(a)[2] -

detection and analysis;

-
- - IR-4(a)[3] -

containment;

-
- - IR-4(a)[4] -

eradication;

-
- - IR-4(a)[5] -

recovery;

-
-
- - IR-4(b) -

coordinates incident handling activities with contingency planning activities;

-
- - IR-4(c) - - IR-4(c)[1] -

incorporates lessons learned from ongoing incident handling activities into:

- - IR-4(c)[1][a] -

incident response procedures;

-
- - IR-4(c)[1][b] -

training;

-
- - IR-4(c)[1][c] -

testing/exercises;

-
-
- - IR-4(c)[2] -

implements the resulting changes accordingly to:

- - IR-4(c)[2][a] -

incident response procedures;

-
- - IR-4(c)[2][b] -

training; and

-
- - IR-4(c)[2][c] -

testing/exercises.

-
-
-
-
- - EXAMINE - -

Incident response policy

-

contingency planning policy

-

procedures addressing incident handling

-

incident response plan

-

contingency plan

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident handling responsibilities

-

organizational personnel with contingency planning responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Incident handling capability for the organization

-
-
- - Automated Incident Handling Processes - IR-4(1) - -

The organization employs automated mechanisms to support the incident handling process.

-
- -

Automated mechanisms supporting incident handling processes include, for example, online incident management systems.

-
- -

Determine if the organization employs automated mechanisms to support the incident handling process.

-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident handling

-

automated mechanisms supporting incident handling

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

incident response plan

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident handling responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms that support and/or implement the incident handling process

-
-
-
- - Dynamic Reconfiguration - - - - IR-4(2) - -

The organization includes dynamic reconfiguration of as part of the incident response capability.

-
- -

Dynamic reconfiguration includes, for example, changes to router rules, access control lists, intrusion detection/prevention system parameters, and filter rules for firewalls and gateways. Organizations perform dynamic reconfiguration of information systems, for example, to stop attacks, to misdirect attackers, and to isolate components of systems, thus limiting the extent of the damage from breaches or compromises. Organizations include time frames for achieving the reconfiguration of information systems in the definition of the reconfiguration capability, considering the potential need for rapid response in order to effectively address sophisticated cyber threats.

- AC-2 - AC-4 - AC-16 - CM-2 - CM-3 - CM-4 -
- -

Determine if the organization:

- - IR-4(2)[1] -

defines information system components to be dynamically reconfigured as part of the incident response capability; and

-
- - IR-4(2)[2] -

includes dynamic reconfiguration of organization-defined information system components as part of the incident response capability.

-
-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident handling

-

automated mechanisms supporting incident handling

-

list of system components to be dynamically reconfigured as part of incident response capability

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

incident response plan

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident handling responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms that support and/or implement dynamic reconfiguration of components as part of incident response

-
-
-
- - Continuity of Operations - - - - - - - IR-4(3) - -

The organization identifies and to ensure continuation of organizational missions and business functions.

-
- -

Classes of incidents include, for example, malfunctions due to design/implementation errors and omissions, targeted malicious attacks, and untargeted malicious attacks. Appropriate incident response actions include, for example, graceful degradation, information system shutdown, fall back to manual mode/alternative technology whereby the system operates differently, employing deceptive measures, alternate information flows, or operating in a mode that is reserved solely for when systems are under attack.

-
- -

Determine if the organization:

- - IR-4(3)[1] -

defines classes of incidents requiring an organization-defined action to be taken;

-
- - IR-4(3)[2] -

defines actions to be taken in response to organization-defined classes of incidents; and

-
- - IR-4(3)[3] -

identifies organization-defined classes of incidents and organization-defined actions to take in response to classes of incidents to ensure continuation of organizational missions and business functions.

-
-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident handling

-

incident response plan

-

security plan

-

list of classes of incidents

-

list of appropriate incident response actions

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident handling responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms that support and/or implement continuity of operations

-
-
-
- - Information Correlation - IR-4(4) - -

The organization correlates incident information and individual incident responses to achieve an organization-wide perspective on incident awareness and response.

-
- -

Sometimes the nature of a threat event, for example, a hostile cyber attack, is such that it can only be observed by bringing together information from different sources including various reports and reporting procedures established by organizations.

-
- -

Determine if the organization correlates incident information and individual incident responses to achieve an organization-wide perspective on incident awareness and response.

-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident handling

-

incident response plan

-

security plan

-

automated mechanisms supporting incident and event correlation

-

information system design documentation

-

information system configuration settings and associated documentation

-

incident management correlation logs

-

event management correlation logs

-

security information and event management logs

-

incident management correlation reports

-

event management correlation reports

-

security information and event management reports

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident handling responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with whom incident information and individual incident responses are to be correlated

-
-
- - TEST - -

Organizational processes for correlating incident information and individual incident responses

-

automated mechanisms that support and or implement correlation of incident response information with individual incident responses

-
-
-
- - Automatic Disabling of Information System - - - - IR-4(5) - -

The organization implements a configurable capability to automatically disable the information system if are detected.

-
- -

Determine if the organization:

- - IR-4(5)[1] -

defines security violations that, if detected, initiate a configurable capability to automatically disable the information system; and

-
- - IR-4(5)[2] -

implements a configurable capability to automatically disable the information system if any of the organization-defined security violations are detected.

-
-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident handling

-

automated mechanisms supporting incident handling

-

information system design documentation

-

information system configuration settings and associated documentation

-

incident response plan

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident handling responsibilities

-

organizational personnel with information security responsibilities

-

system developers

-
-
- - TEST - -

Incident handling capability for the organization

-

automated mechanisms supporting and/or implementing automatic disabling of the information system

-
-
-
- - Insider Threats - Specific Capabilities - IR-4(6) - -

The organization implements incident handling capability for insider threats.

-
- -

While many organizations address insider threat incidents as an inherent part of their organizational incident response capability, this control enhancement provides additional emphasis on this type of threat and the need for specific incident handling capabilities (as defined within organizations) to provide appropriate and timely responses.

-
- -

Determine if the organization implements incident handling capability for insider threats.

-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident handling

-

automated mechanisms supporting incident handling

-

information system design documentation

-

information system configuration settings and associated documentation

-

incident response plan

-

security plan

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident handling responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Incident handling capability for the organization

-
-
-
- - Insider Threats - Intra-organization Coordination - - - - IR-4(7) - -

The organization coordinates incident handling capability for insider threats across .

-
- -

Incident handling for insider threat incidents (including preparation, detection and analysis, containment, eradication, and recovery) requires close coordination among a variety of organizational components or elements to be effective. These components or elements include, for example, mission/business owners, information system owners, human resources offices, procurement offices, personnel/physical security offices, operations personnel, and risk executive (function). In addition, organizations may require external support from federal, state, and local law enforcement agencies.

-
- -

Determine if the organization:

- - IR-4(7)[1] -

defines components or elements of the organization with whom the incident handling capability for insider threats is to be coordinated; and

-
- - IR-4(7)[2] -

coordinates incident handling capability for insider threats across organization-defined components or elements of the organization.

-
-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident handling

-

incident response plan

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident handling responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel/elements with whom incident handling capability is to be coordinated

-
-
- - TEST - -

Organizational processes for coordinating incident handling

-
-
-
- - Correlation with External Organizations - - - - - - - IR-4(8) - -

The organization coordinates with to correlate and share to achieve a cross-organization perspective on incident awareness and more effective incident responses.

-
- -

The coordination of incident information with external organizations including, for example, mission/business partners, military/coalition partners, customers, and multitiered developers, can provide significant benefits. Cross-organizational coordination with respect to incident handling can serve as an important risk management capability. This capability allows organizations to leverage critical information from a variety of sources to effectively respond to information security-related incidents potentially affecting the organization’s operations, assets, and individuals.

-
- -

Determine if the organization:

- - IR-4(8)[1] -

defines external organizations with whom organizational incident information is to be coordinated;

-
- - IR-4(8)[2] -

defines incident information to be correlated and shared with organization-defined external organizations; and

-
- - IR-4(8)[3] -

the organization coordinates with organization-defined external organizations to correlate and share organization-defined information to achieve a cross-organization perspective on incident awareness and more effective incident responses.

-
-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident handling

-

list of external organizations

-

records of incident handling coordination with external organizations

-

incident response plan

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident handling responsibilities

-

organizational personnel with information security responsibilities

-

personnel from external organizations with whom incident response information is to be coordinated/shared/correlated

-
-
- - TEST - -

Organizational processes for coordinating incident handling information with external organizations

-
-
-
- - Dynamic Response Capability - - - - IR-4(9) - -

The organization employs to effectively respond to security incidents.

-
- -

This control enhancement addresses the deployment of replacement or new capabilities in a timely manner in response to security incidents (e.g., adversary actions during hostile cyber attacks). This includes capabilities implemented at the mission/business process level (e.g., activating alternative mission/business processes) and at the information system level.

- CP-10 -
- -

Determine if the organization:

- - IR-4(9)[1] -

defines dynamic response capabilities to be employed to effectively respond to security incidents; and

-
- - IR-4(9)[2] -

employs organization-defined dynamic response capabilities to effectively respond to security incidents.

-
-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident handling

-

automated mechanisms supporting dynamic response capabilities

-

information system design documentation

-

information system configuration settings and associated documentation

-

incident response plan

-

security plan

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident handling responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for dynamic response capability

-

automated mechanisms supporting and/or implementing the dynamic response capability for the organization

-
-
-
- - Supply Chain Coordination - IR-4(10) - -

The organization coordinates incident handling activities involving supply chain events with other organizations involved in the supply chain.

-
- -

Organizations involved in supply chain activities include, for example, system/product developers, integrators, manufacturers, packagers, assemblers, distributors, vendors, and resellers. Supply chain incidents include, for example, compromises/breaches involving information system components, information technology products, development processes or personnel, and distribution processes or warehousing facilities.

-
- -

Determine if the organization coordinates incident handling activities involving supply chain events with other organizations involved in the supply chain.

-
- - EXAMINE - -

Incident response policy

-

procedures addressing supply chain coordination

-

acquisition contracts

-

service-level agreements

-

incident response plan

-

security plan

-

incident response plans of other organization involved in supply chain activities

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident handling responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with supply chain responsibilities

-
-
-
- - Executive Order 13587 - - NIST Special Publication 800-61 - -
- - Incident Monitoring - IR-5 - -

The organization tracks and documents information system security incidents.

-
- -

Documenting information system security incidents includes, for example, maintaining records about each incident, the status of the incident, and other pertinent information necessary for forensics, evaluating incident details, trends, and handling. Incident information can be obtained from a variety of sources including, for example, incident reports, incident response teams, audit monitoring, network monitoring, physical access monitoring, and user/administrator reports.

- AU-6 - IR-8 - PE-6 - SC-5 - SC-7 - SI-3 - SI-4 - SI-7 -
- -

Determine if the organization:

- - IR-5[1] -

tracks information system security incidents; and

-
- - IR-5[2] -

documents information system security incidents.

-
-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident monitoring

-

incident response records and documentation

-

incident response plan

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident monitoring responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Incident monitoring capability for the organization

-

automated mechanisms supporting and/or implementing tracking and documenting of system security incidents

-
-
- - Automated Tracking / Data Collection / Analysis - IR-5(1) - -

The organization employs automated mechanisms to assist in the tracking of security incidents and in the collection and analysis of incident information.

-
- -

Automated mechanisms for tracking security incidents and collecting/analyzing incident information include, for example, the Einstein network monitoring device and monitoring online Computer Incident Response Centers (CIRCs) or other electronic databases of incidents.

- AU-7 - IR-4 -
- -

Determine if the organization employs automated mechanisms to assist in:

- - IR-5(1)[1] -

the tracking of security incidents;

-
- - IR-5(1)[2] -

the collection of incident information; and

-
- - IR-5(1)[3] -

the analysis of incident information.

-
-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident monitoring

-

automated mechanisms supporting incident monitoring

-

information system design documentation

-

information system configuration settings and associated documentation

-

incident response plan

-

security plan

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident monitoring responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms assisting in tracking of security incidents and in the collection and analysis of incident information

-
-
-
- - NIST Special Publication 800-61 - -
- - Incident Reporting - - - - - - - IR-6 - -

The organization:

- - a. -

Requires personnel to report suspected security incidents to the organizational incident response capability within ; and

-
- - b. -

Reports security incident information to .

-
-
- -

The intent of this control is to address both specific incident reporting requirements within an organization and the formal incident reporting requirements for federal agencies and their subordinate organizations. Suspected security incidents include, for example, the receipt of suspicious email communications that can potentially contain malicious code. The types of security incidents reported, the content and timeliness of the reports, and the designated reporting authorities reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Current federal policy requires that all federal agencies (unless specifically exempted from such requirements) report security incidents to the United States Computer Emergency Readiness Team (US-CERT) within specified time frames designated in the US-CERT Concept of Operations for Federal Cyber Security Incident Handling.

- IR-4 - IR-5 - IR-8 -
- -

Determine if the organization:

- - IR-6(a) - - IR-6(a)[1] -

defines the time period within which personnel report suspected security incidents to the organizational incident response capability;

-
- - IR-6(a)[2] -

requires personnel to report suspected security incidents to the organizational incident response capability within the organization-defined time period;

-
-
- - IR-6(b) - - IR-6(b)[1] -

defines authorities to whom security incident information is to be reported; and

-
- - IR-6(b)[2] -

reports security incident information to organization-defined authorities.

-
-
-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident reporting

-

incident reporting records and documentation

-

incident response plan

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident reporting responsibilities

-

organizational personnel with information security responsibilities

-

personnel who have/should have reported incidents

-

personnel (authorities) to whom incident information is to be reported

-
-
- - TEST - -

Organizational processes for incident reporting

-

automated mechanisms supporting and/or implementing incident reporting

-
-
- - Automated Reporting - IR-6(1) - -

The organization employs automated mechanisms to assist in the reporting of security incidents.

-
- - IR-7 - - -

Determine if the organization employs automated mechanisms to assist in the reporting of security incidents.

-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident reporting

-

automated mechanisms supporting incident reporting

-

information system design documentation

-

information system configuration settings and associated documentation

-

incident response plan

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident reporting responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for incident reporting

-

automated mechanisms supporting and/or implementing reporting of security incidents

-
-
-
- - Vulnerabilities Related to Incidents - - - - IR-6(2) - -

The organization reports information system vulnerabilities associated with reported security incidents to .

-
- -

Determine if the organization:

- - IR-6(2)[1] -

defines personnel or roles to whom information system vulnerabilities associated with reported security incidents are to be reported; and

-
- - IR-6(2)[2] -

reports information system vulnerabilities associated with reported security incidents to organization-defined personnel or roles.

-
-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident reporting

-

incident response plan

-

security plan

-

security incident reports and associated information system vulnerabilities

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident reporting responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

personnel to whom vulnerabilities associated with security incidents are to be reported

-
-
- - TEST - -

Organizational processes for incident reporting

-

automated mechanisms supporting and/or implementing reporting of vulnerabilities associated with security incidents

-
-
-
- - Coordination with Supply Chain - IR-6(3) - -

The organization provides security incident information to other organizations involved in the supply chain for information systems or information system components related to the incident.

-
- -

Organizations involved in supply chain activities include, for example, system/product developers, integrators, manufacturers, packagers, assemblers, distributors, vendors, and resellers. Supply chain incidents include, for example, compromises/breaches involving information system components, information technology products, development processes or personnel, and distribution processes or warehousing facilities. Organizations determine the appropriate information to share considering the value gained from support by external organizations with the potential for harm due to sensitive information being released to outside organizations of perhaps questionable trustworthiness.

-
- -

Determine if the organization provides security incident information to other organizations involved in the supply chain for information systems or information system components related to the incident.

-
- - EXAMINE - -

Incident response policy

-

procedures addressing supply chain coordination

-

acquisition contracts

-

service-level agreements

-

incident response plan

-

security plan

-

plans of other organization involved in supply chain activities

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident reporting responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with supply chain responsibilities

-
-
- - TEST - -

Organizational processes for incident reporting

-

automated mechanisms supporting and/or implementing reporting of incident information involved in the supply chain

-
-
-
- - NIST Special Publication 800-61 - - http://www.us-cert.gov - -
- - Incident Response Assistance - IR-7 - -

The organization provides an incident response support resource, integral to the organizational incident response capability that offers advice and assistance to users of the information system for the handling and reporting of security incidents.

-
- -

Incident response support resources provided by organizations include, for example, help desks, assistance groups, and access to forensics services, when required.

- AT-2 - IR-4 - IR-6 - IR-8 - SA-9 -
- -

Determine if the organization provides an incident response support resource:

- - IR-7[1] -

that is integral to the organizational incident response capability; and

-
- - IR-7[2] -

that offers advice and assistance to users of the information system for the handling and reporting of security incidents.

-
-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident response assistance

-

incident response plan

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident response assistance and support responsibilities

-

organizational personnel with access to incident response support and assistance capability

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for incident response assistance

-

automated mechanisms supporting and/or implementing incident response assistance

-
-
- - Automation Support for Availability of Information / Support - IR-7(1) - -

The organization employs automated mechanisms to increase the availability of incident response-related information and support.

-
- -

Automated mechanisms can provide a push and/or pull capability for users to obtain incident response assistance. For example, individuals might have access to a website to query the assistance capability, or conversely, the assistance capability may have the ability to proactively send information to users (general distribution or targeted) as part of increasing understanding of current response capabilities and support.

-
- -

Determine if the organization employs automated mechanisms to increase the availability of incident response-related information and support.

-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident response assistance

-

automated mechanisms supporting incident response support and assistance

-

information system design documentation

-

information system configuration settings and associated documentation

-

incident response plan

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident response support and assistance responsibilities

-

organizational personnel with access to incident response support and assistance capability

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for incident response assistance

-

automated mechanisms supporting and/or implementing an increase in the availability of incident response information and support

-
-
-
- - Coordination with External Providers - IR-7(2) - -

The organization:

- - (a) -

Establishes a direct, cooperative relationship between its incident response capability and external providers of information system protection capability; and

-
- - (b) -

Identifies organizational incident response team members to the external providers.

-
-
- -

External providers of information system protection capability include, for example, the Computer Network Defense program within the U.S. Department of Defense. External providers help to protect, monitor, analyze, detect, and respond to unauthorized activity within organizational information systems and networks.

-
- -

Determine if the organization:

- - IR-7(2)(a) -

establishes a direct, cooperative relationship between its incident response capability and external providers of information system protection capability; and

- IR-7(2)(a) -
- - IR-7(2)(b) -

identifies organizational incident response team members to the external providers.

- IR-7(2)(b) -
-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident response assistance

-

incident response plan

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident response support and assistance responsibilities

-

external providers of information system protection capability

-

organizational personnel with information security responsibilities

-
-
-
-
- - Incident Response Plan - - - - - - - - - - - - - IR-8 - -

The organization:

- - a. -

Develops an incident response plan that:

- - 1. -

Provides the organization with a roadmap for implementing its incident response capability;

-
- - 2. -

Describes the structure and organization of the incident response capability;

-
- - 3. -

Provides a high-level approach for how the incident response capability fits into the overall organization;

-
- - 4. -

Meets the unique requirements of the organization, which relate to mission, size, structure, and functions;

-
- - 5. -

Defines reportable incidents;

-
- - 6. -

Provides metrics for measuring the incident response capability within the organization;

-
- - 7. -

Defines the resources and management support needed to effectively maintain and mature an incident response capability; and

-
- - 8. -

Is reviewed and approved by ;

-
-
- - b. -

Distributes copies of the incident response plan to ;

-
- - c. -

Reviews the incident response plan ;

-
- - d. -

Updates the incident response plan to address system/organizational changes or problems encountered during plan implementation, execution, or testing;

-
- - e. -

Communicates incident response plan changes to ; and

-
- - f. -

Protects the incident response plan from unauthorized disclosure and modification.

-
-
- -

It is important that organizations develop and implement a coordinated approach to incident response. Organizational missions, business functions, strategies, goals, and objectives for incident response help to determine the structure of incident response capabilities. As part of a comprehensive incident response capability, organizations consider the coordination and sharing of information with external organizations, including, for example, external service providers and organizations involved in the supply chain for organizational information systems.

- MP-2 - MP-4 - MP-5 -
- -

Determine if the organization:

- - IR-8(a) -

develops an incident response plan that:

- - IR-8(a)(1) -

provides the organization with a roadmap for implementing its incident response capability;

-
- - IR-8(a)(2) -

describes the structure and organization of the incident response capability;

-
- - IR-8(a)(3) -

provides a high-level approach for how the incident response capability fits into the overall organization;

-
- - IR-8(a)(4) -

meets the unique requirements of the organization, which relate to:

- - IR-8(a)(4)[1] -

mission;

-
- - IR-8(a)(4)[2] -

size;

-
- - IR-8(a)(4)[3] -

structure;

-
- - IR-8(a)(4)[4] -

functions;

-
-
- - IR-8(a)(5) -

defines reportable incidents;

-
- - IR-8(a)(6) -

provides metrics for measuring the incident response capability within the organization;

-
- - IR-8(a)(7) -

defines the resources and management support needed to effectively maintain and mature an incident response capability;

-
- - IR-8(a)(8) - - IR-8(a)(8)[1] -

defines personnel or roles to review and approve the incident response plan;

-
- - IR-8(a)(8)[2] -

is reviewed and approved by organization-defined personnel or roles;

-
-
-
- - IR-8(b) - - IR-8(b)[1] - - IR-8(b)[1][a] -

defines incident response personnel (identified by name and/or by role) to whom copies of the incident response plan are to be distributed;

-
- - IR-8(b)[1][b] -

defines organizational elements to whom copies of the incident response plan are to be distributed;

-
-
- - IR-8(b)[2] -

distributes copies of the incident response plan to organization-defined incident response personnel (identified by name and/or by role) and organizational elements;

-
-
- - IR-8(c) - - IR-8(c)[1] -

defines the frequency to review the incident response plan;

-
- - IR-8(c)[2] -

reviews the incident response plan with the organization-defined frequency;

-
-
- - IR-8(d) -

updates the incident response plan to address system/organizational changes or problems encountered during plan:

- - IR-8(d)[1] -

implementation;

-
- - IR-8(d)[2] -

execution; or

-
- - IR-8(d)[3] -

testing;

-
-
- - IR-8(e) - - IR-8(e)[1] - - IR-8(e)[1][a] -

defines incident response personnel (identified by name and/or by role) to whom incident response plan changes are to be communicated;

-
- - IR-8(e)[1][b] -

defines organizational elements to whom incident response plan changes are to be communicated;

-
-
- - IR-8(e)[2] -

communicates incident response plan changes to organization-defined incident response personnel (identified by name and/or by role) and organizational elements; and

-
-
- - IR-8(f) -

protects the incident response plan from unauthorized disclosure and modification.

-
-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident response planning

-

incident response plan

-

records of incident response plan reviews and approvals

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident response planning responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational incident response plan and related organizational processes

-
-
- - NIST Special Publication 800-61 - -
- - Information Spillage Response - - - - - - - IR-9 - -

The organization responds to information spills by:

- - a. -

Identifying the specific information involved in the information system contamination;

-
- - b. -

Alerting of the information spill using a method of communication not associated with the spill;

-
- - c. -

Isolating the contaminated information system or system component;

-
- - d. -

Eradicating the information from the contaminated information system or component;

-
- - e. -

Identifying other information systems or system components that may have been subsequently contaminated; and

-
- - f. -

Performing other .

-
-
- -

Information spillage refers to instances where either classified or sensitive information is inadvertently placed on information systems that are not authorized to process such information. Such information spills often occur when information that is initially thought to be of lower sensitivity is transmitted to an information system and then is subsequently determined to be of higher sensitivity. At that point, corrective action is required. The nature of the organizational response is generally based upon the degree of sensitivity of the spilled information (e.g., security category or classification level), the security capabilities of the information system, the specific nature of contaminated storage media, and the access authorizations (e.g., security clearances) of individuals with authorized access to the contaminated system. The methods used to communicate information about the spill after the fact do not involve methods directly associated with the actual spill to minimize the risk of further spreading the contamination before such contamination is isolated and eradicated.

-
- -

Determine if the organization:

- - IR-9(a) -

responds to information spills by identifying the specific information causing the information system contamination;

-
- - IR-9(b) - - IR-9(b)[1] -

defines personnel to be alerted of the information spillage;

-
- - IR-9(b)[2] -

identifies a method of communication not associated with the information spill to use to alert organization-defined personnel of the spill;

-
- - IR-9(b)[3] -

responds to information spills by alerting organization-defined personnel of the information spill using a method of communication not associated with the spill;

-
-
- - IR-9(c) -

responds to information spills by isolating the contaminated information system;

-
- - IR-9(d) -

responds to information spills by eradicating the information from the contaminated information system;

-
- - IR-9(e) -

responds to information spills by identifying other information systems that may have been subsequently contaminated;

-
- - IR-9(f) - - IR-9(f)[1] -

defines other actions to be performed in response to information spills; and

-
- - IR-9(f)[2] -

responds to information spills by performing other organization-defined actions.

-
-
-
- - EXAMINE - -

Incident response policy

-

procedures addressing information spillage

-

incident response plan

-

records of information spillage alerts/notifications, list of personnel who should receive alerts of information spillage

-

list of actions to be performed regarding information spillage

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident response responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for information spillage response

-

automated mechanisms supporting and/or implementing information spillage response actions and related communications

-
-
- - Responsible Personnel - - - - IR-9(1) - -

The organization assigns with responsibility for responding to information spills.

-
- -

Determine if the organization:

- - IR-9(1)[1] -

defines personnel with responsibility for responding to information spills; and

-
- - IR-9(1)[2] -

assigns organization-defined personnel with responsibility for responding to information spills.

-
-
- - EXAMINE - -

Incident response policy

-

procedures addressing information spillage

-

incident response plan

-

list of personnel responsible for responding to information spillage

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident response responsibilities

-

organizational personnel with information security responsibilities

-
-
-
- - Training - - - - IR-9(2) - -

The organization provides information spillage response training .

-
- -

Determine if the organization:

- - IR-9(2)[1] -

defines the frequency to provide information spillage response training; and

-
- - IR-9(2)[2] -

provides information spillage response training with the organization-defined frequency.

-
-
- - EXAMINE - -

Incident response policy

-

procedures addressing information spillage response training

-

information spillage response training curriculum

-

information spillage response training materials

-

incident response plan

-

information spillage response training records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident response training responsibilities

-

organizational personnel with information security responsibilities

-
-
-
- - Post-spill Operations - - - - IR-9(3) - -

The organization implements to ensure that organizational personnel impacted by information spills can continue to carry out assigned tasks while contaminated systems are undergoing corrective actions.

-
- -

Correction actions for information systems contaminated due to information spillages may be very time-consuming. During those periods, personnel may not have access to the contaminated systems, which may potentially affect their ability to conduct organizational business.

-
- -

Determine if the organization:

- - IR-9(3)[1] -

defines procedures that ensure organizational personnel impacted by information spills can continue to carry out assigned tasks while contaminated systems are undergoing corrective actions; and

-
- - IR-9(3)[2] -

implements organization-defined procedures to ensure that organizational personnel impacted by information spills can continue to carry out assigned tasks while contaminated systems are undergoing corrective actions.

-
-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident handling

-

procedures addressing information spillage

-

incident response plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident response responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for post-spill operations

-
-
-
- - Exposure to Unauthorized Personnel - - - - IR-9(4) - -

The organization employs for personnel exposed to information not within assigned access authorizations.

-
- -

Security safeguards include, for example, making personnel exposed to spilled information aware of the federal laws, directives, policies, and/or regulations regarding the information and the restrictions imposed based on exposure to such information.

-
- -

Determine if the organization:

- - IR-9(4)[1] -

defines security safeguards to be employed for personnel exposed to information not within assigned access authorizations; and

-
- - IR-9(4)[2] -

employs organization-defined security safeguards for personnel exposed to information not within assigned access authorizations.

-
-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident handling

-

procedures addressing information spillage

-

incident response plan

-

security safeguards regarding information spillage/exposure to unauthorized personnel

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident response responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for dealing with information exposed to unauthorized personnel

-

automated mechanisms supporting and/or implementing safeguards for personnel exposed to information not within assigned access authorizations

-
-
-
-
- - Integrated Information Security Analysis Team - IR-10 - -

The organization establishes an integrated team of forensic/malicious code analysts, tool developers, and real-time operations personnel.

-
- -

Having an integrated team for incident response facilitates information sharing. Such capability allows organizational personnel, including developers, implementers, and operators, to leverage the team knowledge of the threat in order to implement defensive measures that will enable organizations to deter intrusions more effectively. Moreover, it promotes the rapid detection of intrusions, development of appropriate mitigations, and the deployment of effective defensive measures. For example, when an intrusion is detected, the integrated security analysis team can rapidly develop an appropriate response for operators to implement, correlate the new incident with information on past intrusions, and augment ongoing intelligence development. This enables the team to identify adversary TTPs that are linked to the operations tempo or to specific missions/business functions, and to define responsive actions in a way that does not disrupt the mission/business operations. Ideally, information security analysis teams are distributed within organizations to make the capability more resilient.

-
- -

Determine if the organization establishes an integrated team of forensic/malicious code analyst, tool developers, and real-time operations personnel.

-
- - EXAMINE - -

Incident response policy

-

procedures addressing incident response planning and security analysis team integration

-

incident response plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with incident response and information security analysis responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel participating on integrated security analysis teams

-
-
-
-
- - Maintenance - - System Maintenance Policy and Procedures - - - - - - - - - - MA-1 - -

The organization:

- - a. -

Develops, documents, and disseminates to :

- - 1. -

A system maintenance policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and

-
- - 2. -

Procedures to facilitate the implementation of the system maintenance policy and associated system maintenance controls; and

-
-
- - b. -

Reviews and updates the current:

- - 1. -

System maintenance policy ; and

-
- - 2. -

System maintenance procedures .

-
-
-
- -

This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the MA family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures.

- PM-9 -
- -

Determine if the organization:

- - MA-1(a) - - MA-1(a)(1) - - MA-1(a)(1)[1] -

develops and documents a system maintenance policy that addresses:

- - MA-1(a)(1)[1][a] -

purpose;

-
- - MA-1(a)(1)[1][b] -

scope;

-
- - MA-1(a)(1)[1][c] -

roles;

-
- - MA-1(a)(1)[1][d] -

responsibilities;

-
- - MA-1(a)(1)[1][e] -

management commitment;

-
- - MA-1(a)(1)[1][f] -

coordination among organizational entities;

-
- - MA-1(a)(1)[1][g] -

compliance;

-
-
- - MA-1(a)(1)[2] -

defines personnel or roles to whom the system maintenance policy is to be disseminated;

-
- - MA-1(a)(1)[3] -

disseminates the system maintenance policy to organization-defined personnel or roles;

-
-
- - MA-1(a)(2) - - MA-1(a)(2)[1] -

develops and documents procedures to facilitate the implementation of the maintenance policy and associated system maintenance controls;

-
- - MA-1(a)(2)[2] -

defines personnel or roles to whom the procedures are to be disseminated;

-
- - MA-1(a)(2)[3] -

disseminates the procedures to organization-defined personnel or roles;

-
-
-
- - MA-1(b) - - MA-1(b)(1) - - MA-1(b)(1)[1] -

defines the frequency to review and update the current system maintenance policy;

-
- - MA-1(b)(1)[2] -

reviews and updates the current system maintenance policy with the organization-defined frequency;

-
-
- - MA-1(b)(2) - - MA-1(b)(2)[1] -

defines the frequency to review and update the current system maintenance procedures; and

-
- - MA-1(b)(2)[2] -

reviews and updates the current system maintenance procedures with the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

Maintenance policy and procedures

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with maintenance responsibilities

-

organizational personnel with information security responsibilities

-
-
- - NIST Special Publication 800-12 - - NIST Special Publication 800-100 - -
- - Controlled Maintenance - - - - - - - MA-2 - -

The organization:

- - a. -

Schedules, performs, documents, and reviews records of maintenance and repairs on information system components in accordance with manufacturer or vendor specifications and/or organizational requirements;

-
- - b. -

Approves and monitors all maintenance activities, whether performed on site or remotely and whether the equipment is serviced on site or removed to another location;

-
- - c. -

Requires that explicitly approve the removal of the information system or system components from organizational facilities for off-site maintenance or repairs;

-
- - d. -

Sanitizes equipment to remove all information from associated media prior to removal from organizational facilities for off-site maintenance or repairs;

-
- - e. -

Checks all potentially impacted security controls to verify that the controls are still functioning properly following maintenance or repair actions; and

-
- - f. -

Includes in organizational maintenance records.

-
-
- -

This control addresses the information security aspects of the information system maintenance program and applies to all types of maintenance to any system component (including applications) conducted by any local or nonlocal entity (e.g., in-contract, warranty, in-house, software maintenance agreement). System maintenance also includes those components not directly associated with information processing and/or data/information retention such as scanners, copiers, and printers. Information necessary for creating effective maintenance records includes, for example: (i) date and time of maintenance; (ii) name of individuals or group performing the maintenance; (iii) name of escort, if necessary; (iv) a description of the maintenance performed; and (v) information system components/equipment removed or replaced (including identification numbers, if applicable). The level of detail included in maintenance records can be informed by the security categories of organizational information systems. Organizations consider supply chain issues associated with replacement components for information systems.

- CM-3 - CM-4 - MA-4 - MP-6 - PE-16 - SA-12 - SI-2 -
- -

Determine if the organization:

- - MA-2(a) - - MA-2(a)[1] -

schedules maintenance and repairs on information system components in accordance with:

- - MA-2(a)[1][a] -

manufacturer or vendor specifications; and/or

-
- - MA-2(a)[1][b] -

organizational requirements;

-
-
- - MA-2(a)[2] -

performs maintenance and repairs on information system components in accordance with:

- - MA-2(a)[2][a] -

manufacturer or vendor specifications; and/or

-
- - MA-2(a)[2][b] -

organizational requirements;

-
-
- - MA-2(a)[3] -

documents maintenance and repairs on information system components in accordance with:

- - MA-2(a)[3][a] -

manufacturer or vendor specifications; and/or

-
- - MA-2(a)[3][b] -

organizational requirements;

-
-
- - MA-2(a)[4] -

reviews records of maintenance and repairs on information system components in accordance with:

- - MA-2(a)[4][a] -

manufacturer or vendor specifications; and/or

-
- - MA-2(a)[4][b] -

organizational requirements;

-
-
-
- - MA-2(b) - - MA-2(b)[1] -

approves all maintenance activities, whether performed on site or remotely and whether the equipment is serviced on site or removed to another location;

-
- - MA-2(b)[2] -

monitors all maintenance activities, whether performed on site or remotely and whether the equipment is serviced on site or removed to another location;

-
-
- - MA-2(c) - - MA-2(c)[1] -

defines personnel or roles required to explicitly approve the removal of the information system or system components from organizational facilities for off-site maintenance or repairs;

-
- - MA-2(c)[2] -

requires that organization-defined personnel or roles explicitly approve the removal of the information system or system components from organizational facilities for off-site maintenance or repairs;

-
-
- - MA-2(d) -

sanitizes equipment to remove all information from associated media prior to removal from organizational facilities for off-site maintenance or repairs;

-
- - MA-2(e) -

checks all potentially impacted security controls to verify that the controls are still functioning properly following maintenance or repair actions;

-
- - MA-2(f) - - MA-2(f)[1] -

defines maintenance-related information to be included in organizational maintenance records; and

-
- - MA-2(f)[2] -

includes organization-defined maintenance-related information in organizational maintenance records.

-
-
-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing controlled information system maintenance

-

maintenance records

-

manufacturer/vendor maintenance specifications

-

equipment sanitization records

-

media sanitization records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel responsible for media sanitization

-

system/network administrators

-
-
- - TEST - -

Organizational processes for scheduling, performing, documenting, reviewing, approving, and monitoring maintenance and repairs for the information system

-

organizational processes for sanitizing information system components

-

automated mechanisms supporting and/or implementing controlled maintenance

-

automated mechanisms implementing sanitization of information system components

-
-
- - Record Content - MA-2(1) - Withdrawn - MA-2 - - - Automated Maintenance Activities - MA-2(2) - -

The organization:

- - (a) -

Employs automated mechanisms to schedule, conduct, and document maintenance and repairs; and

-
- - (b) -

Produces up-to date, accurate, and complete records of all maintenance and repair actions requested, scheduled, in process, and completed.

-
-
- - CA-7 - MA-3 - - -

Determine if the organization:

- - MA-2(2)(a) -

employs automated mechanisms to:

- - MA-2(2)(a)[1] -

schedule maintenance and repairs;

-
- - MA-2(2)(a)[2] -

conduct maintenance and repairs;

-
- - MA-2(2)(a)[3] -

document maintenance and repairs;

-
- MA-2(2)(a) -
- - MA-2(2)(b) -

produces up-to-date, accurate, and complete records of all maintenance and repair actions:

- - MA-2(2)(b)[1] -

requested;

-
- - MA-2(2)(b)[2] -

scheduled;

-
- - MA-2(2)(b)[3] -

in process; and

-
- - MA-2(2)(b)[4] -

completed.

-
- MA-2(2)(b) -
-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing controlled information system maintenance

-

automated mechanisms supporting information system maintenance activities

-

information system configuration settings and associated documentation

-

maintenance records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing controlled maintenance

-

automated mechanisms supporting and/or implementing production of records of maintenance and repair actions

-
-
-
-
- - Maintenance Tools - MA-3 - -

The organization approves, controls, and monitors information system maintenance tools.

-
- -

This control addresses security-related issues associated with maintenance tools used specifically for diagnostic and repair actions on organizational information systems. Maintenance tools can include hardware, software, and firmware items. Maintenance tools are potential vehicles for transporting malicious code, either intentionally or unintentionally, into a facility and subsequently into organizational information systems. Maintenance tools can include, for example, hardware/software diagnostic test equipment and hardware/software packet sniffers. This control does not cover hardware/software components that may support information system maintenance, yet are a part of the system, for example, the software implementing “ping,” “ls,” “ipconfig, or the hardware and software implementing the monitoring port of an Ethernet switch.

- MA-2 - MA-5 - MP-6 -
- -

Determine if the organization:

- - MA-3[1] -

approves information system maintenance tools;

-
- - MA-3[2] -

controls information system maintenance tools; and

-
- - MA-3[3] -

monitors information system maintenance tools.

-
-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing information system maintenance tools

-

information system maintenance tools and associated documentation

-

maintenance records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for approving, controlling, and monitoring maintenance tools

-

automated mechanisms supporting and/or implementing approval, control, and/or monitoring of maintenance tools

-
-
- - Inspect Tools - MA-3(1) - -

The organization inspects the maintenance tools carried into a facility by maintenance personnel for improper or unauthorized modifications.

-
- -

If, upon inspection of maintenance tools, organizations determine that the tools have been modified in an improper/unauthorized manner or contain malicious code, the incident is handled consistent with organizational policies and procedures for incident handling.

- SI-7 -
- -

Determine if the organization inspects the maintenance tools carried into a facility by maintenance personnel for improper or unauthorized modifications.

-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing information system maintenance tools

-

information system maintenance tools and associated documentation

-

maintenance tool inspection records

-

maintenance records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for inspecting maintenance tools

-

automated mechanisms supporting and/or implementing inspection of maintenance tools

-
-
-
- - Inspect Media - MA-3(2) - -

The organization checks media containing diagnostic and test programs for malicious code before the media are used in the information system.

-
- -

If, upon inspection of media containing maintenance diagnostic and test programs, organizations determine that the media contain malicious code, the incident is handled consistent with organizational incident handling policies and procedures.

- SI-3 -
- -

Determine if the organization checks media containing diagnostic and test programs for malicious code before the media are used in the information system.

-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing information system maintenance tools

-

information system maintenance tools and associated documentation

-

maintenance records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational process for inspecting media for malicious code

-

automated mechanisms supporting and/or implementing inspection of media used for maintenance

-
-
-
- - Prevent Unauthorized Removal - - - - MA-3(3) - -

The organization prevents the unauthorized removal of maintenance equipment containing organizational information by:

- - (a) -

Verifying that there is no organizational information contained on the equipment;

-
- - (b) -

Sanitizing or destroying the equipment;

-
- - (c) -

Retaining the equipment within the facility; or

-
- - (d) -

Obtaining an exemption from explicitly authorizing removal of the equipment from the facility.

-
-
- -

Organizational information includes all information specifically owned by organizations and information provided to organizations in which organizations serve as information stewards.

-
- -

Determine if the organization prevents the unauthorized removal of maintenance equipment containing organizational information by:

- - MA-3(3)(a) -

verifying that there is no organizational information contained on the equipment;

- MA-3(3)(a) -
- - MA-3(3)(b) -

sanitizing or destroying the equipment;

- MA-3(3)(b) -
- - MA-3(3)(c) -

retaining the equipment within the facility; or

- MA-3(3)(c) -
- - MA-3(3)(d) - - MA-3(3)(d)[1] -

defining personnel or roles that can grant an exemption from explicitly authorizing removal of the equipment from the facility; and

-
- - MA-3(3)(d)[2] -

obtaining an exemption from organization-defined personnel or roles explicitly authorizing removal of the equipment from the facility.

-
- MA-3(3)(d) -
-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing information system maintenance tools

-

information system maintenance tools and associated documentation

-

maintenance records

-

equipment sanitization records

-

media sanitization records

-

exemptions for equipment removal

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel responsible for media sanitization

-
-
- - TEST - -

Organizational process for preventing unauthorized removal of information

-

automated mechanisms supporting media sanitization or destruction of equipment

-

automated mechanisms supporting verification of media sanitization

-
-
-
- - Restricted Tool Use - MA-3(4) - -

The information system restricts the use of maintenance tools to authorized personnel only.

-
- -

This control enhancement applies to information systems that are used to carry out maintenance functions.

- AC-2 - AC-3 - AC-5 - AC-6 -
- -

Determine if the organization restricts the use of maintenance tools to authorized personnel only.

-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing information system maintenance tools

-

information system maintenance tools and associated documentation

-

list of personnel authorized to use maintenance tools

-

maintenance tool usage records

-

maintenance records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational process for restricting use of maintenance tools

-

automated mechanisms supporting and/or implementing restricted use of maintenance tools

-
-
-
- - NIST Special Publication 800-88 - -
- - Nonlocal Maintenance - MA-4 - -

The organization:

- - a. -

Approves and monitors nonlocal maintenance and diagnostic activities;

-
- - b. -

Allows the use of nonlocal maintenance and diagnostic tools only as consistent with organizational policy and documented in the security plan for the information system;

-
- - c. -

Employs strong authenticators in the establishment of nonlocal maintenance and diagnostic sessions;

-
- - d. -

Maintains records for nonlocal maintenance and diagnostic activities; and

-
- - e. -

Terminates session and network connections when nonlocal maintenance is completed.

-
-
- -

Nonlocal maintenance and diagnostic activities are those activities conducted by individuals communicating through a network, either an external network (e.g., the Internet) or an internal network. Local maintenance and diagnostic activities are those activities carried out by individuals physically present at the information system or information system component and not communicating across a network connection. Authentication techniques used in the establishment of nonlocal maintenance and diagnostic sessions reflect the network access requirements in IA-2. Typically, strong authentication requires authenticators that are resistant to replay attacks and employ multifactor authentication. Strong authenticators include, for example, PKI where certificates are stored on a token protected by a password, passphrase, or biometric. Enforcing requirements in MA-4 is accomplished in part by other controls.

- AC-2 - AC-3 - AC-6 - AC-17 - AU-2 - AU-3 - IA-2 - IA-4 - IA-5 - IA-8 - MA-2 - MA-5 - MP-6 - PL-2 - SC-7 - SC-10 - SC-17 -
- -

Determine if the organization:

- - MA-4(a) - - MA-4(a)[1] -

approves nonlocal maintenance and diagnostic activities;

-
- - MA-4(a)[2] -

monitors nonlocal maintenance and diagnostic activities;

-
-
- - MA-4(b) -

allows the use of nonlocal maintenance and diagnostic tools only:

- - MA-4(b)[1] -

as consistent with organizational policy;

-
- - MA-4(b)[2] -

as documented in the security plan for the information system;

-
-
- - MA-4(c) -

employs strong authenticators in the establishment of nonlocal maintenance and diagnostic sessions;

-
- - MA-4(d) -

maintains records for nonlocal maintenance and diagnostic activities;

-
- - MA-4(e) - - MA-4(e)[1] -

terminates sessions when nonlocal maintenance or diagnostics is completed; and

-
- - MA-4(e)[2] -

terminates network connections when nonlocal maintenance or diagnostics is completed.

-
-
-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing nonlocal information system maintenance

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

maintenance records

-

diagnostic records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for managing nonlocal maintenance

-

automated mechanisms implementing, supporting, and/or managing nonlocal maintenance

-

automated mechanisms for strong authentication of nonlocal maintenance diagnostic sessions

-

automated mechanisms for terminating nonlocal maintenance sessions and network connections

-
-
- - Auditing and Review - - - - MA-4(1) - -

The organization:

- - (a) -

Audits nonlocal maintenance and diagnostic sessions ; and

-
- - (b) -

Reviews the records of the maintenance and diagnostic sessions.

-
-
- - AU-2 - AU-6 - AU-12 - - -

Determine if the organization:

- - MA-4(1)(a) - - MA-4(1)(a)[1] -

defines audit events to audit nonlocal maintenance and diagnostic sessions;

-
- - MA-4(1)(a)[2] -

audits organization-defined audit events for non-local maintenance and diagnostic sessions; and

-
- MA-4(1)(a) -
- - MA-4(1)(b) -

reviews records of the maintenance and diagnostic sessions.

- MA-4(1)(b) -
-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing nonlocal information system maintenance

-

list of audit events

-

information system configuration settings and associated documentation

-

maintenance records

-

diagnostic records

-

audit records

-

reviews of maintenance and diagnostic session records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with audit and review responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for audit and review of nonlocal maintenance

-

automated mechanisms supporting and/or implementing audit and review of nonlocal maintenance

-
-
-
- - Document Nonlocal Maintenance - MA-4(2) - -

The organization documents in the security plan for the information system, the policies and procedures for the establishment and use of nonlocal maintenance and diagnostic connections.

-
- -

Determine if the organization documents in the security plan for the information system:

- - MA-4(2)[1] -

the policies for the establishment and use of nonlocal maintenance and diagnostic connections; and

-
- - MA-4(2)[2] -

the procedures for the establishment and use of nonlocal maintenance and diagnostic connections.

-
-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing non-local information system maintenance

-

security plan

-

maintenance records

-

diagnostic records

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with information security responsibilities

-
-
-
- - Comparable Security / Sanitization - MA-4(3) - -

The organization:

- - (a) -

Requires that nonlocal maintenance and diagnostic services be performed from an information system that implements a security capability comparable to the capability implemented on the system being serviced; or

-
- - (b) -

Removes the component to be serviced from the information system prior to nonlocal maintenance or diagnostic services, sanitizes the component (with regard to organizational information) before removal from organizational facilities, and after the service is performed, inspects and sanitizes the component (with regard to potentially malicious software) before reconnecting the component to the information system.

-
-
- -

Comparable security capability on information systems, diagnostic tools, and equipment providing maintenance services implies that the implemented security controls on those systems, tools, and equipment are at least as comprehensive as the controls on the information system being serviced.

- MA-3 - SA-12 - SI-3 - SI-7 -
- -

Determine if the organization:

- - MA-4(3)(a) -

requires that nonlocal maintenance and diagnostic services be performed from an information system that implements a security capability comparable to the capability implemented on the system being serviced; or

- MA-4(3)(a) -
- - MA-4(3)(b) - - MA-4(3)(b)[1] -

removes the component to be serviced from the information system;

-
- - MA-4(3)(b)[2] -

sanitizes the component (with regard to organizational information) prior to nonlocal maintenance or diagnostic services and/or before removal from organizational facilities; and

-
- - MA-4(3)(b)[3] -

inspects and sanitizes the component (with regard to potentially malicious software) after service is performed on the component and before reconnecting the component to the information system.

-
- MA-4(3)(b) -
-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing nonlocal information system maintenance

-

service provider contracts and/or service-level agreements

-

maintenance records

-

inspection records

-

audit records

-

equipment sanitization records

-

media sanitization records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

information system maintenance provider

-

organizational personnel with information security responsibilities

-

organizational personnel responsible for media sanitization

-

system/network administrators

-
-
- - TEST - -

Organizational processes for comparable security and sanitization for nonlocal maintenance

-

organizational processes for removal, sanitization, and inspection of components serviced via nonlocal maintenance

-

automated mechanisms supporting and/or implementing component sanitization and inspection

-
-
-
- - Authentication / Separation of Maintenance Sessions - - - - MA-4(4) - -

The organization protects nonlocal maintenance sessions by:

- - (a) -

Employing ; and

-
- - (b) -

Separating the maintenance sessions from other network sessions with the information system by either:

- - (1) -

Physically separated communications paths; or

-
- - (2) -

Logically separated communications paths based upon encryption.

-
-
-
- - SC-13 - - -

Determine if the organization protects nonlocal maintenance sessions by:

- - MA-4(4)(a) - - MA-4(4)(a)[1] -

defining replay resistant authenticators to be employed to protect nonlocal maintenance sessions;

-
- - MA-4(4)(a)[2] -

employing organization-defined authenticators that are replay resistant;

-
- MA-4(4)(a) -
- - MA-4(4)(b) -

separating the maintenance sessions from other network sessions with the information system by either:

- - MA-4(4)(b)(1) -

physically separated communications paths; or

- MA-4(4)(b)(1) -
- - MA-4(4)(b)(2) -

logically separated communications paths based upon encryption.

- MA-4(4)(b)(2) -
- MA-4(4)(b) -
-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing nonlocal information system maintenance

-

information system design documentation

-

information system configuration settings and associated documentation

-

maintenance records

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

network engineers

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for protecting nonlocal maintenance sessions

-

automated mechanisms implementing replay resistant authenticators

-

automated mechanisms implementing logically separated/encrypted communications paths

-
-
-
- - Approvals and Notifications - - - - - - - MA-4(5) - -

The organization:

- - (a) -

Requires the approval of each nonlocal maintenance session by ; and

-
- - (b) -

Notifies of the date and time of planned nonlocal maintenance.

-
-
- -

Notification may be performed by maintenance personnel. Approval of nonlocal maintenance sessions is accomplished by organizational personnel with sufficient information security and information system knowledge to determine the appropriateness of the proposed maintenance.

-
- -

Determine if the organization:

- - MA-4(5)(a) - - MA-4(5)(a)[1] -

defines personnel or roles required to approve each nonlocal maintenance session;

-
- - MA-4(5)(a)[2] -

requires the approval of each nonlocal maintenance session by organization-defined personnel or roles;

-
- MA-4(5)(a) -
- - MA-4(5)(b) - - MA-4(5)(b)[1] -

defines personnel or roles to be notified of the date and time of planned nonlocal maintenance; and

-
- - MA-4(5)(b)[2] -

notifies organization-defined personnel roles of the date and time of planned nonlocal maintenance.

-
- MA-4(5)(b) -
-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing non-local information system maintenance

-

security plan

-

notifications supporting nonlocal maintenance sessions

-

maintenance records

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with notification responsibilities

-

organizational personnel with approval responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for approving and notifying personnel regarding nonlocal maintenance

-

automated mechanisms supporting notification and approval of nonlocal maintenance

-
-
-
- - Cryptographic Protection - MA-4(6) - -

The information system implements cryptographic mechanisms to protect the integrity and confidentiality of nonlocal maintenance and diagnostic communications.

-
- - SC-8 - SC-13 - - -

Determine if the information system implements cryptographic mechanisms to protect the integrity and confidentiality of nonlocal maintenance and diagnostic communications.

-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing non-local information system maintenance

-

information system design documentation

-

information system configuration settings and associated documentation

-

cryptographic mechanisms protecting nonlocal maintenance activities

-

maintenance records

-

diagnostic records

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

network engineers

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Cryptographic mechanisms protecting nonlocal maintenance and diagnostic communications

-
-
-
- - Remote Disconnect Verification - MA-4(7) - -

The information system implements remote disconnect verification at the termination of nonlocal maintenance and diagnostic sessions.

-
- -

Remote disconnect verification ensures that remote connections from nonlocal maintenance sessions have been terminated and are no longer available for use.

- SC-13 -
- -

Determine if the information system implements remote disconnect verification at the termination of nonlocal maintenance and diagnostic sessions.

-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing non-local information system maintenance

-

information system design documentation

-

information system configuration settings and associated documentation

-

cryptographic mechanisms protecting nonlocal maintenance activities

-

maintenance records

-

diagnostic records

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

network engineers

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms implementing remote disconnect verifications of terminated nonlocal maintenance and diagnostic sessions

-
-
-
- - FIPS Publication 140-2 - - FIPS Publication 197 - - FIPS Publication 201 - - NIST Special Publication 800-63 - - NIST Special Publication 800-88 - - CNSS Policy 15 - -
- - Maintenance Personnel - MA-5 - -

The organization:

- - a. -

Establishes a process for maintenance personnel authorization and maintains a list of authorized maintenance organizations or personnel;

-
- - b. -

Ensures that non-escorted personnel performing maintenance on the information system have required access authorizations; and

-
- - c. -

Designates organizational personnel with required access authorizations and technical competence to supervise the maintenance activities of personnel who do not possess the required access authorizations.

-
-
- -

This control applies to individuals performing hardware or software maintenance on organizational information systems, while PE-2 addresses physical access for individuals whose maintenance duties place them within the physical protection perimeter of the systems (e.g., custodial staff, physical plant maintenance personnel). Technical competence of supervising individuals relates to the maintenance performed on the information systems while having required access authorizations refers to maintenance on and near the systems. Individuals not previously identified as authorized maintenance personnel, such as information technology manufacturers, vendors, systems integrators, and consultants, may require privileged access to organizational information systems, for example, when required to conduct maintenance activities with little or no notice. Based on organizational assessments of risk, organizations may issue temporary credentials to these individuals. Temporary credentials may be for one-time use or for very limited time periods.

- AC-2 - IA-8 - MP-2 - PE-2 - PE-3 - PE-4 - RA-3 -
- -

Determine if the organization:

- - MA-5(a) - - MA-5(a)[1] -

establishes a process for maintenance personnel authorization;

-
- - MA-5(a)[2] -

maintains a list of authorized maintenance organizations or personnel;

-
-
- - MA-5(b) -

ensures that non-escorted personnel performing maintenance on the information system have required access authorizations; and

-
- - MA-5(c) -

designates organizational personnel with required access authorizations and technical competence to supervise the maintenance activities of personnel who do not possess the required access authorizations.

-
-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing maintenance personnel

-

service provider contracts

-

service-level agreements

-

list of authorized personnel

-

maintenance records

-

access control records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for authorizing and managing maintenance personnel

-

automated mechanisms supporting and/or implementing authorization of maintenance personnel

-
-
- - Individuals Without Appropriate Access - MA-5(1) - -

The organization:

- - (a) -

Implements procedures for the use of maintenance personnel that lack appropriate security clearances or are not U.S. citizens, that include the following requirements:

- - (1) -

Maintenance personnel who do not have needed access authorizations, clearances, or formal access approvals are escorted and supervised during the performance of maintenance and diagnostic activities on the information system by approved organizational personnel who are fully cleared, have appropriate access authorizations, and are technically qualified;

-
- - (2) -

Prior to initiating maintenance or diagnostic activities by personnel who do not have needed access authorizations, clearances or formal access approvals, all volatile information storage components within the information system are sanitized and all nonvolatile storage media are removed or physically disconnected from the system and secured; and

-
-
- - (b) -

Develops and implements alternate security safeguards in the event an information system component cannot be sanitized, removed, or disconnected from the system.

-
-
- -

This control enhancement denies individuals who lack appropriate security clearances (i.e., individuals who do not possess security clearances or possess security clearances at a lower level than required) or who are not U.S. citizens, visual and electronic access to any classified information, Controlled Unclassified Information (CUI), or any other sensitive information contained on organizational information systems. Procedures for the use of maintenance personnel can be documented in security plans for the information systems.

- MP-6 - PL-2 -
- -

Determine if the organization:

- - MA-5(1)(a) -

implements procedures for the use of maintenance personnel that lack appropriate security clearances or are not U.S. citizens, that include the following requirements:

- - MA-5(1)(a)(1) -

maintenance personnel who do not have needed access authorizations, clearances, or formal access approvals are escorted and supervised during the performance of maintenance and diagnostic activities on the information system by approved organizational personnel who:

- - MA-5(1)(a)(1)[1] -

are fully cleared;

-
- - MA-5(1)(a)(1)[2] -

have appropriate access authorizations;

-
- - MA-5(1)(a)(1)[3] -

are technically qualified;

-
- MA-5(1)(a)(1) -
- - MA-5(1)(a)(2) -

prior to initiating maintenance or diagnostic activities by personnel who do not have needed access authorizations, clearances, or formal access approvals:

- - MA-5(1)(a)(2)[1] -

all volatile information storage components within the information system are sanitized; and

-
- - MA-5(1)(a)(2)[2] -

all nonvolatile storage media are removed; or

-
- - MA-5(1)(a)(2)[3] -

all nonvolatile storage media are physically disconnected from the system and secured; and

-
- MA-5(1)(a)(2) -
- MA-5(1)(a) -
- - MA-5(1)(b) -

develops and implements alternative security safeguards in the event an information system component cannot be sanitized, removed, or disconnected from the system.

- MA-5(1)(b) -
-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing maintenance personnel

-

information system media protection policy

-

physical and environmental protection policy

-

security plan

-

list of maintenance personnel requiring escort/supervision

-

maintenance records

-

access control records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with personnel security responsibilities

-

organizational personnel with physical access control responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel responsible for media sanitization

-

system/network administrators

-
-
- - TEST - -

Organizational processes for managing maintenance personnel without appropriate access

-

automated mechanisms supporting and/or implementing alternative security safeguards

-

automated mechanisms supporting and/or implementing information storage component sanitization

-
-
-
- - Security Clearances for Classified Systems - MA-5(2) - -

The organization ensures that personnel performing maintenance and diagnostic activities on an information system processing, storing, or transmitting classified information possess security clearances and formal access approvals for at least the highest classification level and for all compartments of information on the system.

-
- - PS-3 - - -

Determine if the organization ensures that personnel performing maintenance and diagnostic activities on an information system processing, storing, or transmitting classified information possess:

- - MA-5(2)[1] -

security clearances for at least the highest classification level on the system;

-
- - MA-5(2)[2] -

security clearances for all compartments of information on the system;

-
- - MA-5(2)[3] -

formal access approvals for at least the highest classification level on the system; and

-
- - MA-5(2)[4] -

formal access approvals for all compartments of information on the system.

-
-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing maintenance personnel

-

personnel records

-

maintenance records

-

access control records

-

access credentials

-

access authorizations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with personnel security responsibilities

-

organizational personnel with physical access control responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for managing security clearances for maintenance personnel

-
-
-
- - Citizenship Requirements for Classified Systems - MA-5(3) - -

The organization ensures that personnel performing maintenance and diagnostic activities on an information system processing, storing, or transmitting classified information are U.S. citizens.

-
- - PS-3 - - -

Determine if the organization ensures that personnel performing maintenance and diagnostic activities on an information system processing, storing, or transmitting classified information are U.S. citizens.

-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing maintenance personnel

-

personnel records

-

maintenance records

-

access control records

-

access credentials

-

access authorizations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with personnel security responsibilities

-

organizational personnel with information security responsibilities

-
-
-
- - Foreign Nationals - MA-5(4) - -

The organization ensures that:

- - (a) -

Cleared foreign nationals (i.e., foreign nationals with appropriate security clearances), are used to conduct maintenance and diagnostic activities on classified information systems only when the systems are jointly owned and operated by the United States and foreign allied governments, or owned and operated solely by foreign allied governments; and

-
- - (b) -

Approvals, consents, and detailed operational conditions regarding the use of foreign nationals to conduct maintenance and diagnostic activities on classified information systems are fully documented within Memoranda of Agreements.

-
-
- - PS-3 - - -

Determine if the organization ensures that:

- - MA-5(4)(a) -

cleared foreign nationals (i.e., foreign nationals with appropriate security clearances) are used to conduct maintenance and diagnostic activities on classified information systems only when the systems are:

- - MA-5(4)(a)[1] -

jointly owned and operated by the United States and foreign allied governments; or

-
- - MA-5(4)(a)[2] -

owned and operated solely by foreign allied governments; and

-
- MA-5(4)(a) -
- - MA-5(4)(b) -

approvals, consents, and detailed operational conditions regarding the use of foreign nationals to conduct maintenance and diagnostic activities on classified information systems are fully documented within Memoranda of Agreements.

- MA-5(4)(b) -
-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing maintenance personnel

-

information system media protection policy

-

access control policy and procedures

-

physical and environmental protection policy and procedures

-

memorandum of agreement

-

maintenance records

-

access control records

-

access credentials

-

access authorizations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities, organizational personnel with personnel security responsibilities

-

organizational personnel managing memoranda of agreements

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for managing foreign national maintenance personnel

-
-
-
- - Nonsystem-related Maintenance - MA-5(5) - -

The organization ensures that non-escorted personnel performing maintenance activities not directly associated with the information system but in the physical proximity of the system, have required access authorizations.

-
- -

Personnel performing maintenance activities in other capacities not directly related to the information system include, for example, physical plant personnel and janitorial personnel.

-
- -

Determine if the organization ensures that non-escorted personnel performing maintenance activities not directly associated with the information system but in the physical proximity of the system, have required access authorizations.

-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing maintenance personnel

-

information system media protection policy

-

access control policy and procedures

-

physical and environmental protection policy and procedures

-

maintenance records

-

access control records

-

access authorizations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with personnel security responsibilities

-

organizational personnel with physical access control responsibilities

-

organizational personnel with information security responsibilities

-
-
-
-
- - Timely Maintenance - - - - - - - MA-6 - -

The organization obtains maintenance support and/or spare parts for within of failure.

-
- -

Organizations specify the information system components that result in increased risk to organizational operations and assets, individuals, other organizations, or the Nation when the functionality provided by those components is not operational. Organizational actions to obtain maintenance support typically include having appropriate contracts in place.

- CM-8 - CP-2 - CP-7 - SA-14 - SA-15 -
- -

Determine if the organization:

- - MA-6[1] -

defines information system components for which maintenance support and/or spare parts are to be obtained;

-
- - MA-6[2] -

defines the time period within which maintenance support and/or spare parts are to be obtained after a failure;

-
- - MA-6[3] - - MA-6[3][a] -

obtains maintenance support for organization-defined information system components within the organization-defined time period of failure; and/or

-
- - MA-6[3][b] -

obtains spare parts for organization-defined information system components within the organization-defined time period of failure.

-
-
-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing information system maintenance

-

service provider contracts

-

service-level agreements

-

inventory and availability of spare parts

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for ensuring timely maintenance

-
-
- - Preventive Maintenance - - - - - - - MA-6(1) - -

The organization performs preventive maintenance on at .

-
- -

Preventive maintenance includes proactive care and servicing of organizational information systems components for the purpose of maintaining equipment and facilities in satisfactory operating condition. Such maintenance provides for the systematic inspection, tests, measurements, adjustments, parts replacement, detection, and correction of incipient failures either before they occur or before they develop into major defects. The primary goal of preventive maintenance is to avoid/mitigate the consequences of equipment failures. Preventive maintenance is designed to preserve and restore equipment reliability by replacing worn components before they actually fail. Methods of determining what preventive (or other) failure management policies to apply include, for example, original equipment manufacturer (OEM) recommendations, statistical failure records, requirements of codes, legislation, or regulations within a jurisdiction, expert opinion, maintenance that has already been conducted on similar equipment, or measured values and performance indications.

-
- -

Determine if the organization:

- - MA-6(1)[1] -

defines information system components on which preventive maintenance is to be performed;

-
- - MA-6(1)[2] -

defines time intervals within which preventive maintenance is to be performed on organization-defined information system components; and

-
- - MA-6(1)[3] -

performs preventive maintenance on organization-defined information system components at organization-defined time intervals.

-
-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing information system maintenance

-

service provider contracts

-

service-level agreements

-

security plan

-

maintenance records

-

list of system components requiring preventive maintenance

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for preventive maintenance

-

automated mechanisms supporting and/or implementing preventive maintenance

-
-
-
- - Predictive Maintenance - - - - - - - MA-6(2) - -

The organization performs predictive maintenance on at .

-
- -

Predictive maintenance, or condition-based maintenance, attempts to evaluate the condition of equipment by performing periodic or continuous (online) equipment condition monitoring. The goal of predictive maintenance is to perform maintenance at a scheduled point in time when the maintenance activity is most cost-effective and before the equipment loses performance within a threshold. The predictive component of predictive maintenance stems from the goal of predicting the future trend of the equipment's condition. This approach uses principles of statistical process control to determine at what point in the future maintenance activities will be appropriate. Most predictive maintenance inspections are performed while equipment is in service, thereby minimizing disruption of normal system operations. Predictive maintenance can result in substantial cost savings and higher system reliability. Predictive maintenance tends to include measurement of the item. To evaluate equipment condition, predictive maintenance utilizes nondestructive testing technologies such as infrared, acoustic (partial discharge and airborne ultrasonic), corona detection, vibration analysis, sound level measurements, oil analysis, and other specific online tests.

-
- -

Determine if the organization:

- - MA-6(2)[1] -

defines information system components on which predictive maintenance is to be performed;

-
- - MA-6(2)[2] -

defines time intervals within which predictive maintenance is to be performed on organization-defined information system components; and

-
- - MA-6(2)[3] -

performs predictive maintenance on organization-defined information system components at organization-defined time intervals.

-
-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing information system maintenance

-

service provider contracts

-

service-level agreements

-

security plan

-

maintenance records

-

list of system components requiring predictive maintenance

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for predictive maintenance

-

automated mechanisms supporting and/or implementing predictive maintenance

-
-
-
- - Automated Support for Predictive Maintenance - MA-6(3) - -

The organization employs automated mechanisms to transfer predictive maintenance data to a computerized maintenance management system.

-
- -

A computerized maintenance management system maintains a computer database of information about the maintenance operations of organizations and automates processing equipment condition data in order to trigger maintenance planning, execution, and reporting.

-
- -

Determine if the organization employs automated mechanisms to transfer predictive maintenance data to a computerized maintenance management system.

-
- - EXAMINE - -

Information system maintenance policy

-

procedures addressing information system maintenance

-

service provider contracts

-

service-level agreements

-

security plan

-

maintenance records

-

list of system components requiring predictive maintenance

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system maintenance responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms implementing the transfer of predictive maintenance data to a computerized maintenance management system

-

operations of the computer maintenance management system

-
-
-
-
-
- - Media Protection - - Media Protection Policy and Procedures - - - - - - - - - - MP-1 - -

The organization:

- - a. -

Develops, documents, and disseminates to :

- - 1. -

A media protection policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and

-
- - 2. -

Procedures to facilitate the implementation of the media protection policy and associated media protection controls; and

-
-
- - b. -

Reviews and updates the current:

- - 1. -

Media protection policy ; and

-
- - 2. -

Media protection procedures .

-
-
-
- -

This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the MP family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures.

- PM-9 -
- -

Determine if the organization:

- - MP-1(a) - - MP-1(a)(1) - - MP-1(a)(1)[1] -

develops and documents a media protection policy that addresses:

- - MP-1(a)(1)[1][a] -

purpose;

-
- - MP-1(a)(1)[1][b] -

scope;

-
- - MP-1(a)(1)[1][c] -

roles;

-
- - MP-1(a)(1)[1][d] -

responsibilities;

-
- - MP-1(a)(1)[1][e] -

management commitment;

-
- - MP-1(a)(1)[1][f] -

coordination among organizational entities;

-
- - MP-1(a)(1)[1][g] -

compliance;

-
-
- - MP-1(a)(1)[2] -

defines personnel or roles to whom the media protection policy is to be disseminated;

-
- - MP-1(a)(1)[3] -

disseminates the media protection policy to organization-defined personnel or roles;

-
-
- - MP-1(a)(2) - - MP-1(a)(2)[1] -

develops and documents procedures to facilitate the implementation of the media protection policy and associated media protection controls;

-
- - MP-1(a)(2)[2] -

defines personnel or roles to whom the procedures are to be disseminated;

-
- - MP-1(a)(2)[3] -

disseminates the procedures to organization-defined personnel or roles;

-
-
-
- - MP-1(b) - - MP-1(b)(1) - - MP-1(b)(1)[1] -

defines the frequency to review and update the current media protection policy;

-
- - MP-1(b)(1)[2] -

reviews and updates the current media protection policy with the organization-defined frequency;

-
-
- - MP-1(b)(2) - - MP-1(b)(2)[1] -

defines the frequency to review and update the current media protection procedures; and

-
- - MP-1(b)(2)[2] -

reviews and updates the current media protection procedures with the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

Media protection policy and procedures

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with media protection responsibilities

-

organizational personnel with information security responsibilities

-
-
- - NIST Special Publication 800-12 - - NIST Special Publication 800-100 - -
- - Media Access - - - - - - - MP-2 - -

The organization restricts access to to .

-
- -

Information system media includes both digital and non-digital media. Digital media includes, for example, diskettes, magnetic tapes, external/removable hard disk drives, flash drives, compact disks, and digital video disks. Non-digital media includes, for example, paper and microfilm. Restricting non-digital media access includes, for example, denying access to patient medical records in a community hospital unless the individuals seeking access to such records are authorized healthcare providers. Restricting access to digital media includes, for example, limiting access to design specifications stored on compact disks in the media library to the project leader and the individuals on the development team.

- AC-3 - IA-2 - MP-4 - PE-2 - PE-3 - PL-2 -
- -

Determine if the organization:

- - MP-2[1] -

defines types of digital and/or non-digital media requiring restricted access;

-
- - MP-2[2] -

defines personnel or roles authorized to access organization-defined types of digital and/or non-digital media; and

-
- - MP-2[3] -

restricts access to organization-defined types of digital and/or non-digital media to organization-defined personnel or roles.

-
-
- - EXAMINE - -

Information system media protection policy

-

procedures addressing media access restrictions

-

access control policy and procedures

-

physical and environmental protection policy and procedures

-

media storage facilities

-

access control records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media protection responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for restricting information media

-

automated mechanisms supporting and/or implementing media access restrictions

-
-
- - Automated Restricted Access - MP-2(1) - Withdrawn - MP-4 (2) - - - Cryptographic Protection - MP-2(2) - Withdrawn - SC-28 (1) - - - FIPS Publication 199 - - NIST Special Publication 800-111 - -
- - Media Marking - - - - - - - MP-3 - -

The organization:

- - a. -

Marks information system media indicating the distribution limitations, handling caveats, and applicable security markings (if any) of the information; and

-
- - b. -

Exempts from marking as long as the media remain within .

-
-
- -

The term security marking refers to the application/use of human-readable security attributes. The term security labeling refers to the application/use of security attributes with regard to internal data structures within information systems (see AC-16). Information system media includes both digital and non-digital media. Digital media includes, for example, diskettes, magnetic tapes, external/removable hard disk drives, flash drives, compact disks, and digital video disks. Non-digital media includes, for example, paper and microfilm. Security marking is generally not required for media containing information determined by organizations to be in the public domain or to be publicly releasable. However, some organizations may require markings for public information indicating that the information is publicly releasable. Marking of information system media reflects applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance.

- AC-16 - PL-2 - RA-3 -
- -

Determine if the organization:

- - MP-3(a) -

marks information system media indicating the:

- - MP-3(a)[1] -

distribution limitations of the information;

-
- - MP-3(a)[2] -

handling caveats of the information;

-
- - MP-3(a)[3] -

applicable security markings (if any) of the information;

-
-
- - MP-3(b) - - MP-3(b)[1] -

defines types of information system media to be exempted from marking as long as the media remain in designated controlled areas;

-
- - MP-3(b)[2] -

defines controlled areas where organization-defined types of information system media exempt from marking are to be retained; and

-
- - MP-3(b)[3] -

exempts organization-defined types of information system media from marking as long as the media remain within organization-defined controlled areas.

-
-
-
- - EXAMINE - -

Information system media protection policy

-

procedures addressing media marking

-

physical and environmental protection policy and procedures

-

security plan

-

list of information system media marking security attributes

-

designated controlled areas

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media protection and marking responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for marking information media

-

automated mechanisms supporting and/or implementing media marking

-
-
- - FIPS Publication 199 - -
- - Media Storage - - - - - - - MP-4 - -

The organization:

- - a. -

Physically controls and securely stores within ; and

-
- - b. -

Protects information system media until the media are destroyed or sanitized using approved equipment, techniques, and procedures.

-
-
- -

Information system media includes both digital and non-digital media. Digital media includes, for example, diskettes, magnetic tapes, external/removable hard disk drives, flash drives, compact disks, and digital video disks. Non-digital media includes, for example, paper and microfilm. Physically controlling information system media includes, for example, conducting inventories, ensuring procedures are in place to allow individuals to check out and return media to the media library, and maintaining accountability for all stored media. Secure storage includes, for example, a locked drawer, desk, or cabinet, or a controlled media library. The type of media storage is commensurate with the security category and/or classification of the information residing on the media. Controlled areas are areas for which organizations provide sufficient physical and procedural safeguards to meet the requirements established for protecting information and/or information systems. For media containing information determined by organizations to be in the public domain, to be publicly releasable, or to have limited or no adverse impact on organizations or individuals if accessed by other than authorized personnel, fewer safeguards may be needed. In these situations, physical access controls provide adequate protection.

- CP-6 - CP-9 - MP-2 - MP-7 - PE-3 -
- -

Determine if the organization:

- - MP-4(a) - - MP-4(a)[1] -

defines types of digital and/or non-digital media to be physically controlled and securely stored within designated controlled areas;

-
- - MP-4(a)[2] -

defines controlled areas designated to physically control and securely store organization-defined types of digital and/or non-digital media;

-
- - MP-4(a)[3] -

physically controls organization-defined types of digital and/or non-digital media within organization-defined controlled areas;

-
- - MP-4(a)[4] -

securely stores organization-defined types of digital and/or non-digital media within organization-defined controlled areas; and

-
-
- - MP-4(b) -

protects information system media until the media are destroyed or sanitized using approved equipment, techniques, and procedures.

-
-
- - EXAMINE - -

Information system media protection policy

-

procedures addressing media storage

-

physical and environmental protection policy and procedures

-

access control policy and procedures

-

security plan

-

information system media

-

designated controlled areas

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media protection and storage responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for storing information media

-

automated mechanisms supporting and/or implementing secure media storage/media protection

-
-
- - Cryptographic Protection - MP-4(1) - Withdrawn - SC-28 (1) - - - Automated Restricted Access - MP-4(2) - -

The organization employs automated mechanisms to restrict access to media storage areas and to audit access attempts and access granted.

-
- -

Automated mechanisms can include, for example, keypads on the external entries to media storage areas.

- AU-2 - AU-9 - AU-6 - AU-12 -
- -

Determine if the organization employs automated mechanisms to:

- - MP-4(2)[1] -

restrict access to media storage areas;

-
- - MP-4(2)[2] -

audit access attempts; and

-
- - MP-4(2)[3] -

audit access granted.

-
-
- - EXAMINE - -

Information system media protection policy

-

procedures addressing media storage

-

access control policy and procedures

-

physical and environmental protection policy and procedures

-

information system design documentation

-

information system configuration settings and associated documentation

-

media storage facilities

-

access control devices

-

access control records

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media protection and storage responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Automated mechanisms restricting access to media storage areas

-

automated mechanisms auditing access attempts and access granted to media storage areas

-
-
-
- - FIPS Publication 199 - - NIST Special Publication 800-56 - - NIST Special Publication 800-57 - - NIST Special Publication 800-111 - -
- - Media Transport - - - - - - - MP-5 - -

The organization:

- - a. -

Protects and controls during transport outside of controlled areas using ;

-
- - b. -

Maintains accountability for information system media during transport outside of controlled areas;

-
- - c. -

Documents activities associated with the transport of information system media; and

-
- - d. -

Restricts the activities associated with the transport of information system media to authorized personnel.

-
-
- -

Information system media includes both digital and non-digital media. Digital media includes, for example, diskettes, magnetic tapes, external/removable hard disk drives, flash drives, compact disks, and digital video disks. Non-digital media includes, for example, paper and microfilm. This control also applies to mobile devices with information storage capability (e.g., smart phones, tablets, E-readers), that are transported outside of controlled areas. Controlled areas are areas or spaces for which organizations provide sufficient physical and/or procedural safeguards to meet the requirements established for protecting information and/or information systems. -Physical and technical safeguards for media are commensurate with the security category or classification of the information residing on the media. Safeguards to protect media during transport include, for example, locked containers and cryptography. Cryptographic mechanisms can provide confidentiality and integrity protections depending upon the mechanisms used. Activities associated with transport include the actual transport as well as those activities such as releasing media for transport and ensuring that media enters the appropriate transport processes. For the actual transport, authorized transport and courier personnel may include individuals from outside the organization (e.g., U.S. Postal Service or a commercial transport or delivery service). Maintaining accountability of media during transport includes, for example, restricting transport activities to authorized personnel, and tracking and/or obtaining explicit records of transport activities as the media moves through the transportation system to prevent and detect loss, destruction, or tampering. Organizations establish documentation requirements for activities associated with the transport of information system media in accordance with organizational assessments of risk to include the flexibility to define different record-keeping methods for the different types of media transport as part of an overall system of transport-related records.

- AC-19 - CP-9 - MP-3 - MP-4 - RA-3 - SC-8 - SC-13 - SC-28 -
- -

Determine if the organization:

- - MP-5(a) - - MP-5(a)[1] -

defines types of information system media to be protected and controlled during transport outside of controlled areas;

-
- - MP-5(a)[2] -

defines security safeguards to protect and control organization-defined information system media during transport outside of controlled areas;

-
- - MP-5(a)[3] -

protects and controls organization-defined information system media during transport outside of controlled areas using organization-defined security safeguards;

-
-
- - MP-5(b) -

maintains accountability for information system media during transport outside of controlled areas;

-
- - MP-5(c) -

documents activities associated with the transport of information system media; and

-
- - MP-5(d) -

restricts the activities associated with transport of information system media to authorized personnel.

-
-
- - EXAMINE - -

Information system media protection policy

-

procedures addressing media storage

-

physical and environmental protection policy and procedures

-

access control policy and procedures

-

security plan

-

information system media

-

designated controlled areas

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media protection and storage responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for storing information media

-

automated mechanisms supporting and/or implementing media storage/media protection

-
-
- - Protection Outside of Controlled Areas - MP-5(1) - Withdrawn - MP-5 - - - Documentation of Activities - MP-5(2) - Withdrawn - MP-5 - - - Custodians - MP-5(3) - -

The organization employs an identified custodian during transport of information system media outside of controlled areas.

-
- -

Identified custodians provide organizations with specific points of contact during the media transport process and facilitate individual accountability. Custodial responsibilities can be transferred from one individual to another as long as an unambiguous custodian is identified at all times.

-
- -

Determine if the organization employs an identified custodian during transport of information system media outside of controlled areas.

-
- - EXAMINE - -

Information system media protection policy

-

procedures addressing media transport

-

physical and environmental protection policy and procedures

-

information system media transport records

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media transport responsibilities

-

organizational personnel with information security responsibilities

-
-
-
- - Cryptographic Protection - MP-5(4) - -

The information system implements cryptographic mechanisms to protect the confidentiality and integrity of information stored on digital media during transport outside of controlled areas.

-
- -

This control enhancement applies to both portable storage devices (e.g., USB memory sticks, compact disks, digital video disks, external/removable hard disk drives) and mobile devices with storage capability (e.g., smart phones, tablets, E-readers).

- MP-2 -
- -

Determine if the organization employs cryptographic mechanisms to protect the confidentiality and integrity of information stored on digital media during transport outside of controlled areas.

-
- - EXAMINE - -

Information system media protection policy

-

procedures addressing media transport

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system media transport records

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media transport responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Cryptographic mechanisms protecting information on digital media during transportation outside controlled areas

-
-
-
- - FIPS Publication 199 - - NIST Special Publication 800-60 - -
- - Media Sanitization - - - - - - - MP-6 - -

The organization:

- - a. -

Sanitizes prior to disposal, release out of organizational control, or release for reuse using in accordance with applicable federal and organizational standards and policies; and

-
- - b. -

Employs sanitization mechanisms with the strength and integrity commensurate with the security category or classification of the information.

-
-
- -

This control applies to all information system media, both digital and non-digital, subject to disposal or reuse, whether or not the media is considered removable. Examples include media found in scanners, copiers, printers, notebook computers, workstations, network components, and mobile devices. The sanitization process removes information from the media such that the information cannot be retrieved or reconstructed. Sanitization techniques, including clearing, purging, cryptographic erase, and destruction, prevent the disclosure of information to unauthorized individuals when such media is reused or released for disposal. Organizations determine the appropriate sanitization methods recognizing that destruction is sometimes necessary when other methods cannot be applied to media requiring sanitization. Organizations use discretion on the employment of approved sanitization techniques and procedures for media containing information deemed to be in the public domain or publicly releasable, or deemed to have no adverse impact on organizations or individuals if released for reuse or disposal. Sanitization of non-digital media includes, for example, removing a classified appendix from an otherwise unclassified document, or redacting selected sections or words from a document by obscuring the redacted sections/words in a manner equivalent in effectiveness to removing them from the document. NSA standards and policies control the sanitization process for media containing classified information.

- MA-2 - MA-4 - RA-3 - SC-4 -
- -

Determine if the organization:

- - MP-6(a) - - MP-6(a)[1] -

defines information system media to be sanitized prior to:

- - MP-6(a)[1][a] -

disposal;

-
- - MP-6(a)[1][b] -

release out of organizational control; or

-
- - MP-6(a)[1][c] -

release for reuse;

-
-
- - MP-6(a)[2] -

defines sanitization techniques or procedures to be used for sanitizing organization-defined information system media prior to:

- - MP-6(a)[2][a] -

disposal;

-
- - MP-6(a)[2][b] -

release out of organizational control; or

-
- - MP-6(a)[2][c] -

release for reuse;

-
-
- - MP-6(a)[3] -

sanitizes organization-defined information system media prior to disposal, release out of organizational control, or release for reuse using organization-defined sanitization techniques or procedures in accordance with applicable federal and organizational standards and policies; and

-
-
- - MP-6(b) -

employs sanitization mechanisms with strength and integrity commensurate with the security category or classification of the information.

-
-
- - EXAMINE - -

Information system media protection policy

-

procedures addressing media sanitization and disposal

-

applicable federal standards and policies addressing media sanitization

-

media sanitization records

-

audit records

-

information system design documentation

-

information system configuration settings and associated documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with media sanitization responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for media sanitization

-

automated mechanisms supporting and/or implementing media sanitization

-
-
- - Review / Approve / Track / Document / Verify - MP-6(1) - -

The organization reviews, approves, tracks, documents, and verifies media sanitization and disposal actions.

-
- -

Organizations review and approve media to be sanitized to ensure compliance with records-retention policies. Tracking/documenting actions include, for example, listing personnel who reviewed and approved sanitization and disposal actions, types of media sanitized, specific files stored on the media, sanitization methods used, date and time of the sanitization actions, personnel who performed the sanitization, verification actions taken, personnel who performed the verification, and disposal action taken. Organizations verify that the sanitization of the media was effective prior to disposal.

- SI-12 -
- -

Determine if the organization:

- - MP-6(1)[1] -

reviews media sanitization and disposal actions;

-
- - MP-6(1)[2] -

approves media sanitization and disposal actions;

-
- - MP-6(1)[3] -

tracks media sanitization and disposal actions;

-
- - MP-6(1)[4] -

documents media sanitization and disposal actions; and

-
- - MP-6(1)[5] -

verifies media sanitization and disposal actions.

-
-
- - EXAMINE - -

Information system media protection policy

-

procedures addressing media sanitization and disposal

-

media sanitization and disposal records

-

review records for media sanitization and disposal actions

-

approvals for media sanitization and disposal actions

-

tracking records

-

verification records

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media sanitization and disposal responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for media sanitization

-

automated mechanisms supporting and/or implementing media sanitization

-
-
-
- - Equipment Testing - - - - MP-6(2) - -

The organization tests sanitization equipment and procedures to verify that the intended sanitization is being achieved.

-
- -

Testing of sanitization equipment and procedures may be conducted by qualified and authorized external entities (e.g., other federal agencies or external service providers).

-
- -

Determine if the organization:

- - MP-6(2)[1] -

defines the frequency for testing sanitization equipment and procedures to verify that the intended sanitization is being achieved; and

-
- - MP-6(2)[2] -

tests sanitization equipment and procedures with the organization-defined frequency to verify that the intended sanitization is being achieved.

-
-
- - EXAMINE - -

Information system media protection policy

-

procedures addressing media sanitization and disposal

-

procedures addressing testing of media sanitization equipment

-

results of media sanitization equipment and procedures testing

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media sanitization responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for media sanitization

-

automated mechanisms supporting and/or implementing media sanitization

-
-
-
- - Nondestructive Techniques - - - - MP-6(3) - -

The organization applies nondestructive sanitization techniques to portable storage devices prior to connecting such devices to the information system under the following circumstances: .

-
- -

This control enhancement applies to digital media containing classified information and Controlled Unclassified Information (CUI). Portable storage devices can be the source of malicious code insertions into organizational information systems. Many of these devices are obtained from unknown and potentially untrustworthy sources and may contain malicious code that can be readily transferred to information systems through USB ports or other entry portals. While scanning such storage devices is always recommended, sanitization provides additional assurance that the devices are free of malicious code to include code capable of initiating zero-day attacks. Organizations consider nondestructive sanitization of portable storage devices when such devices are first purchased from the manufacturer or vendor prior to initial use or when organizations lose a positive chain of custody for the devices.

- SI-3 -
- -

Determine if the organization:

- - MP-6(3)[1] -

defines circumstances requiring sanitization of portable storage devices; and

-
- - MP-6(3)[2] -

applies nondestructive sanitization techniques to portable storage devices prior to connecting such devices to the information system under organization-defined circumstances requiring sanitization of portable storage devices.

-
-
- - EXAMINE - -

Information system media protection policy

-

procedures addressing media sanitization and disposal

-

list of circumstances requiring sanitization of portable storage devices

-

media sanitization records

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media sanitization responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for media sanitization of portable storage devices

-

automated mechanisms supporting and/or implementing media sanitization

-
-
-
- - Controlled Unclassified Information - MP-6(4) - Withdrawn - MP-6 - - - Classified Information - MP-6(5) - Withdrawn - MP-6 - - - Media Destruction - MP-6(6) - Withdrawn - MP-6 - - - Dual Authorization - - - - MP-6(7) - -

The organization enforces dual authorization for the sanitization of .

-
- -

Organizations employ dual authorization to ensure that information system media sanitization cannot occur unless two technically qualified individuals conduct the task. Individuals sanitizing information system media possess sufficient skills/expertise to determine if the proposed sanitization reflects applicable federal/organizational standards, policies, and procedures. Dual authorization also helps to ensure that sanitization occurs as intended, both protecting against errors and false claims of having performed the sanitization actions. Dual authorization may also be known as two-person control.

- AC-3 - MP-2 -
- -

Determine if the organization:

- - MP-6(7)[1] -

defines information system media requiring dual authorization to be enforced for sanitization of such media; and

-
- - MP-6(7)[2] -

enforces dual authorization for the sanitization of organization-defined information system media.

-
-
- - EXAMINE - -

Information system media protection policy

-

procedures addressing media sanitization and disposal

-

list of information system media requiring dual authorization for sanitization

-

authorization records

-

media sanitization records

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media sanitization responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes requiring dual authorization for media sanitization

-

automated mechanisms supporting and/or implementing media sanitization

-

automated mechanisms supporting and/or implementing dual authorization

-
-
-
- - Remote Purging / Wiping of Information - - - - - - - MP-6(8) - -

The organization provides the capability to purge/wipe information from either remotely or under the following conditions: .

-
- -

This control enhancement protects data/information on organizational information systems, system components, or devices (e.g., mobile devices) if such systems, components, or devices are obtained by unauthorized individuals. Remote purge/wipe commands require strong authentication to mitigate the risk of unauthorized individuals purging/wiping the system/component/device. The purge/wipe function can be implemented in a variety of ways including, for example, by overwriting data/information multiple times or by destroying the key necessary to decrypt encrypted data.

-
- -

Determine if the organization:

- - MP-6(8)[1] -

defines information systems, system components, or devices to purge/wipe either remotely or under specific organizational conditions;

-
- - MP-6(8)[2] -

defines conditions under which information is to be purged/wiped from organization-defined information systems, system components, or devices; and

-
- - MP-6(8)[3] -

provides the capability to purge/wipe information from organization-defined information systems, system components, or devices either:

- - MP-6(8)[3][a] -

remotely; or

-
- - MP-6(8)[3][b] -

under organization-defined conditions.

-
-
-
- - EXAMINE - -

Information system media protection policy

-

procedures addressing media sanitization and disposal

-

information system design documentation

-

information system configuration settings and associated documentation

-

media sanitization records

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media sanitization responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for purging/wiping media

-

automated mechanisms supporting and/or implementing purge/wipe capabilities

-
-
-
- - FIPS Publication 199 - - NIST Special Publication 800-60 - - NIST Special Publication 800-88 - - http://www.nsa.gov/ia/mitigation_guidance/media_destruction_guidance/index.shtml - -
- - Media Use - - - - - - - - - - - - - MP-7 - -

The organization the use of on using .

-
- -

Information system media includes both digital and non-digital media. Digital media includes, for example, diskettes, magnetic tapes, external/removable hard disk drives, flash drives, compact disks, and digital video disks. Non-digital media includes, for example, paper and microfilm. This control also applies to mobile devices with information storage capability (e.g., smart phones, tablets, E-readers). In contrast to MP-2, which restricts user access to media, this control restricts the use of certain types of media on information systems, for example, restricting/prohibiting the use of flash drives or external hard disk drives. Organizations can employ technical and nontechnical safeguards (e.g., policies, procedures, rules of behavior) to restrict the use of information system media. Organizations may restrict the use of portable storage devices, for example, by using physical cages on workstations to prohibit access to certain external ports, or disabling/removing the ability to insert, read or write to such devices. Organizations may also limit the use of portable storage devices to only approved devices including, for example, devices provided by the organization, devices provided by other approved organizations, and devices that are not personally owned. Finally, organizations may restrict the use of portable storage devices based on the type of device, for example, prohibiting the use of writeable, portable storage devices, and implementing this restriction by disabling or removing the capability to write to such devices.

- AC-19 - PL-4 -
- -

Determine if the organization:

- - MP-7[1] -

defines types of information system media to be:

- - MP-7[1][a] -

restricted on information systems or system components; or

-
- - MP-7[1][b] -

prohibited from use on information systems or system components;

-
-
- - MP-7[2] -

defines information systems or system components on which the use of organization-defined types of information system media is to be one of the following:

- - MP-7[2][a] -

restricted; or

-
- - MP-7[2][b] -

prohibited;

-
-
- - MP-7[3] -

defines security safeguards to be employed to restrict or prohibit the use of organization-defined types of information system media on organization-defined information systems or system components; and

-
- - MP-7[4] -

restricts or prohibits the use of organization-defined information system media on organization-defined information systems or system components using organization-defined security safeguards.

-
-
- - EXAMINE - -

Information system media protection policy

-

system use policy

-

procedures addressing media usage restrictions

-

security plan

-

rules of behavior

-

information system design documentation

-

information system configuration settings and associated documentation

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media use responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for media use

-

automated mechanisms restricting or prohibiting use of information system media on information systems or system components

-
-
- - Prohibit Use Without Owner - MP-7(1) - -

The organization prohibits the use of portable storage devices in organizational information systems when such devices have no identifiable owner.

-
- -

Requiring identifiable owners (e.g., individuals, organizations, or projects) for portable storage devices reduces the risk of using such technologies by allowing organizations to assign responsibility and accountability for addressing known vulnerabilities in the devices (e.g., malicious code insertion).

- PL-4 -
- -

Determine if the organization prohibits the use of portable storage devices in organizational information systems when such devices have no identifiable owner.

-
- - EXAMINE - -

Information system media protection policy

-

system use policy

-

procedures addressing media usage restrictions

-

security plan

-

rules of behavior

-

information system design documentation

-

information system configuration settings and associated documentation

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media use responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for media use

-

automated mechanisms prohibiting use of media on information systems or system components

-
-
-
- - Prohibit Use of Sanitization-resistant Media - MP-7(2) - -

The organization prohibits the use of sanitization-resistant media in organizational information systems.

-
- -

Sanitization-resistance applies to the capability to purge information from media. Certain types of media do not support sanitize commands, or if supported, the interfaces are not supported in a standardized way across these devices. Sanitization-resistant media include, for example, compact flash, embedded flash on boards and devices, solid state drives, and USB removable media.

- MP-6 -
- -

Determine if the organization prohibits the use of sanitization-resistant media in organizational information systems.

-
- - EXAMINE - -

Information system media protection policy, system use policy

-

procedures addressing media usage restrictions

-

rules of behavior

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media use responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for media use

-

automated mechanisms prohibiting use of media on information systems or system components

-
-
-
- - FIPS Publication 199 - - NIST Special Publication 800-111 - -
- - Media Downgrading - - - - - - - - - - MP-8 - -

The organization:

- - a. -

Establishes that includes employing downgrading mechanisms with ;

-
- - b. -

Ensures that the information system media downgrading process is commensurate with the security category and/or classification level of the information to be removed and the access authorizations of the potential recipients of the downgraded information;

-
- - c. -

Identifies ; and

-
- - d. -

Downgrades the identified information system media using the established process.

-
-
- -

This control applies to all information system media, digital and non-digital, subject to release outside of the organization, whether or not the media is considered removable. The downgrading process, when applied to system media, removes information from the media, typically by security category or classification level, such that the information cannot be retrieved or reconstructed. Downgrading of media includes redacting information to enable wider release and distribution. Downgrading of media also ensures that empty space on the media (e.g., slack space within files) is devoid of information.

-
- -

Determine if the organization:

- - MP-8(a) - - MP-8(a)[1] -

defines the information system media downgrading process;

-
- - MP-8(a)[2] -

defines the strength and integrity with which media downgrading mechanisms are to be employed;

-
- - MP-8(a)[3] -

establishes an organization-defined information system media downgrading process that includes employing downgrading mechanisms with organization-defined strength and integrity;

-
-
- - MP-8(b) -

ensures that the information system media downgrading process is commensurate with the:

- - MP-8(b)[1] -

security category and/or classification level of the information to be removed;

-
- - MP-8(b)[2] -

access authorizations of the potential recipients of the downgraded information;

-
-
- - MP-8(c) -

identifies/defines information system media requiring downgrading; and

-
- - MP-8(d) -

downgrades the identified information system media using the established process.

-
-
- - EXAMINE - -

Information system media protection policy

-

procedures addressing media downgrading

-

system categorization documentation

-

list of media requiring downgrading

-

records of media downgrading

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media downgrading responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for media downgrading

-

automated mechanisms supporting and/or implementing media downgrading

-
-
- - Documentation of Process - MP-8(1) - -

The organization documents information system media downgrading actions.

-
- -

Organizations can document the media downgrading process by providing information such as the downgrading technique employed, the identification number of the downgraded media, and the identity of the individual that authorized and/or performed the downgrading action.

-
- -

Determine if the organization documents information system media downgrading actions.

-
- - EXAMINE - -

Information system media protection policy

-

procedures addressing media downgrading

-

list of media requiring downgrading

-

records of media downgrading

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media downgrading responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for media downgrading

-

automated mechanisms supporting and/or implementing media downgrading

-
-
-
- - Equipment Testing - - - - - - - MP-8(2) - -

The organization employs of downgrading equipment and procedures to verify correct performance .

-
- -

Determine if the organization:

- - MP-8(2)[1] - - MP-8(2)[1][a] -

defines tests to be employed for downgrading equipment;

-
- - MP-8(2)[1][b] -

defines procedures to verify correct performance;

-
-
- - MP-8(2)[2] -

defines the frequency for employing tests of downgrading equipment and procedures to verify correct performance; and

-
- - MP-8(2)[3] -

employs organization-defined tests of downgrading equipment and procedures to verify correct performance with the organization-defined frequency.

-
-
- - EXAMINE - -

Information system media protection policy

-

procedures addressing media downgrading

-

procedures addressing testing of media downgrading equipment

-

results of downgrading equipment and procedures testing

-

audit records: other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media downgrading responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for media downgrading

-

automated mechanisms supporting and/or implementing media downgrading

-

automated mechanisms supporting and/or implementing tests for downgrading equipment

-
-
-
- - Controlled Unclassified Information - - - - MP-8(3) - -

The organization downgrades information system media containing prior to public release in accordance with applicable federal and organizational standards and policies.

-
- -

Determine if the organization:

- - MP-8(3)[1] -

defines Controlled Unclassified Information (CUI) contained on information system media that requires downgrading prior to public release; and

-
- - MP-8(3)[2] -

downgrades information system media containing organization-defined CUI prior to public release in accordance with applicable federal and organizational standards and policies.

-
-
- - EXAMINE - -

Information system media protection policy

-

access authorization policy

-

procedures addressing downgrading of media containing CUI

-

applicable federal and organizational standards and policies regarding protection of CUI

-

media downgrading records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media downgrading responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for media downgrading

-

automated mechanisms supporting and/or implementing media downgrading

-
-
-
- - Classified Information - MP-8(4) - -

The organization downgrades information system media containing classified information prior to release to individuals without required access authorizations in accordance with NSA standards and policies.

-
- -

Downgrading of classified information uses approved sanitization tools, techniques, and procedures to transfer information confirmed to be unclassified from classified information systems to unclassified media.

-
- -

Determine if the organization downgrades information system media containing classified information prior to release to individuals without required access authorizations in accordance with NSA standards and policies.

-
- - EXAMINE - -

Information system media protection policy

-

access authorization policy

-

procedures addressing downgrading of media containing classified information

-

procedures addressing handling of classified information

-

NSA standards and policies regarding protection of classified information

-

media downgrading records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information system media downgrading responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for media downgrading

-

automated mechanisms supporting and/or implementing media downgrading

-
-
-
-
-
- - Physical and Environmental Protection - - Physical and Environmental Protection Policy and Procedures - - - - - - - - - - PE-1 - -

The organization:

- - a. -

Develops, documents, and disseminates to :

- - 1. -

A physical and environmental protection policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and

-
- - 2. -

Procedures to facilitate the implementation of the physical and environmental protection policy and associated physical and environmental protection controls; and

-
-
- - b. -

Reviews and updates the current:

- - 1. -

Physical and environmental protection policy ; and

-
- - 2. -

Physical and environmental protection procedures .

-
-
-
- -

This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the PE family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures.

- PM-9 -
- -

Determine if the organization:

- - PE-1(a) - - PE-1(a)(1) - - PE-1(a)(1)[1] -

develops and documents a physical and environmental protection policy that addresses:

- - PE-1(a)(1)[1][a] -

purpose;

-
- - PE-1(a)(1)[1][b] -

scope;

-
- - PE-1(a)(1)[1][c] -

roles;

-
- - PE-1(a)(1)[1][d] -

responsibilities;

-
- - PE-1(a)(1)[1][e] -

management commitment;

-
- - PE-1(a)(1)[1][f] -

coordination among organizational entities;

-
- - PE-1(a)(1)[1][g] -

compliance;

-
-
- - PE-1(a)(1)[2] -

defines personnel or roles to whom the physical and environmental protection policy is to be disseminated;

-
- - PE-1(a)(1)[3] -

disseminates the physical and environmental protection policy to organization-defined personnel or roles;

-
-
- - PE-1(a)(2) - - PE-1(a)(2)[1] -

develops and documents procedures to facilitate the implementation of the physical and environmental protection policy and associated physical and environmental protection controls;

-
- - PE-1(a)(2)[2] -

defines personnel or roles to whom the procedures are to be disseminated;

-
- - PE-1(a)(2)[3] -

disseminates the procedures to organization-defined personnel or roles;

-
-
-
- - PE-1(b) - - PE-1(b)(1) - - PE-1(b)(1)[1] -

defines the frequency to review and update the current physical and environmental protection policy;

-
- - PE-1(b)(1)[2] -

reviews and updates the current physical and environmental protection policy with the organization-defined frequency;

-
-
- - PE-1(b)(2) - - PE-1(b)(2)[1] -

defines the frequency to review and update the current physical and environmental protection procedures; and

-
- - PE-1(b)(2)[2] -

reviews and updates the current physical and environmental protection procedures with the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

Physical and environmental protection policy and procedures

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical and environmental protection responsibilities

-

organizational personnel with information security responsibilities

-
-
- - NIST Special Publication 800-12 - - NIST Special Publication 800-100 - -
- - Physical Access Authorizations - - - - PE-2 - -

The organization:

- - a. -

Develops, approves, and maintains a list of individuals with authorized access to the facility where the information system resides;

-
- - b. -

Issues authorization credentials for facility access;

-
- - c. -

Reviews the access list detailing authorized facility access by individuals ; and

-
- - d. -

Removes individuals from the facility access list when access is no longer required.

-
-
- -

This control applies to organizational employees and visitors. Individuals (e.g., employees, contractors, and others) with permanent physical access authorization credentials are not considered visitors. Authorization credentials include, for example, badges, identification cards, and smart cards. Organizations determine the strength of authorization credentials needed (including level of forge-proof badges, smart cards, or identification cards) consistent with federal standards, policies, and procedures. This control only applies to areas within facilities that have not been designated as publicly accessible.

- PE-3 - PE-4 - PS-3 -
- -

Determine if the organization:

- - PE-2(a) - - PE-2(a)[1] -

develops a list of individuals with authorized access to the facility where the information system resides;

-
- - PE-2(a)[2] -

approves a list of individuals with authorized access to the facility where the information system resides;

-
- - PE-2(a)[3] -

maintains a list of individuals with authorized access to the facility where the information system resides;

-
-
- - PE-2(b) -

issues authorization credentials for facility access;

-
- - PE-2(c) - - PE-2(c)[1] -

defines the frequency to review the access list detailing authorized facility access by individuals;

-
- - PE-2(c)[2] -

reviews the access list detailing authorized facility access by individuals with the organization-defined frequency; and

-
-
- - PE-2(d) -

removes individuals from the facility access list when access is no longer required.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing physical access authorizations

-

security plan

-

authorized personnel access list

-

authorization credentials

-

physical access list reviews

-

physical access termination records and associated documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access authorization responsibilities

-

organizational personnel with physical access to information system facility

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for physical access authorizations

-

automated mechanisms supporting and/or implementing physical access authorizations

-
-
- - Access by Position / Role - PE-2(1) - -

The organization authorizes physical access to the facility where the information system resides based on position or role.

-
- - AC-2 - AC-3 - AC-6 - - -

Determine if the organization authorizes physical access to the facility where the information system resides based on position or role.

-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing physical access authorizations

-

physical access control logs or records

-

list of positions/roles and corresponding physical access authorizations

-

information system entry and exit points

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access authorization responsibilities

-

organizational personnel with physical access to information system facility

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for physical access authorizations

-

automated mechanisms supporting and/or implementing physical access authorizations

-
-
-
- - Two Forms of Identification - - - - PE-2(2) - -

The organization requires two forms of identification from for visitor access to the facility where the information system resides.

-
- -

Acceptable forms of government photo identification include, for example, passports, Personal Identity Verification (PIV) cards, and drivers’ licenses. In the case of gaining access to facilities using automated mechanisms, organizations may use PIV cards, key cards, PINs, and biometrics.

- IA-2 - IA-4 - IA-5 -
- -

Determine if the organization:

- - PE-2(2)[1] -

defines a list of acceptable forms of identification for visitor access to the facility where the information system resides; and

-
- - PE-2(2)[2] -

requires two forms of identification from the organization-defined list of acceptable forms of identification for visitor access to the facility where the information system resides.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing physical access authorizations

-

list of acceptable forms of identification for visitor access to the facility where information system resides

-

access authorization forms

-

access credentials

-

physical access control logs or records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access authorization responsibilities

-

organizational personnel with physical access to information system facility

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for physical access authorizations

-

automated mechanisms supporting and/or implementing physical access authorizations

-
-
-
- - Restrict Unescorted Access - - - - - - - PE-2(3) - -

The organization restricts unescorted access to the facility where the information system resides to personnel with .

-
- -

Due to the highly sensitive nature of classified information stored within certain facilities, it is important that individuals lacking sufficient security clearances, access approvals, or need to know, be escorted by individuals with appropriate credentials to ensure that such information is not exposed or otherwise compromised.

- PS-2 - PS-6 -
- -

Determine if the organization:

- - PE-2(3)[1] -

defines credentials to be employed to restrict unescorted access to the facility where the information system resides to authorized personnel;

-
- - PE-2(3)[2] -

restricts unescorted access to the facility where the information system resides to personnel with one or more of the following:

- - PE-2(3)[2][a] -

security clearances for all information contained within the system;

-
- - PE-2(3)[2][b] -

formal access authorizations for all information contained within the system;

-
- - PE-2(3)[2][c] -

need for access to all information contained within the system; and/or

-
- - PE-2(3)[2][d] -

organization-defined credentials.

-
-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing physical access authorizations

-

authorized personnel access list

-

security clearances

-

access authorizations

-

access credentials

-

physical access control logs or records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access authorization responsibilities

-

organizational personnel with physical access to information system facility

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for physical access authorizations

-

automated mechanisms supporting and/or implementing physical access authorizations

-
-
-
-
- - Physical Access Control - - - - - - - - - - - - - - - - - - - - - - - - - - - - PE-3 - -

The organization:

- - a. -

Enforces physical access authorizations at by;

- - 1. -

Verifying individual access authorizations before granting access to the facility; and

-
- - 2. -

Controlling ingress/egress to the facility using ;

-
-
- - b. -

Maintains physical access audit logs for ;

-
- - c. -

Provides to control access to areas within the facility officially designated as publicly accessible;

-
- - d. -

Escorts visitors and monitors visitor activity ;

-
- - e. -

Secures keys, combinations, and other physical access devices;

-
- - f. -

Inventories every ; and

-
- - g. -

Changes combinations and keys and/or when keys are lost, combinations are compromised, or individuals are transferred or terminated.

-
-
- -

This control applies to organizational employees and visitors. Individuals (e.g., employees, contractors, and others) with permanent physical access authorization credentials are not considered visitors. Organizations determine the types of facility guards needed including, for example, professional physical security staff or other personnel such as administrative staff or information system users. Physical access devices include, for example, keys, locks, combinations, and card readers. Safeguards for publicly accessible areas within organizational facilities include, for example, cameras, monitoring by guards, and isolating selected information systems and/or system components in secured areas. Physical access control systems comply with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance. The Federal Identity, Credential, and Access Management Program provides implementation guidance for identity, credential, and access management capabilities for physical access control systems. Organizations have flexibility in the types of audit logs employed. Audit logs can be procedural (e.g., a written log of individuals accessing the facility and when such access occurred), automated (e.g., capturing ID provided by a PIV card), or some combination thereof. Physical access points can include facility access points, interior access points to information systems and/or components requiring supplemental access controls, or both. Components of organizational information systems (e.g., workstations, terminals) may be located in areas designated as publicly accessible with organizations safeguarding access to such devices.

- AU-2 - AU-6 - MP-2 - MP-4 - PE-2 - PE-4 - PE-5 - PS-3 - RA-3 -
- -

Determine if the organization:

- - PE-3(a) - - PE-3(a)[1] -

defines entry/exit points to the facility where the information system resides;

-
- - PE-3(a)[2] -

enforces physical access authorizations at organization-defined entry/exit points to the facility where the information system resides by:

- - PE-3(a)[2](1) -

verifying individual access authorizations before granting access to the facility;

-
- - PE-3(a)[2](2) - - PE-3(a)[2](2)[a] -

defining physical access control systems/devices to be employed to control ingress/egress to the facility where the information system resides;

-
- - PE-3(a)[2](2)[b] -

using one or more of the following ways to control ingress/egress to the facility:

- - PE-3(a)[2](2)[b][1] -

organization-defined physical access control systems/devices; and/or

-
- - PE-3(a)[2](2)[b][2] -

guards;

-
-
-
-
-
- - PE-3(b) - - PE-3(b)[1] -

defines entry/exit points for which physical access audit logs are to be maintained;

-
- - PE-3(b)[2] -

maintains physical access audit logs for organization-defined entry/exit points;

-
-
- - PE-3(c) - - PE-3(c)[1] -

defines security safeguards to be employed to control access to areas within the facility officially designated as publicly accessible;

-
- - PE-3(c)[2] -

provides organization-defined security safeguards to control access to areas within the facility officially designated as publicly accessible;

-
-
- - PE-3(d) - - PE-3(d)[1] -

defines circumstances requiring visitor:

- - PE-3(d)[1][a] -

escorts;

-
- - PE-3(d)[1][b] -

monitoring;

-
-
- - PE-3(d)[2] -

in accordance with organization-defined circumstances requiring visitor escorts and monitoring:

- - PE-3(d)[2][a] -

escorts visitors;

-
- - PE-3(d)[2][b] -

monitors visitor activities;

-
-
-
- - PE-3(e) - - PE-3(e)[1] -

secures keys;

-
- - PE-3(e)[2] -

secures combinations;

-
- - PE-3(e)[3] -

secures other physical access devices;

-
-
- - PE-3(f) - - PE-3(f)[1] -

defines physical access devices to be inventoried;

-
- - PE-3(f)[2] -

defines the frequency to inventory organization-defined physical access devices;

-
- - PE-3(f)[3] -

inventories the organization-defined physical access devices with the organization-defined frequency;

-
-
- - PE-3(g) - - PE-3(g)[1] -

defines the frequency to change combinations and keys; and

-
- - PE-3(g)[2] -

changes combinations and keys with the organization-defined frequency and/or when:

- - PE-3(g)[2][a] -

keys are lost;

-
- - PE-3(g)[2][b] -

combinations are compromised;

-
- - PE-3(g)[2][c] -

individuals are transferred or terminated.

-
-
-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing physical access control

-

security plan

-

physical access control logs or records

-

inventory records of physical access control devices

-

information system entry and exit points

-

records of key and lock combination changes

-

storage locations for physical access control devices

-

physical access control devices

-

list of security safeguards controlling access to designated publicly accessible areas within facility

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access control responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for physical access control

-

automated mechanisms supporting and/or implementing physical access control

-

physical access control devices

-
-
- - Information System Access - - - - PE-3(1) - -

The organization enforces physical access authorizations to the information system in addition to the physical access controls for the facility at .

-
- -

This control enhancement provides additional physical security for those areas within facilities where there is a concentration of information system components (e.g., server rooms, media storage areas, data and communications centers).

- PS-2 -
- -

Determine if the organization:

- - PE-3(1)[1] -

defines physical spaces containing one or more components of the information system; and

-
- - PE-3(1)[2] -

enforces physical access authorizations to the information system in addition to the physical access controls for the facility at organization-defined physical spaces containing one or more components of the information system.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing physical access control

-

physical access control logs or records

-

physical access control devices

-

access authorizations

-

access credentials

-

information system entry and exit points

-

list of areas within the facility containing concentrations of information system components or information system components requiring additional physical protection

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access authorization responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for physical access control to the information system/components

-

automated mechanisms supporting and/or implementing physical access control for facility areas containing information system components

-
-
-
- - Facility / Information System Boundaries - - - - PE-3(2) - -

The organization performs security checks at the physical boundary of the facility or information system for unauthorized exfiltration of information or removal of information system components.

-
- -

Organizations determine the extent, frequency, and/or randomness of security checks to adequately mitigate risk associated with exfiltration.

- AC-4 - SC-7 -
- -

Determine if the organization:

- - PE-3(2)[1] -

defines the frequency to perform security checks at the physical boundary of the facility or information system for:

- - PE-3(2)[1][a] -

unauthorized exfiltration of information; or

-
- - PE-3(2)[1][b] -

removal of information system components; and

-
-
- - PE-3(2)[2] -

performs security checks with the organization-defined frequency at the physical boundary of the facility or information system for:

- - PE-3(2)[2][a] -

unauthorized exfiltration of information; or

-
- - PE-3(2)[2][b] -

removal of information system components.

-
-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing physical access control

-

physical access control logs or records

-

records of security checks

-

security audit reports

-

security inspection reports

-

facility layout documentation

-

information system entry and exit points

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access control responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for physical access control to the facility and/or information system

-

automated mechanisms supporting and/or implementing physical access control for the facility or information system

-

automated mechanisms supporting and/or implementing security checks for unauthorized exfiltration of information

-
-
-
- - Continuous Guards / Alarms / Monitoring - PE-3(3) - -

The organization employs guards and/or alarms to monitor every physical access point to the facility where the information system resides 24 hours per day, 7 days per week.

-
- - CP-6 - CP-7 - - -

Determine if the organization employs one or more of the following to monitor every physical access point to the facility where the information system resides 24 hours per day, 7 days per week:

- - PE-3(3)[1] -

guards; and/or

-
- - PE-3(3)[2] -

alarms.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing physical access control

-

physical access control logs or records

-

physical access control devices

-

facility surveillance records

-

facility layout documentation

-

information system entry and exit points

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access control responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for physical access control to the facility where the information system resides

-

automated mechanisms supporting and/or implementing physical access control for the facility where the information system resides

-
-
-
- - Lockable Casings - - - - PE-3(4) - -

The organization uses lockable physical casings to protect from unauthorized physical access.

-
- -

Determine if the organization:

- - PE-3(4)[1] -

defines information system components to be protected from unauthorized physical access using lockable physical casings; and

-
- - PE-3(4)[2] -

uses lockable physical casings to protect organization-defined information system components from unauthorized physical access.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing physical access control

-

security plan

-

list of information system components requiring protection through lockable physical casings

-

lockable physical casings

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access control responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Lockable physical casings

-
-
-
- - Tamper Protection - - - - - - - - - - PE-3(5) - -

The organization employs to physical tampering or alteration of within the information system.

-
- -

Organizations may implement tamper detection/prevention at selected hardware components or tamper detection at some components and tamper prevention at other components. Tamper detection/prevention activities can employ many types of anti-tamper technologies including, for example, tamper-detection seals and anti-tamper coatings. Anti-tamper programs help to detect hardware alterations through counterfeiting and other supply chain-related risks.

- SA-12 -
- -

Determine if the organization:

- - PE-3(5)[1] -

defines security safeguards to be employed to detect and/or prevent physical tampering or alteration of organization-defined hardware components within the information system;

-
- - PE-3(5)[2] -

defines hardware components within the information system for which security safeguards are to be employed to detect and/or prevent physical tampering or alteration of such components;

-
- - PE-3(5)[3] -

employs organization-defined security safeguards to do one or more of the following:

- - PE-3(5)[3][a] -

detect physical tampering or alteration of organization-defined hardware components within the information system; and/or

-
- - PE-3(5)[3][b] -

prevent physical tampering or alteration of organization-defined hardware components within the information system.

-
-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing physical access control

-

list of security safeguards to detect/prevent physical tampering or alteration of information system hardware components

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access control responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes to detect/prevent physical tampering or alteration of information system hardware components

-

automated mechanisms/security safeguards supporting and/or implementing detection/prevention of physical tampering/alternation of information system hardware components

-
-
-
- - Facility Penetration Testing - - - - PE-3(6) - -

The organization employs a penetration testing process that includes , unannounced attempts to bypass or circumvent security controls associated with physical access points to the facility.

-
- - CA-2 - CA-7 - - -

Determine if the organization:

- - PE-3(6)[1] -

defines the frequency of unannounced attempts to be included in a penetration testing process to bypass or circumvent security controls associated with physical access points to the facility; and

-
- - PE-3(6)[2] -

employs a penetration testing process with the organization-defined frequency that includes unannounced attempts to bypass or circumvent security controls associated with physical access points to the facility.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing physical access control

-

procedures addressing penetration testing

-

rules of engagement and associated documentation

-

penetration test results

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access control responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for facility penetration testing

-

automated mechanisms supporting and/or implementing facility penetration testing

-
-
-
- - FIPS Publication 201 - - NIST Special Publication 800-73 - - NIST Special Publication 800-76 - - NIST Special Publication 800-78 - - NIST Special Publication 800-116 - - ICD 704 - - ICD 705 - - DoD Instruction 5200.39 - - Personal Identity Verification (PIV) in Enterprise Physical Access Control System (E-PACS) - - http://idmanagement.gov - - http://fips201ep.cio.gov - -
- - Access Control for Transmission Medium - - - - - - - PE-4 - -

The organization controls physical access to within organizational facilities using .

-
- -

Physical security safeguards applied to information system distribution and transmission lines help to prevent accidental damage, disruption, and physical tampering. In addition, physical safeguards may be necessary to help prevent eavesdropping or in transit modification of unencrypted transmissions. Security safeguards to control physical access to system distribution and transmission lines include, for example: (i) locked wiring closets; (ii) disconnected or locked spare jacks; and/or (iii) protection of cabling by conduit or cable trays.

- MP-2 - MP-4 - PE-2 - PE-3 - PE-5 - SC-7 - SC-8 -
- -

Determine if the organization:

- - PE-4[1] -

defines information system distribution and transmission lines requiring physical access controls;

-
- - PE-4[2] -

defines security safeguards to be employed to control physical access to organization-defined information system distribution and transmission lines within organizational facilities; and

-
- - PE-4[3] -

controls physical access to organization-defined information system distribution and transmission lines within organizational facilities using organization-defined security safeguards.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing access control for transmission medium

-

information system design documentation

-

facility communications and wiring diagrams

-

list of physical security safeguards applied to information system distribution and transmission lines

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access control responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for access control to distribution and transmission lines

-

automated mechanisms/security safeguards supporting and/or implementing access control to distribution and transmission lines

-
-
- - NSTISSI No. 7003 - -
- - Access Control for Output Devices - PE-5 - -

The organization controls physical access to information system output devices to prevent unauthorized individuals from obtaining the output.

-
- -

Controlling physical access to output devices includes, for example, placing output devices in locked rooms or other secured areas and allowing access to authorized individuals only, and placing output devices in locations that can be monitored by organizational personnel. Monitors, printers, copiers, scanners, facsimile machines, and audio devices are examples of information system output devices.

- PE-2 - PE-3 - PE-4 - PE-18 -
- -

Determine if the organization controls physical access to information system output devices to prevent unauthorized individuals from obtaining the output.

-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing access control for display medium

-

facility layout of information system components

-

actual displays from information system components

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access control responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for access control to output devices

-

automated mechanisms supporting and/or implementing access control to output devices

-
-
- - Access to Output by Authorized Individuals - - - - PE-5(1) - -

The organization:

- - (a) -

Controls physical access to output from ; and

-
- - (b) -

Ensures that only authorized individuals receive output from the device.

-
-
- -

Controlling physical access to selected output devices includes, for example, placing printers, copiers, and facsimile machines in controlled areas with keypad access controls or limiting access to individuals with certain types of badges.

-
- -

Determine if the organization:

- - PE-5(1)(a) - - PE-5(1)(a)[1] -

defines output devices whose output requires physical access controls;

-
- - PE-5(1)(a)[2] -

controls physical access to output from organization-defined output devices; and

-
- PE-5(1)(a) -
- - PE-5(1)(b) -

ensures that only authorized individuals receive output from the device.

- PE-5(1)(b) -
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing physical access control

-

list of output devices and associated outputs requiring physical access controls

-

physical access control logs or records for areas containing output devices and related outputs

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access control responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for access control to output devices

-

automated mechanisms supporting and/or implementing access control to output devices

-
-
-
- - Access to Output by Individual Identity - - - - PE-5(2) - -

The information system:

- - (a) -

Controls physical access to output from ; and

-
- - (b) -

Links individual identity to receipt of the output from the device.

-
-
- -

Controlling physical access to selected output devices includes, for example, installing security functionality on printers, copiers, and facsimile machines that allows organizations to implement authentication (e.g., using a PIN or hardware token) on output devices prior to the release of output to individuals.

-
- -

Determine if:

- - PE-5(2)(a) - - PE-5(2)(a)[1] -

the organization defines output devices whose output requires physical access controls;

-
- - PE-5(2)(a)[2] -

the information system controls physical access to output from organization-defined output devices; and

-
- PE-5(2)(a) -
- - PE-5(2)(b) -

the information system links individual identity to receipt of the output from the device.

- PE-5(2)(b) -
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing physical access control

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of output devices and associated outputs requiring physical access controls

-

physical access control logs or records for areas containing output devices and related outputs

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access control responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developers

-
-
- - TEST - -

Organizational processes for access control to output devices

-

automated mechanisms supporting and/or implementing access control to output devices

-
-
-
- - Marking Output Devices - - - - PE-5(3) - -

The organization marks indicating the appropriate security marking of the information permitted to be output from the device.

-
- -

Outputs devices include, for example, printers, monitors, facsimile machines, scanners, copiers, and audio devices. This control enhancement is generally applicable to information system output devices other than mobiles devices.

-
- -

Determine if the organization:

- - PE-5(3)[1] -

defines information system output devices to be marked with appropriate security marking of the information permitted to be output from such devices; and

-
- - PE-5(3)[2] -

marks organization-defined information system output devices indicating the appropriate security marking of the information permitted to be output from the device.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing physical access control

-

security markings for information types permitted as output from information system output devices

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access control responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for marking output devices

-
-
-
-
- - Monitoring Physical Access - - - - - - - PE-6 - -

The organization:

- - a. -

Monitors physical access to the facility where the information system resides to detect and respond to physical security incidents;

-
- - b. -

Reviews physical access logs and upon occurrence of ; and

-
- - c. -

Coordinates results of reviews and investigations with the organizational incident response capability.

-
-
- -

Organizational incident response capabilities include investigations of and responses to detected physical security incidents. Security incidents include, for example, apparent security violations or suspicious physical access activities. Suspicious physical access activities include, for example: (i) accesses outside of normal work hours; (ii) repeated accesses to areas not normally accessed; (iii) accesses for unusual lengths of time; and (iv) out-of-sequence accesses.

- CA-7 - IR-4 - IR-8 -
- -

Determine if the organization:

- - PE-6(a) -

monitors physical access to the facility where the information system resides to detect and respond to physical security incidents;

-
- - PE-6(b) - - PE-6(b)[1] -

defines the frequency to review physical access logs;

-
- - PE-6(b)[2] -

defines events or potential indication of events requiring physical access logs to be reviewed;

-
- - PE-6(b)[3] -

reviews physical access logs with the organization-defined frequency and upon occurrence of organization-defined events or potential indications of events; and

-
-
- - PE-6(c) -

coordinates results of reviews and investigations with the organizational incident response capability.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing physical access monitoring

-

security plan

-

physical access logs or records

-

physical access monitoring records

-

physical access log reviews

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access monitoring responsibilities

-

organizational personnel with incident response responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for monitoring physical access

-

automated mechanisms supporting and/or implementing physical access monitoring

-

automated mechanisms supporting and/or implementing reviewing of physical access logs

-
-
- - Intrusion Alarms / Surveillance Equipment - PE-6(1) - -

The organization monitors physical intrusion alarms and surveillance equipment.

-
- -

Determine if the organization monitors physical intrusion alarms and surveillance equipment.

-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing physical access monitoring

-

security plan

-

physical access logs or records

-

physical access monitoring records

-

physical access log reviews

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access monitoring responsibilities

-

organizational personnel with incident response responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for monitoring physical intrusion alarms and surveillance equipment

-

automated mechanisms supporting and/or implementing physical access monitoring

-

automated mechanisms supporting and/or implementing physical intrusion alarms and surveillance equipment

-
-
-
- - Automated Intrusion Recognition / Responses - - - - - - - PE-6(2) - -

The organization employs automated mechanisms to recognize and initiate .

-
- - SI-4 - - -

Determine if the organization:

- - PE-6(2)[1] -

defines classes/types of intrusions to be recognized by automated mechanisms;

-
- - PE-6(2)[2] -

defines response actions to be initiated by automated mechanisms when organization-defined classes/types of intrusions are recognized; and

-
- - PE-6(2)[3] -

employs automated mechanisms to recognize organization-defined classes/types of intrusions and initiate organization-defined response actions.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing physical access monitoring

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of response actions to be initiated when specific classes/types of intrusions are recognized

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access monitoring responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for monitoring physical access

-

automated mechanisms supporting and/or implementing physical access monitoring

-

automated mechanisms supporting and/or implementing recognition of classes/types of intrusions and initiation of a response

-
-
-
- - Video Surveillance - - - - - - - PE-6(3) - -

The organization employs video surveillance of and retains video recordings for .

-
- -

This control enhancement focuses on recording surveillance video for purposes of subsequent review, if circumstances so warrant (e.g., a break-in detected by other means). It does not require monitoring surveillance video although organizations may choose to do so. Note that there may be legal considerations when performing and retaining video surveillance, especially if such surveillance is in a public location.

-
- -

Determine if the organization:

- - PE-6(3)[1] -

defines operational areas where video surveillance is to be employed;

-
- - PE-6(3)[2] -

defines a time period to retain video recordings of organization-defined operational areas;

-
- - PE-6(3)[3] - - PE-6(3)[3][a] -

employs video surveillance of organization-defined operational areas; and

-
- - PE-6(3)[3][b] -

retains video recordings for the organization-defined time period.

-
-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing physical access monitoring

-

video surveillance equipment used to monitor operational areas

-

video recordings of operational areas where video surveillance is employed

-

video surveillance equipment logs or records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access monitoring responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for monitoring physical access

-

automated mechanisms supporting and/or implementing physical access monitoring

-

automated mechanisms supporting and/or implementing video surveillance

-
-
-
- - Monitoring Physical Access to Information Systems - - - - PE-6(4) - -

The organization monitors physical access to the information system in addition to the physical access monitoring of the facility as .

-
- -

This control enhancement provides additional monitoring for those areas within facilities where there is a concentration of information system components (e.g., server rooms, media storage areas, communications centers).

- PS-2 - PS-3 -
- -

Determine if the organization:

- - PE-6(4)[1] -

defines physical spaces containing one or more components of the information system; and

-
- - PE-6(4)[2] -

monitors physical access to the information system in addition to the physical access monitoring of the facility at organization-defined physical spaces containing one or more components of the information system.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing physical access monitoring

-

physical access control logs or records

-

physical access control devices

-

access authorizations

-

access credentials

-

list of areas within the facility containing concentrations of information system components or information system components requiring additional physical access monitoring

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with physical access monitoring responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for monitoring physical access to the information system

-

automated mechanisms supporting and/or implementing physical access monitoring for facility areas containing information system components

-
-
-
-
- - Visitor Control - PE-7 - Withdrawn - PE-2 - PE-3 - - - Visitor Access Records - - - - - - - PE-8 - -

The organization:

- - a. -

Maintains visitor access records to the facility where the information system resides for ; and

-
- - b. -

Reviews visitor access records .

-
-
- -

Visitor access records include, for example, names and organizations of persons visiting, visitor signatures, forms of identification, dates of access, entry and departure times, purposes of visits, and names and organizations of persons visited. Visitor access records are not required for publicly accessible areas.

-
- -

Determine if the organization:

- - PE-8(a) - - PE-8(a)[1] -

defines the time period to maintain visitor access records to the facility where the information system resides;

-
- - PE-8(a)[2] -

maintains visitor access records to the facility where the information system resides for the organization-defined time period;

-
-
- - PE-8(b) - - PE-8(b)[1] -

defines the frequency to review visitor access records; and

-
- - PE-8(b)[2] -

reviews visitor access records with the organization-defined frequency.

-
-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing visitor access records

-

security plan

-

visitor access control logs or records

-

visitor access record or log reviews

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with visitor access records responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for maintaining and reviewing visitor access records

-

automated mechanisms supporting and/or implementing maintenance and review of visitor access records

-
-
- - Automated Records Maintenance / Review - PE-8(1) - -

The organization employs automated mechanisms to facilitate the maintenance and review of visitor access records.

-
- -

Determine if the organization employs automated mechanisms to facilitate the maintenance and review of visitor access records.

-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing visitor access records

-

automated mechanisms supporting management of visitor access records

-

visitor access control logs or records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with visitor access records responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for maintaining and reviewing visitor access records

-

automated mechanisms supporting and/or implementing maintenance and review of visitor access records

-
-
-
- - Physical Access Records - PE-8(2) - Withdrawn - PE-2 - -
- - Power Equipment and Cabling - PE-9 - -

The organization protects power equipment and power cabling for the information system from damage and destruction.

-
- -

Organizations determine the types of protection necessary for power equipment and cabling employed at different locations both internal and external to organizational facilities and environments of operation. This includes, for example, generators and power cabling outside of buildings, internal cabling and uninterruptable power sources within an office or data center, and power sources for self-contained entities such as vehicles and satellites.

- PE-4 -
- -

Determine if the organization protects power equipment and power cabling for the information system from damage and destruction.

-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing power equipment/cabling protection

-

facilities housing power equipment/cabling

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for protecting power equipment/cabling

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing protection of power equipment/cabling

-
-
- - Redundant Cabling - - - - PE-9(1) - -

The organization employs redundant power cabling paths that are physically separated by .

-
- -

Physically separate, redundant power cables help to ensure that power continues to flow in the event one of the cables is cut or otherwise damaged.

-
- -

Determine if the organization:

- - PE-9(1)[1] -

defines the distance by which redundant power cabling paths are to be physically separated; and

-
- - PE-9(1)[2] -

employs redundant power cabling paths that are physically separated by organization-defined distance.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing power equipment/cabling protection

-

facilities housing power equipment/cabling

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for protecting power equipment/cabling

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing protection of power equipment/cabling

-
-
-
- - Automatic Voltage Controls - - - - PE-9(2) - -

The organization employs automatic voltage controls for .

-
- -

Determine if the organization:

- - PE-9(2)[1] -

defines critical information system components that require automatic voltage controls; and

-
- - PE-9(2)[2] -

employs automatic voltage controls for organization-defined critical information system components.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing voltage control

-

security plan

-

list of critical information system components requiring automatic voltage controls

-

automatic voltage control mechanisms and associated configurations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for environmental protection of information system components

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing automatic voltage controls

-
-
-
-
- - Emergency Shutoff - - - - PE-10 - -

The organization:

- - a. -

Provides the capability of shutting off power to the information system or individual system components in emergency situations;

-
- - b. -

Places emergency shutoff switches or devices in to facilitate safe and easy access for personnel; and

-
- - c. -

Protects emergency power shutoff capability from unauthorized activation.

-
-
- -

This control applies primarily to facilities containing concentrations of information system resources including, for example, data centers, server rooms, and mainframe computer rooms.

- PE-15 -
- -

Determine if the organization:

- - PE-10(a) -

provides the capability of shutting off power to the information system or individual system components in emergency situations;

-
- - PE-10(b) - - PE-10(b)[1] -

defines the location of emergency shutoff switches or devices by information system or system component;

-
- - PE-10(b)[2] -

places emergency shutoff switches or devices in the organization-defined location by information system or system component to facilitate safe and easy access for personnel; and

-
-
- - PE-10(c) -

protects emergency power shutoff capability from unauthorized activation.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing power source emergency shutoff

-

security plan

-

emergency shutoff controls or switches

-

locations housing emergency shutoff switches and devices

-

security safeguards protecting emergency power shutoff capability from unauthorized activation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for emergency power shutoff capability (both implementing and using the capability)

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing emergency power shutoff

-
-
- - Accidental / Unauthorized Activation - PE-10(1) - Withdrawn - PE-10 - -
- - Emergency Power - - - - PE-11 - -

The organization provides a short-term uninterruptible power supply to facilitate in the event of a primary power source loss.

-
- - AT-3 - CP-2 - CP-7 - - -

Determine if the organization provides a short-term uninterruptible power supply to facilitate one or more of the following in the event of a primary power source loss:

- - PE-11[1] -

an orderly shutdown of the information system; and/or

-
- - PE-11[2] -

transition of the information system to long-term alternate power.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing emergency power

-

uninterruptible power supply

-

uninterruptible power supply documentation

-

uninterruptible power supply test records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for emergency power and/or planning

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing uninterruptible power supply

-

the uninterruptable power supply

-
-
- - Long-term Alternate Power Supply - Minimal Operational Capability - PE-11(1) - -

The organization provides a long-term alternate power supply for the information system that is capable of maintaining minimally required operational capability in the event of an extended loss of the primary power source.

-
- -

This control enhancement can be satisfied, for example, by the use of a secondary commercial power supply or other external power supply. Long-term alternate power supplies for the information system can be either manually or automatically activated.

-
- -

Determine if the organization provides a long-term alternate power supply for the information system that is capable of maintaining minimally required operational capability in the event of an extended loss of the primary power source.

-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing emergency power

-

alternate power supply

-

alternate power supply documentation

-

alternate power supply test records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for emergency power and/or planning

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing alternate power supply

-

the alternate power supply

-
-
-
- - Long-term Alternate Power Supply - Self-contained - - - - PE-11(2) - -

The organization provides a long-term alternate power supply for the information system that is:

- - (a) -

Self-contained;

-
- - (b) -

Not reliant on external power generation; and

-
- - (c) -

Capable of maintaining in the event of an extended loss of the primary power source.

-
-
- -

This control enhancement can be satisfied, for example, by the use of one or more generators with sufficient capacity to meet the needs of the organization. Long-term alternate power supplies for organizational information systems are either manually or automatically activated.

-
- -

Determine if the organization provides a long-term alternate power supply for the information system that is:

- - PE-11(2)(a) -

self-contained;

- PE-11(2)(a) -
- - PE-11(2)(b) -

not reliant on external power generation;

- PE-11(2)(b) -
- - PE-11(2)(c) -

capable of maintaining one of the following in the event of an extended loss of the primary power source:

- - PE-11(2)(c)[1] -

minimally required operational capability; or

-
- - PE-11(2)(c)[2] -

full operational capability.

-
- PE-11(2)(c) -
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing emergency power

-

alternate power supply

-

alternate power supply documentation

-

alternate power supply test records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for emergency power and/or planning

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing alternate power supply

-

the alternate power supply

-
-
-
-
- - Emergency Lighting - PE-12 - -

The organization employs and maintains automatic emergency lighting for the information system that activates in the event of a power outage or disruption and that covers emergency exits and evacuation routes within the facility.

-
- -

This control applies primarily to facilities containing concentrations of information system resources including, for example, data centers, server rooms, and mainframe computer rooms.

- CP-2 - CP-7 -
- -

Determine if the organization employs and maintains automatic emergency lighting for the information system that:

- - PE-12[1] -

activates in the event of a power outage or disruption; and

-
- - PE-12[2] -

covers emergency exits and evacuation routes within the facility.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing emergency lighting

-

emergency lighting documentation

-

emergency lighting test records

-

emergency exits and evacuation routes

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for emergency lighting and/or planning

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing emergency lighting capability

-
-
- - Essential Missions / Business Functions - PE-12(1) - -

The organization provides emergency lighting for all areas within the facility supporting essential missions and business functions.

-
- -

Determine if the organization provides emergency lighting for all areas within the facility supporting essential missions and business functions.

-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing emergency lighting

-

emergency lighting documentation

-

emergency lighting test records

-

emergency exits and evacuation routes

-

areas/locations within facility supporting essential missions and business functions

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for emergency lighting and/or planning

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing emergency lighting capability

-
-
-
-
- - Fire Protection - PE-13 - -

The organization employs and maintains fire suppression and detection devices/systems for the information system that are supported by an independent energy source.

-
- -

This control applies primarily to facilities containing concentrations of information system resources including, for example, data centers, server rooms, and mainframe computer rooms. Fire suppression and detection devices/systems include, for example, sprinkler systems, handheld fire extinguishers, fixed fire hoses, and smoke detectors.

-
- -

Determine if the organization:

- - PE-13[1] -

employs fire suppression and detection devices/systems for the information system that are supported by an independent energy source; and

-
- - PE-13[2] -

maintains fire suppression and detection devices/systems for the information system that are supported by an independent energy source.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing fire protection

-

fire suppression and detection devices/systems

-

fire suppression and detection devices/systems documentation

-

test records of fire suppression and detection devices/systems

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for fire detection and suppression devices/systems

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing fire suppression/detection devices/systems

-
-
- - Detection Devices / Systems - - - - - - - PE-13(1) - -

The organization employs fire detection devices/systems for the information system that activate automatically and notify and in the event of a fire.

-
- -

Organizations can identify specific personnel, roles, and emergency responders in the event that individuals on the notification list must have appropriate access authorizations and/or clearances, for example, to obtain access to facilities where classified operations are taking place or where there are information systems containing classified information.

-
- -

Determine if the organization:

- - PE-13(1)[1] -

defines personnel or roles to be notified in the event of a fire;

-
- - PE-13(1)[2] -

defines emergency responders to be notified in the event of a fire;

-
- - PE-13(1)[3] -

employs fire detection devices/systems for the information system that, in the event of a fire,:

- - PE-13(1)[3][a] -

activate automatically;

-
- - PE-13(1)[3][b] -

notify organization-defined personnel or roles; and

-
- - PE-13(1)[3][c] -

notify organization-defined emergency responders.

-
-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing fire protection

-

facility housing the information system

-

alarm service-level agreements

-

test records of fire suppression and detection devices/systems

-

fire suppression and detection devices/systems documentation

-

alerts/notifications of fire events

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for fire detection and suppression devices/systems

-

organizational personnel with responsibilities for notifying appropriate personnel, roles, and emergency responders of fires

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing fire detection devices/systems

-

activation of fire detection devices/systems (simulated)

-

automated notifications

-
-
-
- - Suppression Devices / Systems - - - - - - - PE-13(2) - -

The organization employs fire suppression devices/systems for the information system that provide automatic notification of any activation to and .

-
- -

Organizations can identify specific personnel, roles, and emergency responders in the event that individuals on the notification list must have appropriate access authorizations and/or clearances, for example, to obtain access to facilities where classified operations are taking place or where there are information systems containing classified information.

-
- -

Determine if the organization:

- - PE-13(2)[1] -

defines personnel or roles to be provided automatic notification of any activation of fire suppression devices/systems for the information system;

-
- - PE-13(2)[2] -

defines emergency responders to be provided automatic notification of any activation of fire suppression devices/systems for the information system;

-
- - PE-13(2)[3] -

employs fire suppression devices/systems for the information system that provide automatic notification of any activation to:

- - PE-13(2)[3][a] -

organization-defined personnel or roles; and

-
- - PE-13(2)[3][b] -

organization-defined emergency responders.

-
-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing fire protection

-

fire suppression and detection devices/systems documentation

-

facility housing the information system

-

alarm service-level agreements

-

test records of fire suppression and detection devices/systems

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for fire detection and suppression devices/systems

-

organizational personnel with responsibilities for providing automatic notifications of any activation of fire suppression devices/systems to appropriate personnel, roles, and emergency responders

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing fire suppression devices/systems

-

activation of fire suppression devices/systems (simulated)

-

automated notifications

-
-
-
- - Automatic Fire Suppression - PE-13(3) - -

The organization employs an automatic fire suppression capability for the information system when the facility is not staffed on a continuous basis.

-
- -

Determine if the organization employs an automatic fire suppression capability for the information system when the facility is not staffed on a continuous basis.

-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing fire protection

-

fire suppression and detection devices/systems documentation

-

facility housing the information system

-

alarm service-level agreements

-

test records of fire suppression and detection devices/systems

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for fire detection and suppression devices/systems

-

organizational personnel with responsibilities for providing automatic notifications of any activation of fire suppression devices/systems to appropriate personnel, roles, and emergency responders

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing fire suppression devices/systems

-

activation of fire suppression devices/systems (simulated)

-
-
-
- - Inspections - - - - - - - PE-13(4) - -

The organization ensures that the facility undergoes inspections by authorized and qualified inspectors and resolves identified deficiencies within .

-
- -

Determine if the organization:

- - PE-13(4)[1] -

defines the frequency of inspections to be conducted on the facility by authorized and qualified inspectors;

-
- - PE-13(4)[2] -

ensures that the facility undergoes inspections by authorized and qualified inspectors with the organization-defined frequency;

-
- - PE-13(4)[3] -

defines a time period to resolve deficiencies identified when the facility undergoes such inspections; and

-
- - PE-13(4)[4] -

resolves identified deficiencies within the organization-defined time period.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing fire protection

-

security plan

-

facility housing the information system

-

inspection plans

-

inspection results

-

inspect reports

-

test records of fire suppression and detection devices/systems

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for planning, approving, and executing fire inspections

-

organizational personnel with information security responsibilities

-
-
-
-
- - Temperature and Humidity Controls - - - - - - - PE-14 - -

The organization:

- - a. -

Maintains temperature and humidity levels within the facility where the information system resides at ; and

-
- - b. -

Monitors temperature and humidity levels .

-
-
- -

This control applies primarily to facilities containing concentrations of information system resources, for example, data centers, server rooms, and mainframe computer rooms.

- AT-3 -
- -

Determine if the organization:

- - PE-14(a) - - PE-14(a)[1] -

defines acceptable temperature levels to be maintained within the facility where the information system resides;

-
- - PE-14(a)[2] -

defines acceptable humidity levels to be maintained within the facility where the information system resides;

-
- - PE-14(a)[3] -

maintains temperature levels within the facility where the information system resides at the organization-defined levels;

-
- - PE-14(a)[4] -

maintains humidity levels within the facility where the information system resides at the organization-defined levels;

-
-
- - PE-14(b) - - PE-14(b)[1] -

defines the frequency to monitor temperature levels;

-
- - PE-14(b)[2] -

defines the frequency to monitor humidity levels;

-
- - PE-14(b)[3] -

monitors temperature levels with the organization-defined frequency; and

-
- - PE-14(b)[4] -

monitors humidity levels with the organization-defined frequency.

-
-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing temperature and humidity control

-

security plan

-

temperature and humidity controls

-

facility housing the information system

-

temperature and humidity controls documentation

-

temperature and humidity records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for information system environmental controls

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing maintenance and monitoring of temperature and humidity levels

-
-
- - Automatic Controls - PE-14(1) - -

The organization employs automatic temperature and humidity controls in the facility to prevent fluctuations potentially harmful to the information system.

-
- -

Determine if the organization:

- - PE-14(1)[1] -

employs automatic temperature controls in the facility to prevent fluctuations potentially harmful to the information system; and

-
- - PE-14(1)[2] -

employs automatic humidity controls in the facility to prevent fluctuations potentially harmful to the information system.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing temperature and humidity controls

-

facility housing the information system

-

automated mechanisms for temperature and humidity

-

temperature and humidity controls

-

temperature and humidity documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for information system environmental controls

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing temperature and humidity levels

-
-
-
- - Monitoring with Alarms / Notifications - PE-14(2) - -

The organization employs temperature and humidity monitoring that provides an alarm or notification of changes potentially harmful to personnel or equipment.

-
- -

Determine if the organization:

- - PE-14(2)[1] -

employs temperature monitoring that provides an alarm of changes potentially harmful to personnel or equipment; and/or

-
- - PE-14(2)[2] -

employs temperature monitoring that provides notification of changes potentially harmful to personnel or equipment;

-
- - PE-14(2)[3] -

employs humidity monitoring that provides an alarm of changes potentially harmful to personnel or equipment; and/or

-
- - PE-14(2)[4] -

employs humidity monitoring that provides notification of changes potentially harmful to personnel or equipment.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing temperature and humidity monitoring

-

facility housing the information system

-

logs or records of temperature and humidity monitoring

-

records of changes to temperature and humidity levels that generate alarms or notifications

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for information system environmental controls

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing temperature and humidity monitoring

-
-
-
-
- - Water Damage Protection - PE-15 - -

The organization protects the information system from damage resulting from water leakage by providing master shutoff or isolation valves that are accessible, working properly, and known to key personnel.

-
- -

This control applies primarily to facilities containing concentrations of information system resources including, for example, data centers, server rooms, and mainframe computer rooms. Isolation valves can be employed in addition to or in lieu of master shutoff valves to shut off water supplies in specific areas of concern, without affecting entire organizations.

- AT-3 -
- -

Determine if the organization protects the information system from damage resulting from water leakage by providing master shutoff or isolation valves that are:

- - PE-15[1] -

accessible;

-
- - PE-15[2] -

working properly; and

-
- - PE-15[3] -

known to key personnel.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing water damage protection

-

facility housing the information system

-

master shutoff valves

-

list of key personnel with knowledge of location and activation procedures for master shutoff valves for the plumbing system

-

master shutoff valve documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for information system environmental controls

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Master water-shutoff valves

-

organizational process for activating master water-shutoff

-
-
- - Automation Support - - - - PE-15(1) - -

The organization employs automated mechanisms to detect the presence of water in the vicinity of the information system and alerts .

-
- -

Automated mechanisms can include, for example, water detection sensors, alarms, and notification systems.

-
- -

Determine if the organization:

- - PE-15(1)[1] -

defines personnel or roles to be alerted when the presence of water is detected in the vicinity of the information system;

-
- - PE-15(1)[2] -

employs automated mechanisms to detect the presence of water in the vicinity of the information system; and

-
- - PE-15(1)[3] -

alerts organization-defined personnel or roles when the presence of water is detected in the vicinity of the information system.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing water damage protection

-

facility housing the information system

-

automated mechanisms for water shutoff valves

-

automated mechanisms detecting presence of water in vicinity of information system

-

alerts/notifications of water detection in information system facility

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for information system environmental controls

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing water detection capability and alerts for the information system

-
-
-
-
- - Delivery and Removal - - - - PE-16 - -

The organization authorizes, monitors, and controls entering and exiting the facility and maintains records of those items.

-
- -

Effectively enforcing authorizations for entry and exit of information system components may require restricting access to delivery areas and possibly isolating the areas from the information system and media libraries.

- CM-3 - MA-2 - MA-3 - MP-5 - SA-12 -
- -

Determine if the organization:

- - PE-16[1] -

defines types of information system components to be authorized, monitored, and controlled as such components are entering and exiting the facility;

-
- - PE-16[2] -

authorizes organization-defined information system components entering the facility;

-
- - PE-16[3] -

monitors organization-defined information system components entering the facility;

-
- - PE-16[4] -

controls organization-defined information system components entering the facility;

-
- - PE-16[5] -

authorizes organization-defined information system components exiting the facility;

-
- - PE-16[6] -

monitors organization-defined information system components exiting the facility;

-
- - PE-16[7] -

controls organization-defined information system components exiting the facility;

-
- - PE-16[8] -

maintains records of information system components entering the facility; and

-
- - PE-16[9] -

maintains records of information system components exiting the facility.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing delivery and removal of information system components from the facility

-

security plan

-

facility housing the information system

-

records of items entering and exiting the facility

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for controlling information system components entering and exiting the facility

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational process for authorizing, monitoring, and controlling information system-related items entering and exiting the facility

-

automated mechanisms supporting and/or implementing authorizing, monitoring, and controlling information system-related items entering and exiting the facility

-
-
-
- - Alternate Work Site - - - - PE-17 - -

The organization:

- - a. -

Employs at alternate work sites;

-
- - b. -

Assesses as feasible, the effectiveness of security controls at alternate work sites; and

-
- - c. -

Provides a means for employees to communicate with information security personnel in case of security incidents or problems.

-
-
- -

Alternate work sites may include, for example, government facilities or private residences of employees. While commonly distinct from alternative processing sites, alternate work sites may provide readily available alternate locations as part of contingency operations. Organizations may define different sets of security controls for specific alternate work sites or types of sites depending on the work-related activities conducted at those sites. This control supports the contingency planning activities of organizations and the federal telework initiative.

- AC-17 - CP-7 -
- -

Determine if the organization:

- - PE-17(a) - - PE-17(a)[1] -

defines security controls to be employed at alternate work sites;

-
- - PE-17(a)[2] -

employs organization-defined security controls at alternate work sites;

-
-
- - PE-17(b) -

assesses, as feasible, the effectiveness of security controls at alternate work sites; and

-
- - PE-17(c) -

provides a means for employees to communicate with information security personnel in case of security incidents or problems.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing alternate work sites for organizational personnel

-

security plan

-

list of security controls required for alternate work sites

-

assessments of security controls at alternate work sites

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel approving use of alternate work sites

-

organizational personnel using alternate work sites

-

organizational personnel assessing controls at alternate work sites

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for security at alternate work sites

-

automated mechanisms supporting alternate work sites

-

security controls employed at alternate work sites

-

means of communications between personnel at alternate work sites and security personnel

-
-
- - NIST Special Publication 800-46 - -
- - Location of Information System Components - - - - PE-18 - -

The organization positions information system components within the facility to minimize potential damage from and to minimize the opportunity for unauthorized access.

-
- -

Physical and environmental hazards include, for example, flooding, fire, tornados, earthquakes, hurricanes, acts of terrorism, vandalism, electromagnetic pulse, electrical interference, and other forms of incoming electromagnetic radiation. In addition, organizations consider the location of physical entry points where unauthorized individuals, while not being granted access, might nonetheless be in close proximity to information systems and therefore increase the potential for unauthorized access to organizational communications (e.g., through the use of wireless sniffers or microphones).

- CP-2 - PE-19 - RA-3 -
- -

Determine if the organization:

- - PE-18[1] -

defines physical hazards that could result in potential damage to information system components within the facility;

-
- - PE-18[2] -

defines environmental hazards that could result in potential damage to information system components within the facility;

-
- - PE-18[3] -

positions information system components within the facility to minimize potential damage from organization-defined physical and environmental hazards; and

-
- - PE-18[4] -

positions information system components within the facility to minimize the opportunity for unauthorized access.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing positioning of information system components

-

documentation providing the location and position of information system components within the facility

-

locations housing information system components within the facility

-

list of physical and environmental hazards with potential to damage information system components within the facility

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for positioning information system components

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for positioning information system components

-
-
- - Facility Site - PE-18(1) - -

The organization plans the location or site of the facility where the information system resides with regard to physical and environmental hazards and for existing facilities, considers the physical and environmental hazards in its risk mitigation strategy.

-
- - PM-8 - - -

Determine if the organization:

- - PE-18(1)[1] -

plans the location or site of the facility where the information system resides with regard to physical hazards;

-
- - PE-18(1)[2] -

plans the location or site of the facility where the information system resides with regard to environmental hazards;

-
- - PE-18(1)[3] -

for existing facilities, considers the physical hazards in its risk mitigation strategy; and

-
- - PE-18(1)[4] -

for existing facilities, considers the environmental hazards in its risk mitigation strategy.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

physical site planning documents

-

organizational assessment of risk, contingency plan

-

risk mitigation strategy documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with site selection responsibilities for the facility housing the information system

-

organizational personnel with risk mitigation responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for site planning

-
-
-
-
- - Information Leakage - PE-19 - -

The organization protects the information system from information leakage due to electromagnetic signals emanations.

-
- -

Information leakage is the intentional or unintentional release of information to an untrusted environment from electromagnetic signals emanations. Security categories or classifications of information systems (with respect to confidentiality) and organizational security policies guide the selection of security controls employed to protect systems against information leakage due to electromagnetic signals emanations.

-
- -

Determine if the organization protects the information system from information leakage due to electromagnetic signals emanations.

-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing information leakage due to electromagnetic signals emanations

-

mechanisms protecting the information system against electronic signals emanation

-

facility housing the information system

-

records from electromagnetic signals emanation tests

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for information system environmental controls

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing protection from information leakage due to electromagnetic signals emanations

-
-
- - National Emissions / Tempest Policies and Procedures - PE-19(1) - -

The organization ensures that information system components, associated data communications, and networks are protected in accordance with national emissions and TEMPEST policies and procedures based on the security category or classification of the information.

-
- -

Determine if the organization ensures that the following are protected in accordance with national emissions and TEMPEST policies and procedures based on the security category or classification of the information:

- - PE-19(1)[1] -

information system components;

-
- - PE-19(1)[2] -

associated data communications; and

-
- - PE-19(1)[3] -

networks.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing information leakage that comply with national emissions and TEMPEST policies and procedures

-

information system component design documentation

-

information system configuration settings and associated documentation other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibilities for information system environmental controls

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Information system components for compliance with national emissions and TEMPEST policies and procedures

-
-
-
- - FIPS Publication 199 - -
- - Asset Monitoring and Tracking - - - - - - - - - - PE-20 - -

The organization:

- - a. -

Employs to track and monitor the location and movement of within ; and

-
- - b. -

Ensures that asset location technologies are employed in accordance with applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance.

-
-
- -

Asset location technologies can help organizations ensure that critical assets such as vehicles or essential information system components remain in authorized locations. Organizations consult with the Office of the General Counsel and the Senior Agency Official for Privacy (SAOP)/Chief Privacy Officer (CPO) regarding the deployment and use of asset location technologies to address potential privacy concerns.

- CM-8 -
- -

Determine if the organization:

- - PE-20(a) - - PE-20(a)[1] -

defines assets whose location and movement are to be tracked and monitored;

-
- - PE-20(a)[2] -

defines asset location technologies to be employed to track and monitor the location and movement of organization-defined assets;

-
- - PE-20(a)[3] -

defines controlled areas within which to track and monitor organization-defined assets;

-
- - PE-20(a)[4] -

employs organization-defined asset location technologies to track and monitor the location and movement of organization-defined assets within organization-defined controlled areas; and

-
-
- - PE-20(b) -

ensures that asset location technologies are employed in accordance with applicable federal laws, Executive Orders, directives, regulations, policies, standards and guidance.

-
-
- - EXAMINE - -

Physical and environmental protection policy

-

procedures addressing asset monitoring and tracking

-

asset location technologies and associated configuration documentation

-

list of organizational assets requiring tracking and monitoring

-

asset monitoring and tracking records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with asset monitoring and tracking responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for tracking and monitoring assets

-

automated mechanisms supporting and/or implementing tracking and monitoring of assets

-
-
-
-
- - Planning - - Security Planning Policy and Procedures - - - - - - - - - - PL-1 - -

The organization:

- - a. -

Develops, documents, and disseminates to :

- - 1. -

A security planning policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and

-
- - 2. -

Procedures to facilitate the implementation of the security planning policy and associated security planning controls; and

-
-
- - b. -

Reviews and updates the current:

- - 1. -

Security planning policy ; and

-
- - 2. -

Security planning procedures .

-
-
-
- -

This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the PL family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures.

- PM-9 -
- -

Determine if the organization:

- - PL-1(a) - - PL-1(a)(1) - - PL-1(a)(1)[1] -

develops and documents a planning policy that addresses:

- - PL-1(a)(1)[1][a] -

purpose;

-
- - PL-1(a)(1)[1][b] -

scope;

-
- - PL-1(a)(1)[1][c] -

roles;

-
- - PL-1(a)(1)[1][d] -

responsibilities;

-
- - PL-1(a)(1)[1][e] -

management commitment;

-
- - PL-1(a)(1)[1][f] -

coordination among organizational entities;

-
- - PL-1(a)(1)[1][g] -

compliance;

-
-
- - PL-1(a)(1)[2] -

defines personnel or roles to whom the planning policy is to be disseminated;

-
- - PL-1(a)(1)[3] -

disseminates the planning policy to organization-defined personnel or roles;

-
-
- - PL-1(a)(2) - - PL-1(a)(2)[1] -

develops and documents procedures to facilitate the implementation of the planning policy and associated planning controls;

-
- - PL-1(a)(2)[2] -

defines personnel or roles to whom the procedures are to be disseminated;

-
- - PL-1(a)(2)[3] -

disseminates the procedures to organization-defined personnel or roles;

-
-
-
- - PL-1(b) - - PL-1(b)(1) - - PL-1(b)(1)[1] -

defines the frequency to review and update the current planning policy;

-
- - PL-1(b)(1)[2] -

reviews and updates the current planning policy with the organization-defined frequency;

-
-
- - PL-1(b)(2) - - PL-1(b)(2)[1] -

defines the frequency to review and update the current planning procedures; and

-
- - PL-1(b)(2)[2] -

reviews and updates the current planning procedures with the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

Planning policy and procedures

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with planning responsibilities

-

organizational personnel with information security responsibilities

-
-
- - NIST Special Publication 800-12 - - NIST Special Publication 800-18 - - NIST Special Publication 800-100 - -
- - System Security Plan - - - - - - - PL-2 - -

The organization:

- - a. -

Develops a security plan for the information system that:

- - 1. -

Is consistent with the organization’s enterprise architecture;

-
- - 2. -

Explicitly defines the authorization boundary for the system;

-
- - 3. -

Describes the operational context of the information system in terms of missions and business processes;

-
- - 4. -

Provides the security categorization of the information system including supporting rationale;

-
- - 5. -

Describes the operational environment for the information system and relationships with or connections to other information systems;

-
- - 6. -

Provides an overview of the security requirements for the system;

-
- - 7. -

Identifies any relevant overlays, if applicable;

-
- - 8. -

Describes the security controls in place or planned for meeting those requirements including a rationale for the tailoring decisions; and

-
- - 9. -

Is reviewed and approved by the authorizing official or designated representative prior to plan implementation;

-
-
- - b. -

Distributes copies of the security plan and communicates subsequent changes to the plan to ;

-
- - c. -

Reviews the security plan for the information system ;

-
- - d. -

Updates the plan to address changes to the information system/environment of operation or problems identified during plan implementation or security control assessments; and

-
- - e. -

Protects the security plan from unauthorized disclosure and modification.

-
-
- -

Security plans relate security requirements to a set of security controls and control enhancements. Security plans also describe, at a high level, how the security controls and control enhancements meet those security requirements, but do not provide detailed, technical descriptions of the specific design or implementation of the controls/enhancements. Security plans contain sufficient information (including the specification of parameter values for assignment and selection statements either explicitly or by reference) to enable a design and implementation that is unambiguously compliant with the intent of the plans and subsequent determinations of risk to organizational operations and assets, individuals, other organizations, and the Nation if the plan is implemented as intended. Organizations can also apply tailoring guidance to the security control baselines in Appendix D and CNSS Instruction 1253 to develop overlays for community-wide use or to address specialized requirements, technologies, or missions/environments of operation (e.g., DoD-tactical, Federal Public Key Infrastructure, or Federal Identity, Credential, and Access Management, space operations). Appendix I provides guidance on developing overlays. -Security plans need not be single documents; the plans can be a collection of various documents including documents that already exist. Effective security plans make extensive use of references to policies, procedures, and additional documents (e.g., design and implementation specifications) where more detailed information can be obtained. This reduces the documentation requirements associated with security programs and maintains security-related information in other established management/operational areas related to enterprise architecture, system development life cycle, systems engineering, and acquisition. For example, security plans do not contain detailed contingency plan or incident response plan information but instead provide explicitly or by reference, sufficient information to define what needs to be accomplished by those plans.

- AC-2 - AC-6 - AC-14 - AC-17 - AC-20 - CA-2 - CA-3 - CA-7 - CM-9 - CP-2 - IR-8 - MA-4 - MA-5 - MP-2 - MP-4 - MP-5 - PL-7 - PM-1 - PM-7 - PM-8 - PM-9 - PM-11 - SA-5 - SA-17 -
- -

Determine if the organization:

- - PL-2(a) -

develops a security plan for the information system that:

- - PL-2(a)(1) -

is consistent with the organization’s enterprise architecture;

-
- - PL-2(a)(2) -

explicitly defines the authorization boundary for the system;

-
- - PL-2(a)(3) -

describes the operational context of the information system in terms of missions and business processes;

-
- - PL-2(a)(4) -

provides the security categorization of the information system including supporting rationale;

-
- - PL-2(a)(5) -

describes the operational environment for the information system and relationships with or connections to other information systems;

-
- - PL-2(a)(6) -

provides an overview of the security requirements for the system;

-
- - PL-2(a)(7) -

identifies any relevant overlays, if applicable;

-
- - PL-2(a)(8) -

describes the security controls in place or planned for meeting those requirements including a rationale for the tailoring and supplemental decisions;

-
- - PL-2(a)(9) -

is reviewed and approved by the authorizing official or designated representative prior to plan implementation;

-
-
- - PL-2(b) - - PL-2(b)[1] -

defines personnel or roles to whom copies of the security plan are to be distributed and subsequent changes to the plan are to be communicated;

-
- - PL-2(b)[2] -

distributes copies of the security plan and communicates subsequent changes to the plan to organization-defined personnel or roles;

-
-
- - PL-2(c) - - PL-2(c)[1] -

defines the frequency to review the security plan for the information system;

-
- - PL-2(c)[2] -

reviews the security plan for the information system with the organization-defined frequency;

-
-
- - PL-2(d) -

updates the plan to address:

- - PL-2(d)[1] -

changes to the information system/environment of operation;

-
- - PL-2(d)[2] -

problems identified during plan implementation;

-
- - PL-2(d)[3] -

problems identified during security control assessments;

-
-
- - PL-2(e) -

protects the security plan from unauthorized:

- - PL-2(e)[1] -

disclosure; and

-
- - PL-2(e)[2] -

modification.

-
-
-
- - EXAMINE - -

Security planning policy

-

procedures addressing security plan development and implementation

-

procedures addressing security plan reviews and updates

-

enterprise architecture documentation

-

security plan for the information system

-

records of security plan reviews and updates

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security planning and plan implementation responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for security plan development/review/update/approval

-

automated mechanisms supporting the information system security plan

-
-
- - Concept of Operations - PL-2(1) - Withdrawn - PL-7 - - - Functional Architecture - PL-2(2) - Withdrawn - PL-8 - - - Plan / Coordinate with Other Organizational Entities - - - - PL-2(3) - -

The organization plans and coordinates security-related activities affecting the information system with before conducting such activities in order to reduce the impact on other organizational entities.

-
- -

Security-related activities include, for example, security assessments, audits, hardware and software maintenance, patch management, and contingency plan testing. Advance planning and coordination includes emergency and nonemergency (i.e., planned or nonurgent unplanned) situations. The process defined by organizations to plan and coordinate security-related activities can be included in security plans for information systems or other documents, as appropriate.

- CP-4 - IR-4 -
- -

Determine if the organization:

- - PL-2(3)[1] -

defines individuals or groups with whom security-related activities affecting the information system are to be planned and coordinated before conducting such activities in order to reduce the impact on other organizational entities; and

-
- - PL-2(3)[2] -

plans and coordinates security-related activities affecting the information system with organization-defined individuals or groups before conducting such activities in order to reduce the impact on other organizational entities.

-
-
- - EXAMINE - -

Security planning policy

-

access control policy

-

contingency planning policy

-

procedures addressing security-related activity planning for the information system

-

security plan for the information system

-

contingency plan for the information system

-

information system design documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security planning and plan implementation responsibilities

-

organizational individuals or groups with whom security-related activities are to be planned and coordinated

-

organizational personnel with information security responsibilities

-
-
-
- - NIST Special Publication 800-18 - -
- - System Security Plan Update - PL-3 - Withdrawn - PL-2 - - - Rules of Behavior - - - - PL-4 - -

The organization:

- - a. -

Establishes and makes readily available to individuals requiring access to the information system, the rules that describe their responsibilities and expected behavior with regard to information and information system usage;

-
- - b. -

Receives a signed acknowledgment from such individuals, indicating that they have read, understand, and agree to abide by the rules of behavior, before authorizing access to information and the information system;

-
- - c. -

Reviews and updates the rules of behavior ; and

-
- - d. -

Requires individuals who have signed a previous version of the rules of behavior to read and re-sign when the rules of behavior are revised/updated.

-
-
- -

This control enhancement applies to organizational users. Organizations consider rules of behavior based on individual user roles and responsibilities, differentiating, for example, between rules that apply to privileged users and rules that apply to general users. Establishing rules of behavior for some types of non-organizational users including, for example, individuals who simply receive data/information from federal information systems, is often not feasible given the large number of such users and the limited nature of their interactions with the systems. Rules of behavior for both organizational and non-organizational users can also be established in AC-8, System Use Notification. PL-4 b. (the signed acknowledgment portion of this control) may be satisfied by the security awareness training and role-based security training programs conducted by organizations if such training includes rules of behavior. Organizations can use electronic signatures for acknowledging rules of behavior.

- AC-2 - AC-6 - AC-8 - AC-9 - AC-17 - AC-18 - AC-19 - AC-20 - AT-2 - AT-3 - CM-11 - IA-2 - IA-4 - IA-5 - MP-7 - PS-6 - PS-8 - SA-5 -
- -

Determine if the organization:

- - PL-4(a) - - PL-4(a)[1] -

establishes, for individuals requiring access to the information system, the rules that describe their responsibilities and expected behavior with regard to information and information system usage;

-
- - PL-4(a)[2] -

makes readily available to individuals requiring access to the information system, the rules that describe their responsibilities and expected behavior with regard to information and information system usage;

-
-
- - PL-4(b) -

receives a signed acknowledgement from such individuals, indicating that they have read, understand, and agree to abide by the rules of behavior, before authorizing access to information and the information system;

-
- - PL-4(c) - - PL-4(c)[1] -

defines the frequency to review and update the rules of behavior;

-
- - PL-4(c)[2] -

reviews and updates the rules of behavior with the organization-defined frequency; and

-
-
- - PL-4(d) -

requires individuals who have signed a previous version of the rules of behavior to read and resign when the rules of behavior are revised/updated.

-
-
- - EXAMINE - -

Security planning policy

-

procedures addressing rules of behavior for information system users

-

rules of behavior

-

signed acknowledgements

-

records for rules of behavior reviews and updates

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for establishing, reviewing, and updating rules of behavior

-

organizational personnel who are authorized users of the information system and have signed and resigned rules of behavior

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for establishing, reviewing, disseminating, and updating rules of behavior

-

automated mechanisms supporting and/or implementing the establishment, review, dissemination, and update of rules of behavior

-
-
- - Social Media and Networking Restrictions - PL-4(1) - -

The organization includes in the rules of behavior, explicit restrictions on the use of social media/networking sites and posting organizational information on public websites.

-
- -

This control enhancement addresses rules of behavior related to the use of social media/networking sites: (i) when organizational personnel are using such sites for official duties or in the conduct of official business; (ii) when organizational information is involved in social media/networking transactions; and (iii) when personnel are accessing social media/networking sites from organizational information systems. Organizations also address specific rules that prevent unauthorized entities from obtaining and/or inferring non-public organizational information (e.g., system account information, personally identifiable information) from social media/networking sites.

-
- -

Determine if the organization includes the following in the rules of behavior:

- - PL-4(1)[1] -

explicit restrictions on the use of social media/networking sites; and

-
- - PL-4(1)[2] -

posting organizational information on public websites.

-
-
- - EXAMINE - -

Security planning policy

-

procedures addressing rules of behavior for information system users

-

rules of behavior

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for establishing, reviewing, and updating rules of behavior

-

organizational personnel who are authorized users of the information system and have signed rules of behavior

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for establishing rules of behavior

-

automated mechanisms supporting and/or implementing the establishment of rules of behavior

-
-
-
- - NIST Special Publication 800-18 - -
- - Privacy Impact Assessment - PL-5 - Withdrawn - Appendix J - AR-2 - - - Security-related Activity Planning - PL-6 - Withdrawn - PL-2 - - - Security Concept of Operations - - - - PL-7 - -

The organization:

- - a. -

Develops a security Concept of Operations (CONOPS) for the information system containing at a minimum, how the organization intends to operate the system from the perspective of information security; and

-
- - b. -

Reviews and updates the CONOPS .

-
-
- -

The security CONOPS may be included in the security plan for the information system or in other system development life cycle-related documents, as appropriate. Changes to the CONOPS are reflected in ongoing updates to the security plan, the information security architecture, and other appropriate organizational documents (e.g., security specifications for procurements/acquisitions, system development life cycle documents, and systems/security engineering documents).

- PL-2 -
- -

Determine if the organization:

- - PL-7(a) -

develops a security Concept of Operations (CONOPS) for the information system containing at a minimum, how the organization intends to operate the system from the perspective of information security;

-
- - PL-7(b) - - PL-7(b)[1] -

defines the frequency to review and update the security CONOPS; and

-
- - PL-7(b)[2] -

reviews and updates the security CONOPS with the organization-defined frequency.

-
-
-
- - EXAMINE - -

Security planning policy

-

procedures addressing security CONOPS development

-

procedures addressing security CONOPS reviews and updates

-

security CONOPS for the information system

-

security plan for the information system

-

records of security CONOPS reviews and updates

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security planning and plan implementation responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for developing, reviewing, and updating the security CONOPS

-

automated mechanisms supporting and/or implementing the development, review, and update of the security CONOPS

-
-
-
- - Information Security Architecture - - - - PL-8 - -

The organization:

- - a. -

Develops an information security architecture for the information system that:

- - 1. -

Describes the overall philosophy, requirements, and approach to be taken with regard to protecting the confidentiality, integrity, and availability of organizational information;

-
- - 2. -

Describes how the information security architecture is integrated into and supports the enterprise architecture; and

-
- - 3. -

Describes any information security assumptions about, and dependencies on, external services;

-
-
- - b. -

Reviews and updates the information security architecture to reflect updates in the enterprise architecture; and

-
- - c. -

Ensures that planned information security architecture changes are reflected in the security plan, the security Concept of Operations (CONOPS), and organizational procurements/acquisitions.

-
-
- -

This control addresses actions taken by organizations in the design and development of information systems. The information security architecture at the individual information system level is consistent with and complements the more global, organization-wide information security architecture described in PM-7 that is integral to and developed as part of the enterprise architecture. The information security architecture includes an architectural description, the placement/allocation of security functionality (including security controls), security-related information for external interfaces, information being exchanged across the interfaces, and the protection mechanisms associated with each interface. In addition, the security architecture can include other important security-related information, for example, user roles and access privileges assigned to each role, unique security requirements, the types of information processed, stored, and transmitted by the information system, restoration priorities of information and information system services, and any other specific protection needs. -In today’s modern architecture, it is becoming less common for organizations to control all information resources. There are going to be key dependencies on external information services and service providers. Describing such dependencies in the information security architecture is important to developing a comprehensive mission/business protection strategy. Establishing, developing, documenting, and maintaining under configuration control, a baseline configuration for organizational information systems is critical to implementing and maintaining an effective information security architecture. The development of the information security architecture is coordinated with the Senior Agency Official for Privacy (SAOP)/Chief Privacy Officer (CPO) to ensure that security controls needed to support privacy requirements are identified and effectively implemented. PL-8 is primarily directed at organizations (i.e., internally focused) to help ensure that organizations develop an information security architecture for the information system, and that the security architecture is integrated with or tightly coupled to the enterprise architecture through the organization-wide information security architecture. In contrast, SA-17 is primarily directed at external information technology product/system developers and integrators (although SA-17 could be used internally within organizations for in-house system development). SA-17, which is complementary to PL-8, is selected when organizations outsource the development of information systems or information system components to external entities, and there is a need to demonstrate/show consistency with the organization’s enterprise architecture and information security architecture.

- CM-2 - CM-6 - PL-2 - PM-7 - SA-5 - SA-17 - Appendix J -
- -

Determine if the organization:

- - PL-8(a) -

develops an information security architecture for the information system that describes:

- - PL-8(a)(1) -

the overall philosophy, requirements, and approach to be taken with regard to protecting the confidentiality, integrity, and availability of organizational information;

-
- - PL-8(a)(2) -

how the information security architecture is integrated into and supports the enterprise architecture;

-
- - PL-8(a)(3) -

any information security assumptions about, and dependencies on, external services;

-
-
- - PL-8(b) - - PL-8(b)[1] -

defines the frequency to review and update the information security architecture;

-
- - PL-8(b)[2] -

reviews and updates the information security architecture with the organization-defined frequency to reflect updates in the enterprise architecture;

-
-
- - PL-8(c) -

ensures that planned information security architecture changes are reflected in:

- - PL-8(c)[1] -

the security plan;

-
- - PL-8(c)[2] -

the security Concept of Operations (CONOPS); and

-
- - PL-8(c)[3] -

the organizational procurements/acquisitions.

-
-
-
- - EXAMINE - -

Security planning policy

-

procedures addressing information security architecture development

-

procedures addressing information security architecture reviews and updates

-

enterprise architecture documentation

-

information security architecture documentation

-

security plan for the information system

-

security CONOPS for the information system

-

records of information security architecture reviews and updates

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security planning and plan implementation responsibilities

-

organizational personnel with information security architecture development responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for developing, reviewing, and updating the information security architecture

-

automated mechanisms supporting and/or implementing the development, review, and update of the information security architecture

-
-
- - Defense-in-depth - - - - - - - PL-8(1) - -

The organization designs its security architecture using a defense-in-depth approach that:

- - (a) -

Allocates to ; and

-
- - (b) -

Ensures that the allocated security safeguards operate in a coordinated and mutually reinforcing manner.

-
-
- -

Organizations strategically allocate security safeguards (procedural, technical, or both) in the security architecture so that adversaries have to overcome multiple safeguards to achieve their objective. Requiring adversaries to defeat multiple mechanisms makes it more difficult to successfully attack critical information resources (i.e., increases adversary work factor) and also increases the likelihood of detection. The coordination of allocated safeguards is essential to ensure that an attack that involves one safeguard does not create adverse unintended consequences (e.g., lockout, cascading alarms) by interfering with another safeguard. Placement of security safeguards is a key activity. Greater asset criticality or information value merits additional layering. Thus, an organization may choose to place anti-virus software at organizational boundary layers, email/web servers, notebook computers, and workstations to maximize the number of related safeguards adversaries must penetrate before compromising the information and information systems.

- SC-29 - SC-36 -
- -

Determine if the organization:

- - PL-8(1)(a) - - PL-8(1)(a)[1] -

defines security safeguards to be allocated to locations and architectural layers within the design of its security architecture;

-
- - PL-8(1)(a)[2] -

defines locations and architectural layers of its security architecture in which organization-defined security safeguards are to be allocated;

-
- - PL-8(1)(a)[3] -

designs its security architecture using a defense-in-depth approach that allocates organization-defined security safeguards to organization-defined locations and architectural layers; and

-
- PL-8(1)(a) -
- - PL-8(1)(b) -

designs its security architecture using a defense-in-depth approach that ensures the allocated organization-defined security safeguards operate in a coordinated and mutually reinforcing manner.

- PL-8(1)(b) -
-
- - EXAMINE - -

Security planning policy

-

procedures addressing information security architecture development

-

enterprise architecture documentation

-

information security architecture documentation

-

security plan for the information system

-

security CONOPS for the information system

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security planning and plan implementation responsibilities

-

organizational personnel with information security architecture development responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for designing the information security architecture

-

automated mechanisms supporting and/or implementing the design of the information security architecture

-
-
-
- - Supplier Diversity - - - - - - - PL-8(2) - -

The organization requires that allocated to are obtained from different suppliers.

-
- -

Different information technology products have different strengths and weaknesses. Providing a broad spectrum of products complements the individual offerings. For example, vendors offering malicious code protection typically update their products at different times, often developing solutions for known viruses, Trojans, or worms according to their priorities and development schedules. By having different products at different locations (e.g., server, boundary, desktop) there is an increased likelihood that at least one will detect the malicious code.

- SA-12 -
- -

Determine if the organization:

- - PL-8(2)[1] -

defines security safeguards to be allocated to locations and architectural layers within the design of its security architecture;

-
- - PL-8(2)[2] -

defines locations and architectural layers of its security architecture in which organization-defined security safeguards are to be allocated; and

-
- - PL-8(2)[3] -

requires that organization-defined security safeguards allocated to organization-defined locations and architectural layers are obtained from different suppliers.

-
-
- - EXAMINE - -

Security planning policy

-

procedures addressing information security architecture development

-

enterprise architecture documentation

-

information security architecture documentation

-

security plan for the information system

-

security CONOPS for the information system

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security planning and plan implementation responsibilities

-

organizational personnel with information security architecture development responsibilities

-

organizational personnel with acquisition responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for obtaining information security safeguards from different suppliers

-
-
-
-
- - Central Management - - - - PL-9 - -

The organization centrally manages .

-
- -

Central management refers to the organization-wide management and implementation of selected security controls and related processes. Central management includes planning, implementing, assessing, authorizing, and monitoring the organization-defined, centrally managed security controls and processes. As central management of security controls is generally associated with common controls, such management promotes and facilitates standardization of security control implementations and management and judicious use of organizational resources. Centrally-managed security controls and processes may also meet independence requirements for assessments in support of initial and ongoing authorizations to operate as part of organizational continuous monitoring. As part of the security control selection process, organizations determine which controls may be suitable for central management based on organizational resources and capabilities. Organizations consider that it may not always be possible to centrally manage every aspect of a security control. In such cases, the security control is treated as a hybrid control with the control managed and implemented either centrally or at the information system level. Controls and control enhancements that are candidates for full or partial central management include, but are not limited to: AC-2 (1) (2) (3) (4); AC-17 (1) (2) (3) (9); AC-18 (1) (3) (4) (5); AC-19 (4); AC-22; AC-23; AT-2 (1) (2); AT-3 (1) (2) (3); AT-4; AU-6 (1) (3) (5) (6) (9); AU-7 (1) (2); AU-11, AU-13, AU-16, CA-2 (1) (2) (3); CA-3 (1) (2) (3); CA-7 (1); CA-9; CM-2 (1) (2); CM-3 (1) (4); CM-4; CM-6 (1); CM-7 (4) (5); CM-8 (all); CM-9 (1); CM-10; CM-11; CP-7 (all); CP-8 (all); SC-43; SI-2; SI-3; SI-7; and SI-8.

-
- -

Determine if the organization:

- - PL-9[1] -

defines security controls and related processes to be centrally managed; and

-
- - PL-9[2] -

centrally manages organization-defined security controls and related processes.

-
-
- - EXAMINE - -

Security planning policy

-

procedures addressing security plan development and implementation

-

security plan for the information system

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security planning and plan implementation responsibilities

-

organizational personnel with responsibilities for planning/implementing central management of security controls and related processes

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for central management of security controls and related processes

-

automated mechanisms supporting and/or implementing central management of security controls and related processes

-
-
- - NIST Special Publication 800-37 - -
-
- - Personnel Security - - Personnel Security Policy and Procedures - - - - - - - - - - PS-1 - -

The organization:

- - a. -

Develops, documents, and disseminates to :

- - 1. -

A personnel security policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and

-
- - 2. -

Procedures to facilitate the implementation of the personnel security policy and associated personnel security controls; and

-
-
- - b. -

Reviews and updates the current:

- - 1. -

Personnel security policy ; and

-
- - 2. -

Personnel security procedures .

-
-
-
- -

This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the PS family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures.

- PM-9 -
- -

Determine if the organization:

- - PS-1(a) - - PS-1(a)(1) - - PS-1(a)(1)[1] -

develops and documents an personnel security policy that addresses:

- - PS-1(a)(1)[1][a] -

purpose;

-
- - PS-1(a)(1)[1][b] -

scope;

-
- - PS-1(a)(1)[1][c] -

roles;

-
- - PS-1(a)(1)[1][d] -

responsibilities;

-
- - PS-1(a)(1)[1][e] -

management commitment;

-
- - PS-1(a)(1)[1][f] -

coordination among organizational entities;

-
- - PS-1(a)(1)[1][g] -

compliance;

-
-
- - PS-1(a)(1)[2] -

defines personnel or roles to whom the personnel security policy is to be disseminated;

-
- - PS-1(a)(1)[3] -

disseminates the personnel security policy to organization-defined personnel or roles;

-
-
- - PS-1(a)(2) - - PS-1(a)(2)[1] -

develops and documents procedures to facilitate the implementation of the personnel security policy and associated personnel security controls;

-
- - PS-1(a)(2)[2] -

defines personnel or roles to whom the procedures are to be disseminated;

-
- - PS-1(a)(2)[3] -

disseminates the procedures to organization-defined personnel or roles;

-
-
-
- - PS-1(b) - - PS-1(b)(1) - - PS-1(b)(1)[1] -

defines the frequency to review and update the current personnel security policy;

-
- - PS-1(b)(1)[2] -

reviews and updates the current personnel security policy with the organization-defined frequency;

-
-
- - PS-1(b)(2) - - PS-1(b)(2)[1] -

defines the frequency to review and update the current personnel security procedures; and

-
- - PS-1(b)(2)[2] -

reviews and updates the current personnel security procedures with the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

Personnel security policy and procedures

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with access control responsibilities

-

organizational personnel with information security responsibilities

-
-
- - NIST Special Publication 800-12 - - NIST Special Publication 800-100 - -
- - Position Risk Designation - - - - PS-2 - -

The organization:

- - a. -

Assigns a risk designation to all organizational positions;

-
- - b. -

Establishes screening criteria for individuals filling those positions; and

-
- - c. -

Reviews and updates position risk designations .

-
-
- -

Position risk designations reflect Office of Personnel Management policy and guidance. Risk designations can guide and inform the types of authorizations individuals receive when accessing organizational information and information systems. Position screening criteria include explicit information security role appointment requirements (e.g., training, security clearances).

- AT-3 - PL-2 - PS-3 -
- -

Determine if the organization:

- - PS-2(a) -

assigns a risk designation to all organizational positions;

-
- - PS-2(b) -

establishes screening criteria for individuals filling those positions;

-
- - PS-2(c) - - PS-2(c)[1] -

defines the frequency to review and update position risk designations; and

-
- - PS-2(c)[2] -

reviews and updates position risk designations with the organization-defined frequency.

-
-
-
- - EXAMINE - -

Personnel security policy

-

procedures addressing position categorization

-

appropriate codes of federal regulations

-

list of risk designations for organizational positions

-

security plan

-

records of position risk designation reviews and updates

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with personnel security responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for assigning, reviewing, and updating position risk designations

-

organizational processes for establishing screening criteria

-
-
- - 5 C.F.R. 731.106 - -
- - Personnel Screening - - - - PS-3 - -

The organization:

- - a. -

Screens individuals prior to authorizing access to the information system; and

-
- - b. -

Rescreens individuals according to .

-
-
- -

Personnel screening and rescreening activities reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, guidance, and specific criteria established for the risk designations of assigned positions. Organizations may define different rescreening conditions and frequencies for personnel accessing information systems based on types of information processed, stored, or transmitted by the systems.

- AC-2 - IA-4 - PE-2 - PS-2 -
- -

Determine if the organization:

- - PS-3(a) -

screens individuals prior to authorizing access to the information system;

-
- - PS-3(b) - - PS-3(b)[1] -

defines conditions requiring re-screening;

-
- - PS-3(b)[2] -

defines the frequency of re-screening where it is so indicated; and

-
- - PS-3(b)[3] -

re-screens individuals in accordance with organization-defined conditions requiring re-screening and, where re-screening is so indicated, with the organization-defined frequency of such re-screening.

-
-
-
- - EXAMINE - -

Personnel security policy

-

procedures addressing personnel screening

-

records of screened personnel

-

security plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with personnel security responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for personnel screening

-
-
- - Classified Information - PS-3(1) - -

The organization ensures that individuals accessing an information system processing, storing, or transmitting classified information are cleared and indoctrinated to the highest classification level of the information to which they have access on the system.

-
- - AC-3 - AC-4 - - -

Determine if the organization:

- - PS-3(1)[1] -

ensures that individuals accessing an information system processing, storing, or transmitting classified information are cleared to the highest classification level of the information to which they have access on the system; and

-
- - PS-3(1)[2] -

ensures that individuals accessing an information system processing, storing, or transmitting classified information are indoctrinated to the highest classification level of the information to which they have access on the system.

-
-
- - EXAMINE - -

Personnel security policy

-

procedures addressing personnel screening

-

records of screened personnel

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with personnel security responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for clearing and indoctrinating personnel for access to classified information

-
-
-
- - Formal Indoctrination - PS-3(2) - -

The organization ensures that individuals accessing an information system processing, storing, or transmitting types of classified information which require formal indoctrination, are formally indoctrinated for all of the relevant types of information to which they have access on the system.

-
- -

Types of classified information requiring formal indoctrination include, for example, Special Access Program (SAP), Restricted Data (RD), and Sensitive Compartment Information (SCI).

- AC-3 - AC-4 -
- -

Determine if the organization ensures that individuals accessing an information system processing, storing, or transmitting types of classified information which require formal indoctrination, are formally indoctrinated for all of the relevant types of information to which they have access on the system.

-
- - EXAMINE - -

Personnel security policy

-

procedures addressing personnel screening

-

records of screened personnel

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with personnel security responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for formal indoctrination for all relevant types of information to which personnel have access

-
-
-
- - Information with Special Protection Measures - - - - PS-3(3) - -

The organization ensures that individuals accessing an information system processing, storing, or transmitting information requiring special protection:

- - (a) -

Have valid access authorizations that are demonstrated by assigned official government duties; and

-
- - (b) -

Satisfy .

-
-
- -

Organizational information requiring special protection includes, for example, Controlled Unclassified Information (CUI) and Sources and Methods Information (SAMI). Personnel security criteria include, for example, position sensitivity background screening requirements.

-
- -

Determine if the organization:

- - PS-3(3)(a) -

ensures that individuals accessing an information system processing, storing, or transmitting information requiring special protection have valid access authorizations that are demonstrated by assigned official government duties;

- PS-3(3)(a) -
- - PS-3(3)(b) - - PS-3(3)(b)[1] -

defines additional personnel screening criteria to be satisfied for individuals accessing an information system processing, storing, or transmitting information requiring special protection; and

-
- - PS-3(3)(b)[2] -

ensures that individuals accessing an information system processing, storing, or transmitting information requiring special protection satisfy organization-defined additional personnel screening criteria.

-
- PS-3(3)(b) -
-
- - EXAMINE - -

Personnel security policy

-

access control policy, procedures addressing personnel screening

-

records of screened personnel

-

screening criteria

-

records of access authorizations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with personnel security responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for ensuring valid access authorizations for information requiring special protection

-

organizational process for additional personnel screening for information requiring special protection

-
-
-
- - 5 C.F.R. 731.106 - - FIPS Publication 199 - - FIPS Publication 201 - - NIST Special Publication 800-60 - - NIST Special Publication 800-73 - - NIST Special Publication 800-76 - - NIST Special Publication 800-78 - - ICD 704 - -
- - Personnel Termination - - - - - - - - - - - - - PS-4 - -

The organization, upon termination of individual employment:

- - a. -

Disables information system access within ;

-
- - b. -

Terminates/revokes any authenticators/credentials associated with the individual;

-
- - c. -

Conducts exit interviews that include a discussion of ;

-
- - d. -

Retrieves all security-related organizational information system-related property;

-
- - e. -

Retains access to organizational information and information systems formerly controlled by terminated individual; and

-
- - f. -

Notifies within .

-
-
- -

Information system-related property includes, for example, hardware authentication tokens, system administration technical manuals, keys, identification cards, and building passes. Exit interviews ensure that terminated individuals understand the security constraints imposed by being former employees and that proper accountability is achieved for information system-related property. Security topics of interest at exit interviews can include, for example, reminding terminated individuals of nondisclosure agreements and potential limitations on future employment. Exit interviews may not be possible for some terminated individuals, for example, in cases related to job abandonment, illnesses, and nonavailability of supervisors. Exit interviews are important for individuals with security clearances. Timely execution of termination actions is essential for individuals terminated for cause. In certain situations, organizations consider disabling the information system accounts of individuals that are being terminated prior to the individuals being notified.

- AC-2 - IA-4 - PE-2 - PS-5 - PS-6 -
- -

Determine if the organization, upon termination of individual employment,:

- - PS-4(a) - - PS-4(a)[1] -

defines a time period within which to disable information system access;

-
- - PS-4(a)[2] -

disables information system access within the organization-defined time period;

-
-
- - PS-4(b) -

terminates/revokes any authenticators/credentials associated with the individual;

-
- - PS-4(c) - - PS-4(c)[1] -

defines information security topics to be discussed when conducting exit interviews;

-
- - PS-4(c)[2] -

conducts exit interviews that include a discussion of organization-defined information security topics;

-
-
- - PS-4(d) -

retrieves all security-related organizational information system-related property;

-
- - PS-4(e) -

retains access to organizational information and information systems formerly controlled by the terminated individual;

-
- - PS-4(f) - - PS-4(f)[1] -

defines personnel or roles to be notified of the termination;

-
- - PS-4(f)[2] -

defines the time period within which to notify organization-defined personnel or roles; and

-
- - PS-4(f)[3] -

notifies organization-defined personnel or roles within the organization-defined time period.

-
-
-
- - EXAMINE - -

Personnel security policy

-

procedures addressing personnel termination

-

records of personnel termination actions

-

list of information system accounts

-

records of terminated or revoked authenticators/credentials

-

records of exit interviews

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with personnel security responsibilities

-

organizational personnel with account management responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for personnel termination

-

automated mechanisms supporting and/or implementing personnel termination notifications

-

automated mechanisms for disabling information system access/revoking authenticators

-
-
- - Post-employment Requirements - PS-4(1) - -

The organization:

- - (a) -

Notifies terminated individuals of applicable, legally binding post-employment requirements for the protection of organizational information; and

-
- - (b) -

Requires terminated individuals to sign an acknowledgment of post-employment requirements as part of the organizational termination process.

-
-
- -

Organizations consult with the Office of the General Counsel regarding matters of post-employment requirements on terminated individuals.

-
- -

Determine if the organization:

- - PS-4(1)(a) -

notifies terminated individuals of applicable, legally binding, post-employment requirements for the protection of organizational information; and

- PS-4(1)(a) -
- - PS-4(1)(b) -

requires terminated individuals to sign an acknowledgement of post-employment requirements as part of the organizational termination process.

- PS-4(1)(b) -
-
- - EXAMINE - -

Personnel security policy

-

procedures addressing personnel termination

-

signed post-employment acknowledgement forms

-

list of applicable, legally binding post-employment requirements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with personnel security responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for post-employment requirements

-
-
-
- - Automated Notification - - - - PS-4(2) - -

The organization employs automated mechanisms to notify upon termination of an individual.

-
- -

In organizations with a large number of employees, not all personnel who need to know about termination actions receive the appropriate notifications—or, if such notifications are received, they may not occur in a timely manner. Automated mechanisms can be used to send automatic alerts or notifications to specific organizational personnel or roles (e.g., management personnel, supervisors, personnel security officers, information security officers, systems administrators, or information technology administrators) when individuals are terminated. Such automatic alerts or notifications can be conveyed in a variety of ways, including, for example, telephonically, via electronic mail, via text message, or via websites.

-
- -

Determine if the organization:

- - PS-4(2)[1] -

defines personnel or roles to be notified upon termination of an individual; and

-
- - PS-4(2)[2] -

employs automated mechanisms to notify organization-defined personnel or roles upon termination of an individual.

-
-
- - EXAMINE - -

Personnel security policy

-

procedures addressing personnel termination

-

information system design documentation

-

information system configuration settings and associated documentation

-

records of personnel termination actions

-

automated notifications of employee terminations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with personnel security responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for personnel termination

-

automated mechanisms supporting and/or implementing personnel termination notifications

-
-
-
-
- - Personnel Transfer - - - - - - - - - - - - - PS-5 - -

The organization:

- - a. -

Reviews and confirms ongoing operational need for current logical and physical access authorizations to information systems/facilities when individuals are reassigned or transferred to other positions within the organization;

-
- - b. -

Initiates within ;

-
- - c. -

Modifies access authorization as needed to correspond with any changes in operational need due to reassignment or transfer; and

-
- - d. -

Notifies within .

-
-
- -

This control applies when reassignments or transfers of individuals are permanent or of such extended durations as to make the actions warranted. Organizations define actions appropriate for the types of reassignments or transfers, whether permanent or extended. Actions that may be required for personnel transfers or reassignments to other positions within organizations include, for example: (i) returning old and issuing new keys, identification cards, and building passes; (ii) closing information system accounts and establishing new accounts; (iii) changing information system access authorizations (i.e., privileges); and (iv) providing for access to official records to which individuals had access at previous work locations and in previous information system accounts.

- AC-2 - IA-4 - PE-2 - PS-4 -
- -

Determine if the organization:

- - PS-5(a) -

when individuals are reassigned or transferred to other positions within the organization, reviews and confirms ongoing operational need for current:

- - PS-5(a)[1] -

logical access authorizations to information systems;

-
- - PS-5(a)[2] -

physical access authorizations to information systems and facilities;

-
-
- - PS-5(b) - - PS-5(b)[1] -

defines transfer or reassignment actions to be initiated following transfer or reassignment;

-
- - PS-5(b)[2] -

defines the time period within which transfer or reassignment actions must occur following transfer or reassignment;

-
- - PS-5(b)[3] -

initiates organization-defined transfer or reassignment actions within the organization-defined time period following transfer or reassignment;

-
-
- - PS-5(c) -

modifies access authorization as needed to correspond with any changes in operational need due to reassignment or transfer;

-
- - PS-5(d) - - PS-5(d)[1] -

defines personnel or roles to be notified when individuals are reassigned or transferred to other positions within the organization;

-
- - PS-5(d)[2] -

defines the time period within which to notify organization-defined personnel or roles when individuals are reassigned or transferred to other positions within the organization; and

-
- - PS-5(d)[3] -

notifies organization-defined personnel or roles within the organization-defined time period when individuals are reassigned or transferred to other positions within the organization.

-
-
-
- - EXAMINE - -

Personnel security policy

-

procedures addressing personnel transfer

-

security plan

-

records of personnel transfer actions

-

list of information system and facility access authorizations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with personnel security responsibilities organizational personnel with account management responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for personnel transfer

-

automated mechanisms supporting and/or implementing personnel transfer notifications

-

automated mechanisms for disabling information system access/revoking authenticators

-
-
-
- - Access Agreements - - - - - - - PS-6 - -

The organization:

- - a. -

Develops and documents access agreements for organizational information systems;

-
- - b. -

Reviews and updates the access agreements ; and

-
- - c. -

Ensures that individuals requiring access to organizational information and information systems:

- - 1. -

Sign appropriate access agreements prior to being granted access; and

-
- - 2. -

Re-sign access agreements to maintain access to organizational information systems when access agreements have been updated or .

-
-
-
- -

Access agreements include, for example, nondisclosure agreements, acceptable use agreements, rules of behavior, and conflict-of-interest agreements. Signed access agreements include an acknowledgement that individuals have read, understand, and agree to abide by the constraints associated with organizational information systems to which access is authorized. Organizations can use electronic signatures to acknowledge access agreements unless specifically prohibited by organizational policy.

- PL-4 - PS-2 - PS-3 - PS-4 - PS-8 -
- -

Determine if the organization:

- - PS-6(a) -

develops and documents access agreements for organizational information systems;

-
- - PS-6(b) - - PS-6(b)[1] -

defines the frequency to review and update the access agreements;

-
- - PS-6(b)[2] -

reviews and updates the access agreements with the organization-defined frequency;

-
-
- - PS-6(c) - - PS-6(c)(1) -

ensures that individuals requiring access to organizational information and information systems sign appropriate access agreements prior to being granted access;

-
- - PS-6(c)(2) - - PS-6(c)(2)[1] -

defines the frequency to re-sign access agreements to maintain access to organizational information systems when access agreements have been updated;

-
- - PS-6(c)(2)[2] -

ensures that individuals requiring access to organizational information and information systems re-sign access agreements to maintain access to organizational information systems when access agreements have been updated or with the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

Personnel security policy

-

procedures addressing access agreements for organizational information and information systems

-

security plan

-

access agreements

-

records of access agreement reviews and updates

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with personnel security responsibilities

-

organizational personnel who have signed/resigned access agreements

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for access agreements

-

automated mechanisms supporting access agreements

-
-
- - Information Requiring Special Protection - PS-6(1) - Withdrawn - PS-3 - - - Classified Information Requiring Special Protection - PS-6(2) - -

The organization ensures that access to classified information requiring special protection is granted only to individuals who:

- - (a) -

Have a valid access authorization that is demonstrated by assigned official government duties;

-
- - (b) -

Satisfy associated personnel security criteria; and

-
- - (c) -

Have read, understood, and signed a nondisclosure agreement.

-
-
- -

Classified information requiring special protection includes, for example, collateral information, Special Access Program (SAP) information, and Sensitive Compartmented Information (SCI). Personnel security criteria reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance.

-
- -

Determine if the organization ensures that access to classified information requiring special protection is granted only to individuals who:

- - PS-6(2)(a) -

have a valid access authorization that is demonstrated by assigned official government duties;

- PS-6(2)(a) -
- - PS-6(2)(b) -

satisfy associated personnel security criteria; and

- PS-6(2)(b) -
- - PS-6(2)(c) -

have read, understood, and signed a nondisclosure agreement.

- PS-6(2)(c) -
-
- - EXAMINE - -

Personnel security policy

-

procedures addressing access agreements for organizational information and information systems

-

access agreements

-

access authorizations

-

personnel security criteria

-

signed nondisclosure agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with personnel security responsibilities

-

organizational personnel who have signed nondisclosure agreements

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for access to classified information requiring special protection

-
-
-
- - Post-employment Requirements - PS-6(3) - -

The organization:

- - (a) -

Notifies individuals of applicable, legally binding post-employment requirements for protection of organizational information; and

-
- - (b) -

Requires individuals to sign an acknowledgment of these requirements, if applicable, as part of granting initial access to covered information.

-
-
- -

Organizations consult with the Office of the General Counsel regarding matters of post-employment requirements on terminated individuals.

-
- -

Determine if the organization:

- - PS-6(3)(a) -

notifies individuals of applicable, legally binding post-employment requirements for protection of organizational information; and

- PS-6(3)(a) -
- - PS-6(3)(b) -

requires individuals to sign an acknowledgement of these requirements, if applicable, as part of granting initial access to covered information.

- PS-6(3)(b) -
-
- - EXAMINE - -

Personnel security policy

-

procedures addressing access agreements for organizational information and information systems

-

signed post-employment acknowledgement forms

-

access agreements

-

list of applicable, legally binding post-employment requirements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with personnel security responsibilities

-

organizational personnel who have signed access agreements that include post-employment requirements

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for post-employment requirements

-

automated mechanisms supporting notifications and individual acknowledgements of post-employment requirements

-
-
-
-
- - Third-party Personnel Security - - - - - - - PS-7 - -

The organization:

- - a. -

Establishes personnel security requirements including security roles and responsibilities for third-party providers;

-
- - b. -

Requires third-party providers to comply with personnel security policies and procedures established by the organization;

-
- - c. -

Documents personnel security requirements;

-
- - d. -

Requires third-party providers to notify of any personnel transfers or terminations of third-party personnel who possess organizational credentials and/or badges, or who have information system privileges within ; and

-
- - e. -

Monitors provider compliance.

-
-
- -

Third-party providers include, for example, service bureaus, contractors, and other organizations providing information system development, information technology services, outsourced applications, and network and security management. Organizations explicitly include personnel security requirements in acquisition-related documents. Third-party providers may have personnel working at organizational facilities with credentials, badges, or information system privileges issued by organizations. Notifications of third-party personnel changes ensure appropriate termination of privileges and credentials. Organizations define the transfers and terminations deemed reportable by security-related characteristics that include, for example, functions, roles, and nature of credentials/privileges associated with individuals transferred or terminated.

- PS-2 - PS-3 - PS-4 - PS-5 - PS-6 - SA-9 - SA-21 -
- -

Determine if the organization:

- - PS-7(a) -

establishes personnel security requirements, including security roles and responsibilities, for third-party providers;

-
- - PS-7(b) -

requires third-party providers to comply with personnel security policies and procedures established by the organization;

-
- - PS-7(c) -

documents personnel security requirements;

-
- - PS-7(d) - - PS-7(d)[1] -

defines personnel or roles to be notified of any personnel transfers or terminations of third-party personnel who possess organizational credentials and/or badges, or who have information system privileges;

-
- - PS-7(d)[2] -

defines the time period within which third-party providers are required to notify organization-defined personnel or roles of any personnel transfers or terminations of third-party personnel who possess organizational credentials and/or badges, or who have information system privileges;

-
- - PS-7(d)[3] -

requires third-party providers to notify organization-defined personnel or roles within the organization-defined time period of any personnel transfers or terminations of third-party personnel who possess organizational credentials and/or badges, or who have information system privileges; and

-
-
- - PS-7(e) -

monitors provider compliance.

-
-
- - EXAMINE - -

Personnel security policy

-

procedures addressing third-party personnel security

-

list of personnel security requirements

-

acquisition documents

-

service-level agreements

-

compliance monitoring process

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with personnel security responsibilities

-

third-party providers

-

system/network administrators

-

organizational personnel with account management responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for managing and monitoring third-party personnel security

-

automated mechanisms supporting and/or implementing monitoring of provider compliance

-
-
- - NIST Special Publication 800-35 - -
- - Personnel Sanctions - - - - - - - PS-8 - -

The organization:

- - a. -

Employs a formal sanctions process for individuals failing to comply with established information security policies and procedures; and

-
- - b. -

Notifies within when a formal employee sanctions process is initiated, identifying the individual sanctioned and the reason for the sanction.

-
-
- -

Organizational sanctions processes reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Sanctions processes are described in access agreements and can be included as part of general personnel policies and procedures for organizations. Organizations consult with the Office of the General Counsel regarding matters of employee sanctions.

- PL-4 - PS-6 -
- -

Determine if the organization:

- - PS-8(a) -

employs a formal sanctions process for individuals failing to comply with established information security policies and procedures;

-
- - PS-8(b) - - PS-8(b)[1] -

defines personnel or roles to be notified when a formal employee sanctions process is initiated;

-
- - PS-8(b)[2] -

defines the time period within which organization-defined personnel or roles must be notified when a formal employee sanctions process is initiated; and

-
- - PS-8(b)[3] -

notifies organization-defined personnel or roles within the organization-defined time period when a formal employee sanctions process is initiated, identifying the individual sanctioned and the reason for the sanction.

-
-
-
- - EXAMINE - -

Personnel security policy

-

procedures addressing personnel sanctions

-

rules of behavior

-

records of formal sanctions

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with personnel security responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for managing personnel sanctions

-

automated mechanisms supporting and/or implementing notifications

-
-
-
-
- - Risk Assessment - - Risk Assessment Policy and Procedures - - - - - - - - - - RA-1 - -

The organization:

- - a. -

Develops, documents, and disseminates to :

- - 1. -

A risk assessment policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and

-
- - 2. -

Procedures to facilitate the implementation of the risk assessment policy and associated risk assessment controls; and

-
-
- - b. -

Reviews and updates the current:

- - 1. -

Risk assessment policy ; and

-
- - 2. -

Risk assessment procedures .

-
-
-
- -

This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the RA family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures.

- PM-9 -
- -

Determine if the organization:

- - RA-1(a) - - RA-1(a)(1) - - RA-1(a)(1)[1] -

develops and documents a risk assessment policy that addresses:

- - RA-1(a)(1)[1][a] -

purpose;

-
- - RA-1(a)(1)[1][b] -

scope;

-
- - RA-1(a)(1)[1][c] -

roles;

-
- - RA-1(a)(1)[1][d] -

responsibilities;

-
- - RA-1(a)(1)[1][e] -

management commitment;

-
- - RA-1(a)(1)[1][f] -

coordination among organizational entities;

-
- - RA-1(a)(1)[1][g] -

compliance;

-
-
- - RA-1(a)(1)[2] -

defines personnel or roles to whom the risk assessment policy is to be disseminated;

-
- - RA-1(a)(1)[3] -

disseminates the risk assessment policy to organization-defined personnel or roles;

-
-
- - RA-1(a)(2) - - RA-1(a)(2)[1] -

develops and documents procedures to facilitate the implementation of the risk assessment policy and associated risk assessment controls;

-
- - RA-1(a)(2)[2] -

defines personnel or roles to whom the procedures are to be disseminated;

-
- - RA-1(a)(2)[3] -

disseminates the procedures to organization-defined personnel or roles;

-
-
-
- - RA-1(b) - - RA-1(b)(1) - - RA-1(b)(1)[1] -

defines the frequency to review and update the current risk assessment policy;

-
- - RA-1(b)(1)[2] -

reviews and updates the current risk assessment policy with the organization-defined frequency;

-
-
- - RA-1(b)(2) - - RA-1(b)(2)[1] -

defines the frequency to review and update the current risk assessment procedures; and

-
- - RA-1(b)(2)[2] -

reviews and updates the current risk assessment procedures with the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

risk assessment policy and procedures

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with risk assessment responsibilities

-

organizational personnel with information security responsibilities

-
-
- - NIST Special Publication 800-12 - - NIST Special Publication 800-30 - - NIST Special Publication 800-100 - -
- - Security Categorization - RA-2 - -

The organization:

- - a. -

Categorizes information and the information system in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance;

-
- - b. -

Documents the security categorization results (including supporting rationale) in the security plan for the information system; and

-
- - c. -

Ensures that the authorizing official or authorizing official designated representative reviews and approves the security categorization decision.

-
-
- -

Clearly defined authorization boundaries are a prerequisite for effective security categorization decisions. Security categories describe the potential adverse impacts to organizational operations, organizational assets, and individuals if organizational information and information systems are comprised through a loss of confidentiality, integrity, or availability. Organizations conduct the security categorization process as an organization-wide activity with the involvement of chief information officers, senior information security officers, information system owners, mission/business owners, and information owners/stewards. Organizations also consider the potential adverse impacts to other organizations and, in accordance with the USA PATRIOT Act of 2001 and Homeland Security Presidential Directives, potential national-level adverse impacts. Security categorization processes carried out by organizations facilitate the development of inventories of information assets, and along with CM-8, mappings to specific information system components where information is processed, stored, or transmitted.

- CM-8 - MP-4 - RA-3 - SC-7 -
- -

Determine if the organization:

- - RA-2(a) -

categorizes information and the information system in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance;

-
- - RA-2(b) -

documents the security categorization results (including supporting rationale) in the security plan for the information system; and

-
- - RA-2(c) -

ensures the authorizing official or authorizing official designated representative reviews and approves the security categorization decision.

-
-
- - EXAMINE - -

Risk assessment policy

-

security planning policy and procedures

-

procedures addressing security categorization of organizational information and information systems

-

security plan

-

security categorization documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security categorization and risk assessment responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for security categorization

-
-
- - FIPS Publication 199 - - NIST Special Publication 800-30 - - NIST Special Publication 800-39 - - NIST Special Publication 800-60 - -
- - Risk Assessment - - - - - - - - - - - - - - - - RA-3 - -

The organization:

- - a. -

Conducts an assessment of risk, including the likelihood and magnitude of harm, from the unauthorized access, use, disclosure, disruption, modification, or destruction of the information system and the information it processes, stores, or transmits;

-
- - b. -

Documents risk assessment results in ;

-
- - c. -

Reviews risk assessment results ;

-
- - d. -

Disseminates risk assessment results to ; and

-
- - e. -

Updates the risk assessment or whenever there are significant changes to the information system or environment of operation (including the identification of new threats and vulnerabilities), or other conditions that may impact the security state of the system.

-
-
- -

Clearly defined authorization boundaries are a prerequisite for effective risk assessments. Risk assessments take into account threats, vulnerabilities, likelihood, and impact to organizational operations and assets, individuals, other organizations, and the Nation based on the operation and use of information systems. Risk assessments also take into account risk from external parties (e.g., service providers, contractors operating information systems on behalf of the organization, individuals accessing organizational information systems, outsourcing entities). In accordance with OMB policy and related E-authentication initiatives, authentication of public users accessing federal information systems may also be required to protect nonpublic or privacy-related information. As such, organizational assessments of risk also address public access to federal information systems. -Risk assessments (either formal or informal) can be conducted at all three tiers in the risk management hierarchy (i.e., organization level, mission/business process level, or information system level) and at any phase in the system development life cycle. Risk assessments can also be conducted at various steps in the Risk Management Framework, including categorization, security control selection, security control implementation, security control assessment, information system authorization, and security control monitoring. RA-3 is noteworthy in that the control must be partially implemented prior to the implementation of other controls in order to complete the first two steps in the Risk Management Framework. Risk assessments can play an important role in security control selection processes, particularly during the application of tailoring guidance, which includes security control supplementation.

- RA-2 - PM-9 -
- -

Determine if the organization:

- - RA-3(a) -

conducts an assessment of risk, including the likelihood and magnitude of harm, from the unauthorized access, use, disclosure, disruption, modification, or destruction of:

- - RA-3(a)[1] -

the information system;

-
- - RA-3(a)[2] -

the information the system processes, stores, or transmits;

-
-
- - RA-3(b) - - RA-3(b)[1] -

defines a document in which risk assessment results are to be documented (if not documented in the security plan or risk assessment report);

-
- - RA-3(b)[2] -

documents risk assessment results in one of the following:

- - RA-3(b)[2][a] -

the security plan;

-
- - RA-3(b)[2][b] -

the risk assessment report; or

-
- - RA-3(b)[2][c] -

the organization-defined document;

-
-
-
- - RA-3(c) - - RA-3(c)[1] -

defines the frequency to review risk assessment results;

-
- - RA-3(c)[2] -

reviews risk assessment results with the organization-defined frequency;

-
-
- - RA-3(d) - - RA-3(d)[1] -

defines personnel or roles to whom risk assessment results are to be disseminated;

-
- - RA-3(d)[2] -

disseminates risk assessment results to organization-defined personnel or roles;

-
-
- - RA-3(e) - - RA-3(e)[1] -

defines the frequency to update the risk assessment;

-
- - RA-3(e)[2] -

updates the risk assessment:

- - RA-3(e)[2][a] -

with the organization-defined frequency;

-
- - RA-3(e)[2][b] -

whenever there are significant changes to the information system or environment of operation (including the identification of new threats and vulnerabilities); and

-
- - RA-3(e)[2][c] -

whenever there are other conditions that may impact the security state of the system.

-
-
-
-
- - EXAMINE - -

Risk assessment policy

-

security planning policy and procedures

-

procedures addressing organizational assessments of risk

-

security plan

-

risk assessment

-

risk assessment results

-

risk assessment reviews

-

risk assessment updates

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with risk assessment responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for risk assessment

-

automated mechanisms supporting and/or for conducting, documenting, reviewing, disseminating, and updating the risk assessment

-
-
- - OMB Memorandum 04-04 - - NIST Special Publication 800-30 - - NIST Special Publication 800-39 - - http://idmanagement.gov - -
- - Risk Assessment Update - RA-4 - Withdrawn - RA-3 - - - Vulnerability Scanning - - - - - - - - - - RA-5 - -

The organization:

- - a. -

Scans for vulnerabilities in the information system and hosted applications and when new vulnerabilities potentially affecting the system/applications are identified and reported;

-
- - b. -

Employs vulnerability scanning tools and techniques that facilitate interoperability among tools and automate parts of the vulnerability management process by using standards for:

- - 1. -

Enumerating platforms, software flaws, and improper configurations;

-
- - 2. -

Formatting checklists and test procedures; and

-
- - 3. -

Measuring vulnerability impact;

-
-
- - c. -

Analyzes vulnerability scan reports and results from security control assessments;

-
- - d. -

Remediates legitimate vulnerabilities in accordance with an organizational assessment of risk; and

-
- - e. -

Shares information obtained from the vulnerability scanning process and security control assessments with to help eliminate similar vulnerabilities in other information systems (i.e., systemic weaknesses or deficiencies).

-
-
- -

Security categorization of information systems guides the frequency and comprehensiveness of vulnerability scans. Organizations determine the required vulnerability scanning for all information system components, ensuring that potential sources of vulnerabilities such as networked printers, scanners, and copiers are not overlooked. Vulnerability analyses for custom software applications may require additional approaches such as static analysis, dynamic analysis, binary analysis, or a hybrid of the three approaches. Organizations can employ these analysis approaches in a variety of tools (e.g., web-based application scanners, static analysis tools, binary analyzers) and in source code reviews. Vulnerability scanning includes, for example: (i) scanning for patch levels; (ii) scanning for functions, ports, protocols, and services that should not be accessible to users or devices; and (iii) scanning for improperly configured or incorrectly operating information flow control mechanisms. Organizations consider using tools that express vulnerabilities in the Common Vulnerabilities and Exposures (CVE) naming convention and that use the Open Vulnerability Assessment Language (OVAL) to determine/test for the presence of vulnerabilities. Suggested sources for vulnerability information include the Common Weakness Enumeration (CWE) listing and the National Vulnerability Database (NVD). In addition, security control assessments such as red team exercises provide other sources of potential vulnerabilities for which to scan. Organizations also consider using tools that express vulnerability impact by the Common Vulnerability Scoring System (CVSS).

- CA-2 - CA-7 - CM-4 - CM-6 - RA-2 - RA-3 - SA-11 - SI-2 -
- -

Determine if the organization:

- - RA-5(a) - - RA-5(a)[1] - - RA-5(a)[1][a] -

defines the frequency for conducting vulnerability scans on the information system and hosted applications; and/or

-
- - RA-5(a)[1][b] -

defines the process for conducting random vulnerability scans on the information system and hosted applications;

-
-
- - RA-5(a)[2] -

in accordance with the organization-defined frequency and/or organization-defined process for conducting random scans, scans for vulnerabilities in:

- - RA-5(a)[2][a] -

the information system;

-
- - RA-5(a)[2][b] -

hosted applications;

-
-
- - RA-5(a)[3] -

when new vulnerabilities potentially affecting the system/applications are identified and reported, scans for vulnerabilities in:

- - RA-5(a)[3][a] -

the information system;

-
- - RA-5(a)[3][b] -

hosted applications;

-
-
-
- - RA-5(b) -

employs vulnerability scanning tools and techniques that facilitate interoperability among tools and automate parts of the vulnerability management process by using standards for:

- - RA-5(b)(1) - - RA-5(b)(1)[1] -

enumerating platforms;

-
- - RA-5(b)(1)[2] -

enumerating software flaws;

-
- - RA-5(b)(1)[3] -

enumerating improper configurations;

-
-
- - RA-5(b)(2) - - RA-5(b)(2)[1] -

formatting checklists;

-
- - RA-5(b)(2)[2] -

formatting test procedures;

-
-
- - RA-5(b)(3) -

measuring vulnerability impact;

-
-
- - RA-5(c) - - RA-5(c)[1] -

analyzes vulnerability scan reports;

-
- - RA-5(c)[2] -

analyzes results from security control assessments;

-
-
- - RA-5(d) - - RA-5(d)[1] -

defines response times to remediate legitimate vulnerabilities in accordance with an organizational assessment of risk;

-
- - RA-5(d)[2] -

remediates legitimate vulnerabilities within the organization-defined response times in accordance with an organizational assessment of risk;

-
-
- - RA-5(e) - - RA-5(e)[1] -

defines personnel or roles with whom information obtained from the vulnerability scanning process and security control assessments is to be shared;

-
- - RA-5(e)[2] -

shares information obtained from the vulnerability scanning process with organization-defined personnel or roles to help eliminate similar vulnerabilities in other information systems (i.e., systemic weaknesses or deficiencies); and

-
- - RA-5(e)[3] -

shares information obtained from security control assessments with organization-defined personnel or roles to help eliminate similar vulnerabilities in other information systems (i.e., systemic weaknesses or deficiencies).

-
-
-
- - EXAMINE - -

Risk assessment policy

-

procedures addressing vulnerability scanning

-

risk assessment

-

security plan

-

security assessment report

-

vulnerability scanning tools and associated configuration documentation

-

vulnerability scanning results

-

patch and vulnerability management records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with risk assessment, security control assessment and vulnerability scanning responsibilities

-

organizational personnel with vulnerability scan analysis responsibilities

-

organizational personnel with vulnerability remediation responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for vulnerability scanning, analysis, remediation, and information sharing

-

automated mechanisms supporting and/or implementing vulnerability scanning, analysis, remediation, and information sharing

-
-
- - Update Tool Capability - RA-5(1) - -

The organization employs vulnerability scanning tools that include the capability to readily update the information system vulnerabilities to be scanned.

-
- -

The vulnerabilities to be scanned need to be readily updated as new vulnerabilities are discovered, announced, and scanning methods developed. This updating process helps to ensure that potential vulnerabilities in the information system are identified and addressed as quickly as possible.

- SI-3 - SI-7 -
- -

Determine if the organization employs vulnerability scanning tools that include the capability to readily update the information system vulnerabilities to be scanned.

-
- - EXAMINE - -

Procedures addressing vulnerability scanning

-

security plan

-

security assessment report

-

vulnerability scanning tools and associated configuration documentation

-

vulnerability scanning results

-

patch and vulnerability management records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with vulnerability scanning responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for vulnerability scanning

-

automated mechanisms/tools supporting and/or implementing vulnerability scanning

-
-
-
- - Update by Frequency / Prior to New Scan / When Identified - - - - - - - RA-5(2) - -

The organization updates the information system vulnerabilities scanned .

-
- - SI-3 - SI-5 - - -

Determine if the organization:

- - RA-5(2)[1] -

defines the frequency to update the information system vulnerabilities scanned;

-
- - RA-5(2)[2] -

updates the information system vulnerabilities scanned one or more of the following:

- - RA-5(2)[2][a] -

with the organization-defined frequency;

-
- - RA-5(2)[2][b] -

prior to a new scan; and/or

-
- - RA-5(2)[2][c] -

when new vulnerabilities are identified and reported.

-
-
-
- - EXAMINE - -

Procedures addressing vulnerability scanning

-

security plan

-

security assessment report

-

vulnerability scanning tools and associated configuration documentation

-

vulnerability scanning results

-

patch and vulnerability management records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with vulnerability scanning responsibilities

-

organizational personnel with vulnerability scan analysis responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for vulnerability scanning

-

automated mechanisms/tools supporting and/or implementing vulnerability scanning

-
-
-
- - Breadth / Depth of Coverage - RA-5(3) - -

The organization employs vulnerability scanning procedures that can identify the breadth and depth of coverage (i.e., information system components scanned and vulnerabilities checked).

-
- -

Determine if the organization employs vulnerability scanning procedures that can identify:

- - RA-5(3)[1] -

the breadth of coverage (i.e., information system components scanned); and

-
- - RA-5(3)[2] -

the depth of coverage (i.e., vulnerabilities checked).

-
-
- - EXAMINE - -

Procedures addressing vulnerability scanning

-

security plan

-

security assessment report

-

vulnerability scanning tools and associated configuration documentation

-

vulnerability scanning results

-

patch and vulnerability management records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with vulnerability scanning responsibilities

-

organizational personnel with vulnerability scan analysis responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for vulnerability scanning

-

automated mechanisms/tools supporting and/or implementing vulnerability scanning

-
-
-
- - Discoverable Information - - - - RA-5(4) - -

The organization determines what information about the information system is discoverable by adversaries and subsequently takes .

-
- -

Discoverable information includes information that adversaries could obtain without directly compromising or breaching the information system, for example, by collecting information the system is exposing or by conducting extensive searches of the web. Corrective actions can include, for example, notifying appropriate organizational personnel, removing designated information, or changing the information system to make designated information less relevant or attractive to adversaries.

- AU-13 -
- -

Determine if the organization:

- - RA-5(4)[1] -

defines corrective actions to be taken if information about the information system is discoverable by adversaries;

-
- - RA-5(4)[2] -

determines what information about the information system is discoverable by adversaries; and

-
- - RA-5(4)[3] -

subsequently takes organization-defined corrective actions.

-
-
- - EXAMINE - -

Procedures addressing vulnerability scanning

-

security assessment report

-

penetration test results

-

vulnerability scanning results

-

risk assessment report

-

records of corrective actions taken

-

incident response records

-

audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with vulnerability scanning and/or penetration testing responsibilities

-

organizational personnel with vulnerability scan analysis responsibilities

-

organizational personnel responsible for risk response

-

organizational personnel responsible for incident management and response

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for vulnerability scanning

-

organizational processes for risk response

-

organizational processes for incident management and response

-

automated mechanisms/tools supporting and/or implementing vulnerability scanning

-

automated mechanisms supporting and/or implementing risk response

-

automated mechanisms supporting and/or implementing incident management and response

-
-
-
- - Privileged Access - - - - - - - RA-5(5) - -

The information system implements privileged access authorization to for selected .

-
- -

In certain situations, the nature of the vulnerability scanning may be more intrusive or the information system component that is the subject of the scanning may contain highly sensitive information. Privileged access authorization to selected system components facilitates more thorough vulnerability scanning and also protects the sensitive nature of such scanning.

-
- -

Determine if:

- - RA-5(5)[1] -

the organization defines information system components to which privileged access is authorized for selected vulnerability scanning activities;

-
- - RA-5(5)[2] -

the organization defines vulnerability scanning activities selected for privileged access authorization to organization-defined information system components; and

-
- - RA-5(5)[3] -

the information system implements privileged access authorization to organization-defined information system components for selected organization-defined vulnerability scanning activities.

-
-
- - EXAMINE - -

Risk assessment policy

-

procedures addressing vulnerability scanning

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of information system components for vulnerability scanning

-

personnel access authorization list

-

authorization credentials

-

access authorization records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with vulnerability scanning responsibilities

-

system/network administrators

-

organizational personnel responsible for access control to the information system

-

organizational personnel responsible for configuration management of the information system

-

system developers

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for vulnerability scanning

-

organizational processes for access control

-

automated mechanisms supporting and/or implementing access control

-

automated mechanisms/tools supporting and/or implementing vulnerability scanning

-
-
-
- - Automated Trend Analyses - RA-5(6) - -

The organization employs automated mechanisms to compare the results of vulnerability scans over time to determine trends in information system vulnerabilities.

-
- - IR-4 - IR-5 - SI-4 - - -

Determine if the organization employs automated mechanisms to compare the results of vulnerability scans over time to determine trends in information system vulnerabilities.

-
- - EXAMINE - -

Risk assessment policy

-

procedures addressing vulnerability scanning

-

information system design documentation

-

vulnerability scanning tools and techniques documentation

-

vulnerability scanning results

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with vulnerability scanning responsibilities

-

organizational personnel with vulnerability scan analysis responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for vulnerability scanning

-

automated mechanisms/tools supporting and/or implementing vulnerability scanning

-

automated mechanisms supporting and/or implementing trend analysis of vulnerability scan results

-
-
-
- - Automated Detection and Notification of Unauthorized Components - RA-5(7) - Withdrawn - CM-8 - - - Review Historic Audit Logs - RA-5(8) - -

The organization reviews historic audit logs to determine if a vulnerability identified in the information system has been previously exploited.

-
- - AU-6 - - -

Determine if the organization reviews historic audit logs to determine if a vulnerability identified in the information system has been previously exploited.

-
- - EXAMINE - -

Risk assessment policy

-

procedures addressing vulnerability scanning

-

audit logs

-

records of audit log reviews

-

vulnerability scanning results

-

patch and vulnerability management records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with vulnerability scanning responsibilities

-

organizational personnel with vulnerability scan analysis responsibilities

-

organizational personnel with audit record review responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for vulnerability scanning

-

organizational process for audit record review and response

-

automated mechanisms/tools supporting and/or implementing vulnerability scanning

-

automated mechanisms supporting and/or implementing audit record review

-
-
-
- - Penetration Testing and Analyses - RA-5(9) - Withdrawn - CA-8 - - - Correlate Scanning Information - RA-5(10) - -

The organization correlates the output from vulnerability scanning tools to determine the presence of multi-vulnerability/multi-hop attack vectors.

-
- -

Determine if the organization correlates the output from vulnerability scanning tools to determine the presence of multi-vulnerability/multi-hop attack vectors.

-
- - EXAMINE - -

Risk assessment policy

-

procedures addressing vulnerability scanning

-

risk assessment

-

security plan

-

vulnerability scanning tools and techniques documentation

-

vulnerability scanning results

-

vulnerability management records

-

audit records

-

event/vulnerability correlation logs

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with vulnerability scanning responsibilities

-

organizational personnel with vulnerability scan analysis responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for vulnerability scanning

-

automated mechanisms/tools supporting and/or implementing vulnerability scanning

-

automated mechanisms implementing correlation of vulnerability scan results

-
-
-
- - NIST Special Publication 800-40 - - NIST Special Publication 800-70 - - NIST Special Publication 800-115 - - http://cwe.mitre.org - - http://nvd.nist.gov - -
- - Technical Surveillance Countermeasures Survey - - - - - - - - - - - - - RA-6 - -

The organization employs a technical surveillance countermeasures survey at - .

-
- -

Technical surveillance countermeasures surveys are performed by qualified personnel to detect the presence of technical surveillance devices/hazards and to identify technical security weaknesses that could aid in the conduct of technical penetrations of surveyed facilities. Such surveys provide evaluations of the technical security postures of organizations and facilities and typically include thorough visual, electronic, and physical examinations in and about surveyed facilities. The surveys also provide useful input into risk assessments and organizational exposure to potential adversaries.

-
- -

Determine if the organization:

- - RA-6[1] -

defines locations to employ technical surveillance countermeasure surveys;

-
- - RA-6[2] -

defines a frequency to employ technical surveillance countermeasure surveys;

-
- - RA-6[3] -

defines events or indicators which, if they occur, trigger a technical surveillance countermeasures survey;

-
- - RA-6[4] -

employs a technical surveillance countermeasures survey at organization-defined locations one or more of the following:

- - RA-6[4][a] -

with the organization-defined frequency; and/or

-
- - RA-6[4][b] -

when organization-defined events or indicators occur.

-
-
-
- - EXAMINE - -

Risk assessment policy

-

procedures addressing technical surveillance countermeasures surveys

-

security plan

-

audit records/event logs

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with technical surveillance countermeasures surveys responsibilities

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for technical surveillance countermeasures surveys

-

automated mechanisms/tools supporting and/or implementing technical surveillance countermeasures surveys

-
-
-
-
- - System and Services Acquisition - - System and Services Acquisition Policy and Procedures - - - - - - - - - - SA-1 - -

The organization:

- - a. -

Develops, documents, and disseminates to :

- - 1. -

A system and services acquisition policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and

-
- - 2. -

Procedures to facilitate the implementation of the system and services acquisition policy and associated system and services acquisition controls; and

-
-
- - b. -

Reviews and updates the current:

- - 1. -

System and services acquisition policy ; and

-
- - 2. -

System and services acquisition procedures .

-
-
-
- -

This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the SA family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures.

- PM-9 -
- -

Determine if the organization:

- - SA-1(a) - - SA-1(a)(1) - - SA-1(a)(1)[1] -

develops and documents a system and services acquisition policy that addresses:

- - SA-1(a)(1)[1][a] -

purpose;

-
- - SA-1(a)(1)[1][b] -

scope;

-
- - SA-1(a)(1)[1][c] -

roles;

-
- - SA-1(a)(1)[1][d] -

responsibilities;

-
- - SA-1(a)(1)[1][e] -

management commitment;

-
- - SA-1(a)(1)[1][f] -

coordination among organizational entities;

-
- - SA-1(a)(1)[1][g] -

compliance;

-
-
- - SA-1(a)(1)[2] -

defines personnel or roles to whom the system and services acquisition policy is to be disseminated;

-
- - SA-1(a)(1)[3] -

disseminates the system and services acquisition policy to organization-defined personnel or roles;

-
-
- - SA-1(a)(2) - - SA-1(a)(2)[1] -

develops and documents procedures to facilitate the implementation of the system and services acquisition policy and associated system and services acquisition controls;

-
- - SA-1(a)(2)[2] -

defines personnel or roles to whom the procedures are to be disseminated;

-
- - SA-1(a)(2)[3] -

disseminates the procedures to organization-defined personnel or roles;

-
-
-
- - SA-1(b) - - SA-1(b)(1) - - SA-1(b)(1)[1] -

defines the frequency to review and update the current system and services acquisition policy;

-
- - SA-1(b)(1)[2] -

reviews and updates the current system and services acquisition policy with the organization-defined frequency;

-
-
- - SA-1(b)(2) - - SA-1(b)(2)[1] -

defines the frequency to review and update the current system and services acquisition procedures; and

-
- - SA-1(b)(2)[2] -

reviews and updates the current system and services acquisition procedures with the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

System and services acquisition policy and procedures

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-
-
- - NIST Special Publication 800-12 - - NIST Special Publication 800-100 - -
- - Allocation of Resources - SA-2 - -

The organization:

- - a. -

Determines information security requirements for the information system or information system service in mission/business process planning;

-
- - b. -

Determines, documents, and allocates the resources required to protect the information system or information system service as part of its capital planning and investment control process; and

-
- - c. -

Establishes a discrete line item for information security in organizational programming and budgeting documentation.

-
-
- -

Resource allocation for information security includes funding for the initial information system or information system service acquisition and funding for the sustainment of the system/service.

- PM-3 - PM-11 -
- -

Determine if the organization:

- - SA-2(a) -

determines information security requirements for the information system or information system service in mission/business process planning;

-
- - SA-2(b) -

to protect the information system or information system service as part of its capital planning and investment control process:

- - SA-2(b)[1] -

determines the resources required;

-
- - SA-2(b)[2] -

documents the resources required;

-
- - SA-2(b)[3] -

allocates the resources required; and

-
-
- - SA-2(c) -

establishes a discrete line item for information security in organizational programming and budgeting documentation.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing the allocation of resources to information security requirements

-

procedures addressing capital planning and investment control

-

organizational programming and budgeting documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with capital planning, investment control, organizational programming and budgeting responsibilities

-

organizational personnel responsible for determining information security requirements for information systems/services

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for determining information security requirements

-

organizational processes for capital planning, programming, and budgeting

-

automated mechanisms supporting and/or implementing organizational capital planning, programming, and budgeting

-
-
- - NIST Special Publication 800-65 - -
- - System Development Life Cycle - - - - SA-3 - -

The organization:

- - a. -

Manages the information system using that incorporates information security considerations;

-
- - b. -

Defines and documents information security roles and responsibilities throughout the system development life cycle;

-
- - c. -

Identifies individuals having information security roles and responsibilities; and

-
- - d. -

Integrates the organizational information security risk management process into system development life cycle activities.

-
-
- -

A well-defined system development life cycle provides the foundation for the successful development, implementation, and operation of organizational information systems. To apply the required security controls within the system development life cycle requires a basic understanding of information security, threats, vulnerabilities, adverse impacts, and risk to critical missions/business functions. The security engineering principles in SA-8 cannot be properly applied if individuals that design, code, and test information systems and system components (including information technology products) do not understand security. Therefore, organizations include qualified personnel, for example, chief information security officers, security architects, security engineers, and information system security officers in system development life cycle activities to ensure that security requirements are incorporated into organizational information systems. It is equally important that developers include individuals on the development team that possess the requisite security expertise and skills to ensure that needed security capabilities are effectively integrated into the information system. Security awareness and training programs can help ensure that individuals having key security roles and responsibilities have the appropriate experience, skills, and expertise to conduct assigned system development life cycle activities. The effective integration of security requirements into enterprise architecture also helps to ensure that important security considerations are addressed early in the system development life cycle and that those considerations are directly related to the organizational mission/business processes. This process also facilitates the integration of the information security architecture into the enterprise architecture, consistent with organizational risk management and information security strategies.

- AT-3 - PM-7 - SA-8 -
- -

Determine if the organization:

- - SA-3(a) - - SA-3(a)[1] -

defines a system development life cycle that incorporates information security considerations to be used to manage the information system;

-
- - SA-3(a)[2] -

manages the information system using the organization-defined system development life cycle;

-
-
- - SA-3(b) -

defines and documents information security roles and responsibilities throughout the system development life cycle;

-
- - SA-3(c) -

identifies individuals having information security roles and responsibilities; and

-
- - SA-3(d) -

integrates the organizational information security risk management process into system development life cycle activities.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing the integration of information security into the system development life cycle process

-

information system development life cycle documentation

-

information security risk management strategy/program documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security and system life cycle development responsibilities

-

organizational personnel with information security risk management responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for defining and documenting the SDLC

-

organizational processes for identifying SDLC roles and responsibilities

-

organizational process for integrating information security risk management into the SDLC

-

automated mechanisms supporting and/or implementing the SDLC

-
-
- - NIST Special Publication 800-37 - - NIST Special Publication 800-64 - -
- - Acquisition Process - SA-4 - -

The organization includes the following requirements, descriptions, and criteria, explicitly or by reference, in the acquisition contract for the information system, system component, or information system service in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, standards, guidelines, and organizational mission/business needs:

- - a. -

Security functional requirements;

-
- - b. -

Security strength requirements;

-
- - c. -

Security assurance requirements;

-
- - d. -

Security-related documentation requirements;

-
- - e. -

Requirements for protecting security-related documentation;

-
- - f. -

Description of the information system development environment and environment in which the system is intended to operate; and

-
- - g. -

Acceptance criteria.

-
-
- -

Information system components are discrete, identifiable information technology assets (e.g., hardware, software, or firmware) that represent the building blocks of an information system. Information system components include commercial information technology products. Security functional requirements include security capabilities, security functions, and security mechanisms. Security strength requirements associated with such capabilities, functions, and mechanisms include degree of correctness, completeness, resistance to direct attack, and resistance to tampering or bypass. Security assurance requirements include: (i) development processes, procedures, practices, and methodologies; and (ii) evidence from development and assessment activities providing grounds for confidence that the required security functionality has been implemented and the required security strength has been achieved. Security documentation requirements address all phases of the system development life cycle. -Security functionality, assurance, and documentation requirements are expressed in terms of security controls and control enhancements that have been selected through the tailoring process. The security control tailoring process includes, for example, the specification of parameter values through the use of assignment and selection statements and the specification of platform dependencies and implementation information. Security documentation provides user and administrator guidance regarding the implementation and operation of security controls. The level of detail required in security documentation is based on the security category or classification level of the information system and the degree to which organizations depend on the stated security capability, functions, or mechanisms to meet overall risk response expectations (as defined in the organizational risk management strategy). Security requirements can also include organizationally mandated configuration settings specifying allowed functions, ports, protocols, and services. Acceptance criteria for information systems, information system components, and information system services are defined in the same manner as such criteria for any organizational acquisition or procurement. The Federal Acquisition Regulation (FAR) Section 7.103 contains information security requirements from FISMA.

- CM-6 - PL-2 - PS-7 - SA-3 - SA-5 - SA-8 - SA-11 - SA-12 -
- -

Determine if the organization includes the following requirements, descriptions, and criteria, explicitly or by reference, in the acquisition contracts for the information system, system component, or information system service in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, standards, guidelines, and organizational mission/business needs:

- - SA-4(a) -

security functional requirements;

-
- - SA-4(b) -

security strength requirements;

-
- - SA-4(c) -

security assurance requirements;

-
- - SA-4(d) -

security-related documentation requirements;

-
- - SA-4(e) -

requirements for protecting security-related documentation;

-
- - SA-4(f) -

description of:

- - SA-4(f)[1] -

the information system development environment;

-
- - SA-4(f)[2] -

the environment in which the system is intended to operate; and

-
-
- - SA-4(g) -

acceptance criteria.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing the integration of information security requirements, descriptions, and criteria into the acquisition process

-

acquisition contracts for the information system, system component, or information system service

-

information system design documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with acquisition/contracting responsibilities

-

organizational personnel with responsibility for determining information system security functional, strength, and assurance requirements

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for determining information system security functional, strength, and assurance requirements

-

organizational processes for developing acquisition contracts

-

automated mechanisms supporting and/or implementing acquisitions and inclusion of security requirements in contracts

-
-
- - Functional Properties of Security Controls - SA-4(1) - -

The organization requires the developer of the information system, system component, or information system service to provide a description of the functional properties of the security controls to be employed.

-
- -

Functional properties of security controls describe the functionality (i.e., security capability, functions, or mechanisms) visible at the interfaces of the controls and specifically exclude functionality and data structures internal to the operation of the controls.

- SA-5 -
- -

Determine if the organization requires the developer of the information system, system component, or information system service to provide a description of the functional properties of the security controls to be employed.

-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing the integration of information security requirements, descriptions, and criteria into the acquisition process

-

solicitation documents

-

acquisition documentation

-

acquisition contracts for the information system, system component, or information system services

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with acquisition/contracting responsibilities

-

organizational personnel with responsibility for determining information system security functional requirements

-

information system developer or service provider

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for determining information system security functional, requirements

-

organizational processes for developing acquisition contracts

-

automated mechanisms supporting and/or implementing acquisitions and inclusion of security requirements in contracts

-
-
-
- - Design / Implementation Information for Security Controls - - - - - - - - - - SA-4(2) - -

The organization requires the developer of the information system, system component, or information system service to provide design and implementation information for the security controls to be employed that includes: at .

-
- -

Organizations may require different levels of detail in design and implementation documentation for security controls employed in organizational information systems, system components, or information system services based on mission/business requirements, requirements for trustworthiness/resiliency, and requirements for analysis and testing. Information systems can be partitioned into multiple subsystems. Each subsystem within the system can contain one or more modules. The high-level design for the system is expressed in terms of multiple subsystems and the interfaces between subsystems providing security-relevant functionality. The low-level design for the system is expressed in terms of modules with particular emphasis on software and firmware (but not excluding hardware) and the interfaces between modules providing security-relevant functionality. Source code and hardware schematics are typically referred to as the implementation representation of the information system.

- SA-5 -
- -

Determine if the organization:

- - SA-4(2)[1] -

defines level of detail that the developer is required to provide in design and implementation information for the security controls to be employed in the information system, system component, or information system service;

-
- - SA-4(2)[2] -

defines design/implementation information that the developer is to provide for the security controls to be employed (if selected);

-
- - SA-4(2)[3] -

requires the developer of the information system, system component, or information system service to provide design and implementation information for the security controls to be employed that includes, at the organization-defined level of detail, one or more of the following:

- - SA-4(2)[3][a] -

security-relevant external system interfaces;

-
- - SA-4(2)[3][b] -

high-level design;

-
- - SA-4(2)[3][c] -

low-level design;

-
- - SA-4(2)[3][d] -

source code;

-
- - SA-4(2)[3][e] -

hardware schematics; and/or

-
- - SA-4(2)[3][f] -

organization-defined design/implementation information.

-
-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing the integration of information security requirements, descriptions, and criteria into the acquisition process

-

solicitation documents

-

acquisition documentation

-

acquisition contracts for the information system, system components, or information system services

-

design and implementation information for security controls employed in the information system, system component, or information system service

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with acquisition/contracting responsibilities

-

organizational personnel with responsibility for determining information system security requirements

-

information system developer or service provider

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for determining level of detail for system design and security controls

-

organizational processes for developing acquisition contracts

-

automated mechanisms supporting and/or implementing development of system design details

-
-
-
- - Development Methods / Techniques / Practices - - - - SA-4(3) - -

The organization requires the developer of the information system, system component, or information system service to demonstrate the use of a system development life cycle that includes .

-
- -

Following a well-defined system development life cycle that includes state-of-the-practice software development methods, systems/security engineering methods, quality control processes, and testing, evaluation, and validation techniques helps to reduce the number and severity of latent errors within information systems, system components, and information system services. Reducing the number/severity of such errors reduces the number of vulnerabilities in those systems, components, and services.

- SA-12 -
- -

Determine if the organization:

- - SA-4(3)[1] -

defines state-of-the-practice system/security engineering methods to be included in the system development life cycle employed by the developer of the information system, system component, or information system service;

-
- - SA-4(3)[2] -

defines software development methods to be included in the system development life cycle employed by the developer of the information system, system component, or information system service;

-
- - SA-4(3)[3] -

defines testing/evaluation/validation techniques to be included in the system development life cycle employed by the developer of the information system, system component, or information system service;

-
- - SA-4(3)[4] -

defines quality control processes to be included in the system development life cycle employed by the developer of the information system, system component, or information system service;

-
- - SA-4(3)[5] -

requires the developer of the information system, system component, or information system service to demonstrate the use of a system development life cycle that includes:

- - SA-4(3)[5][a] -

organization-defined state-of-the-practice system/security engineering methods;

-
- - SA-4(3)[5][b] -

organization-defined software development methods;

-
- - SA-4(3)[5][c] -

organization-defined testing/evaluation/validation techniques; and

-
- - SA-4(3)[5][d] -

organization-defined quality control processes.

-
-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing the integration of information security requirements, descriptions, and criteria into the acquisition process

-

solicitation documents

-

acquisition documentation

-

acquisition contracts for the information system, system component, or information system service

-

list of system/security engineering methods to be included in developer’s system development life cycle process

-

list of software development methods to be included in developer’s system development life cycle process

-

list of testing/evaluation/validation techniques to be included in developer’s system development life cycle process

-

list of quality control processes to be included in developer’s system development life cycle process

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with acquisition/contracting responsibilities

-

organizational personnel with responsibility for determining information system security requirements

-

organizational personnel with information security and system life cycle responsibilities

-

information system developer or service provider

-
-
- - TEST - -

Organizational processes for development methods, techniques, and processes

-
-
-
- - Assignment of Components to Systems - SA-4(4) - Withdrawn - CM-8 (9) - - - System / Component / Service Configurations - - - - SA-4(5) - -

The organization requires the developer of the information system, system component, or information system service to:

- - (a) -

Deliver the system, component, or service with implemented; and

-
- - (b) -

Use the configurations as the default for any subsequent system, component, or service reinstallation or upgrade.

-
-
- -

Security configurations include, for example, the U.S. Government Configuration Baseline (USGCB) and any limitations on functions, ports, protocols, and services. Security characteristics include, for example, requiring that all default passwords have been changed.

- CM-8 -
- -

Determine if the organization:

- - SA-4(5)(a) - - SA-4(5)(a)[1] -

defines security configurations to be implemented by the developer of the information system, system component, or information system service;

-
- - SA-4(5)(a)[2] -

requires the developer of the information system, system component, or information system service to deliver the system, component, or service with organization-defined security configurations implemented; and

-
- SA-4(5)(a) -
- - SA-4(5)(b) -

requires the developer of the information system, system component, or information system service to use the configurations as the default for any subsequent system, component, or service reinstallation or upgrade.

- SA-4(5)(b) -
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing the integration of information security requirements, descriptions, and criteria into the acquisition process

-

solicitation documents

-

acquisition documentation

-

acquisition contracts for the information system, system component, or information system service

-

security configurations to be implemented by developer of the information system, system component, or information system service

-

service-level agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with acquisition/contracting responsibilities

-

organizational personnel with responsibility for determining information system security requirements

-

information system developer or service provider

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms used to verify that the configuration of the information system, component, or service, as delivered, is as specified

-
-
-
- - Use of Information Assurance Products - SA-4(6) - -

The organization:

- - (a) -

Employs only government off-the-shelf (GOTS) or commercial off-the-shelf (COTS) information assurance (IA) and IA-enabled information technology products that compose an NSA-approved solution to protect classified information when the networks used to transmit the information are at a lower classification level than the information being transmitted; and

-
- - (b) -

Ensures that these products have been evaluated and/or validated by NSA or in accordance with NSA-approved procedures.

-
-
- -

COTS IA or IA-enabled information technology products used to protect classified information by cryptographic means may be required to use NSA-approved key management.

- SC-8 - SC-12 - SC-13 -
- -

Determine if the organization:

- - SA-4(6)(a) -

employs only government off-the-shelf (GOTS) or commercial off-the-shelf (COTS) information assurance (IA) and IA-enabled information technology products that compose an NSA-approved solution to protect classified information when the networks used to transmit the information are at a lower classification level than the information being transmitted; and

- SA-4(6)(a) -
- - SA-4(6)(b) -

ensures that these products have been evaluated and/or validated by the NSA or in accordance with NSA-approved procedures.

- SA-4(6)(b) -
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing the integration of information security requirements, descriptions, and criteria into the acquisition process

-

solicitation documents

-

acquisition documentation

-

acquisition contracts for the information system, system component, or information system service

-

security configurations to be implemented by developer of the information system, system component, or information system service

-

service-level agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with acquisition/contracting responsibilities

-

organizational personnel with responsibility for determining information system security requirements

-

organizational personnel responsible for ensuring information assurance products are NSA-approved and are evaluated and/or validated products in accordance with NSA-approved procedures

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for selecting and employing evaluated and/or validated information assurance products and services that compose an NSA-approved solution to protect classified information

-
-
-
- - Niap-approved Protection Profiles - SA-4(7) - -

The organization:

- - (a) -

Limits the use of commercially provided information assurance (IA) and IA-enabled information technology products to those products that have been successfully evaluated against a National Information Assurance partnership (NIAP)-approved Protection Profile for a specific technology type, if such a profile exists; and

-
- - (b) -

Requires, if no NIAP-approved Protection Profile exists for a specific technology type but a commercially provided information technology product relies on cryptographic functionality to enforce its security policy, that the cryptographic module is FIPS-validated.

-
-
- - SC-12 - SC-13 - - -

Determine if the organization:

- - SA-4(7)(a) -

limits the use of commercially-provided information assurance (IA) and IA-enabled information technology products to those products that have been successfully evaluated against a National Information Assurance partnership (NIAP)-approved Protection Profile for a specific technology type, if such a profile exists; and

- SA-4(7)(a) -
- - SA-4(7)(b) -

requires, if no NIAP-approved Protection Profile exists for a specific technology type but a commercially provided information technology product relies on cryptographic functionality to enforce its security policy, that the cryptographic module is FIPS-validated.

- SA-4(7)(b) -
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing the integration of information security requirements, descriptions, and criteria into the acquisition process

-

solicitation documents

-

acquisition documentation

-

acquisition contracts for the information system, system component, or information system service

-

NAIP-approved protection profiles

-

FIPS-validation information for cryptographic functionality

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with acquisition/contracting responsibilities

-

organizational personnel with responsibility for determining information system security requirements

-

organizational personnel responsible for ensuring information assurance products are have been evaluated against a NIAP-approved protection profile or for ensuring products relying on cryptographic functionality are FIPS-validated

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for selecting and employing products/services evaluated against a NIAP-approved protection profile or FIPS-validated products

-
-
-
- - Continuous Monitoring Plan - - - - SA-4(8) - -

The organization requires the developer of the information system, system component, or information system service to produce a plan for the continuous monitoring of security control effectiveness that contains .

-
- -

The objective of continuous monitoring plans is to determine if the complete set of planned, required, and deployed security controls within the information system, system component, or information system service continue to be effective over time based on the inevitable changes that occur. Developer continuous monitoring plans include a sufficient level of detail such that the information can be incorporated into the continuous monitoring strategies and programs implemented by organizations.

- CA-7 -
- -

Determine if the organization:

- - SA-4(8)[1] -

defines the level of detail the developer of the information system, system component, or information system service is required to provide when producing a plan for the continuous monitoring of security control effectiveness; and

-
- - SA-4(8)[2] -

requires the developer of the information system, system component, or information system service to produce a plan for the continuous monitoring of security control effectiveness that contains the organization-defined level of detail.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing developer continuous monitoring plans

-

procedures addressing the integration of information security requirements, descriptions, and criteria into the acquisition process

-

developer continuous monitoring plans

-

security assessment plans

-

acquisition contracts for the information system, system component, or information system service

-

acquisition documentation

-

solicitation documentation

-

service-level agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with acquisition/contracting responsibilities

-

organizational personnel with responsibility for determining information system security requirements

-

information system developers

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Vendor processes for continuous monitoring

-

automated mechanisms supporting and/or implementing developer continuous monitoring

-
-
-
- - Functions / Ports / Protocols / Services in Use - SA-4(9) - -

The organization requires the developer of the information system, system component, or information system service to identify early in the system development life cycle, the functions, ports, protocols, and services intended for organizational use.

-
- -

The identification of functions, ports, protocols, and services early in the system development life cycle (e.g., during the initial requirements definition and design phases) allows organizations to influence the design of the information system, information system component, or information system service. This early involvement in the life cycle helps organizations to avoid or minimize the use of functions, ports, protocols, or services that pose unnecessarily high risks and understand the trade-offs involved in blocking specific ports, protocols, or services (or when requiring information system service providers to do so). Early identification of functions, ports, protocols, and services avoids costly retrofitting of security controls after the information system, system component, or information system service has been implemented. SA-9 describes requirements for external information system services with organizations identifying which functions, ports, protocols, and services are provided from external sources.

- CM-7 - SA-9 -
- -

Determine if the organization requires the developer of the information system, system component, or information system service to identify early in the system development life cycle:

- - SA-4(9)[1] -

the functions intended for organizational use;

-
- - SA-4(9)[2] -

the ports intended for organizational use;

-
- - SA-4(9)[3] -

the protocols intended for organizational use; and

-
- - SA-4(9)[4] -

the services intended for organizational use.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing the integration of information security requirements, descriptions, and criteria into the acquisition process

-

information system design documentation

-

information system documentation including functions, ports, protocols, and services intended for organizational use

-

acquisition contracts for information systems or services

-

acquisition documentation

-

solicitation documentation

-

service-level agreements

-

organizational security requirements, descriptions, and criteria for developers of information systems, system components, and information system services

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with acquisition/contracting responsibilities

-

organizational personnel with responsibility for determining information system security requirements

-

system/network administrators

-

organizational personnel operating, using, and/or maintaining the information system

-

information system developers

-

organizational personnel with information security responsibilities

-
-
-
- - Use of Approved PIV Products - SA-4(10) - -

The organization employs only information technology products on the FIPS 201-approved products list for Personal Identity Verification (PIV) capability implemented within organizational information systems.

-
- - IA-2 - IA-8 - - -

Determine if the organization employs only information technology products on the FIPS 201-approved products list for Personal Identity Verification (PIV) capability implemented within organizational information systems.

-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing the integration of information security requirements, descriptions, and criteria into the acquisition process

-

solicitation documentation

-

acquisition documentation

-

acquisition contracts for the information system, system component, or information system service

-

service-level agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with acquisition/contracting responsibilities

-

organizational personnel with responsibility for determining information system security requirements

-

organizational personnel with responsibility for ensuring only FIPS 201-approved products are implemented

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for selecting and employing FIPS 201-approved products

-
-
-
- - HSPD-12 - - ISO/IEC 15408 - - FIPS Publication 140-2 - - FIPS Publication 201 - - NIST Special Publication 800-23 - - NIST Special Publication 800-35 - - NIST Special Publication 800-36 - - NIST Special Publication 800-37 - - NIST Special Publication 800-64 - - NIST Special Publication 800-70 - - NIST Special Publication 800-137 - - Federal Acquisition Regulation - - http://www.niap-ccevs.org - - http://fips201ep.cio.gov - - http://www.acquisition.gov/far - -
- - Information System Documentation - - - - - - - SA-5 - -

The organization:

- - a. -

Obtains administrator documentation for the information system, system component, or information system service that describes:

- - 1. -

Secure configuration, installation, and operation of the system, component, or service;

-
- - 2. -

Effective use and maintenance of security functions/mechanisms; and

-
- - 3. -

Known vulnerabilities regarding configuration and use of administrative (i.e., privileged) functions;

-
-
- - b. -

Obtains user documentation for the information system, system component, or information system service that describes:

- - 1. -

User-accessible security functions/mechanisms and how to effectively use those security functions/mechanisms;

-
- - 2. -

Methods for user interaction, which enables individuals to use the system, component, or service in a more secure manner; and

-
- - 3. -

User responsibilities in maintaining the security of the system, component, or service;

-
-
- - c. -

Documents attempts to obtain information system, system component, or information system service documentation when such documentation is either unavailable or nonexistent and takes in response;

-
- - d. -

Protects documentation as required, in accordance with the risk management strategy; and

-
- - e. -

Distributes documentation to .

-
-
- -

This control helps organizational personnel understand the implementation and operation of security controls associated with information systems, system components, and information system services. Organizations consider establishing specific measures to determine the quality/completeness of the content provided. The inability to obtain needed documentation may occur, for example, due to the age of the information system/component or lack of support from developers and contractors. In those situations, organizations may need to recreate selected documentation if such documentation is essential to the effective implementation or operation of security controls. The level of protection provided for selected information system, component, or service documentation is commensurate with the security category or classification of the system. For example, documentation associated with a key DoD weapons system or command and control system would typically require a higher level of protection than a routine administrative system. Documentation that addresses information system vulnerabilities may also require an increased level of protection. Secure operation of the information system, includes, for example, initially starting the system and resuming secure system operation after any lapse in system operation.

- CM-6 - CM-8 - PL-2 - PL-4 - PS-2 - SA-3 - SA-4 -
- -

Determine if the organization:

- - SA-5(a) -

obtains administrator documentation for the information system, system component, or information system service that describes:

- - SA-5(a)(1) - - SA-5(a)(1)[1] -

secure configuration of the system, system component, or service;

-
- - SA-5(a)(1)[2] -

secure installation of the system, system component, or service;

-
- - SA-5(a)(1)[3] -

secure operation of the system, system component, or service;

-
-
- - SA-5(a)(2) - - SA-5(a)(2)[1] -

effective use of the security features/mechanisms;

-
- - SA-5(a)(2)[2] -

effective maintenance of the security features/mechanisms;

-
-
- - SA-5(a)(3) -

known vulnerabilities regarding configuration and use of administrative (i.e., privileged) functions;

-
-
- - SA-5(b) -

obtains user documentation for the information system, system component, or information system service that describes:

- - SA-5(b)(1) - - SA-5(b)(1)[1] -

user-accessible security functions/mechanisms;

-
- - SA-5(b)(1)[2] -

how to effectively use those functions/mechanisms;

-
-
- - SA-5(b)(2) -

methods for user interaction, which enables individuals to use the system, component, or service in a more secure manner;

-
- - SA-5(b)(3) -

user responsibilities in maintaining the security of the system, component, or service;

-
-
- - SA-5(c) - - SA-5(c)[1] -

defines actions to be taken after documented attempts to obtain information system, system component, or information system service documentation when such documentation is either unavailable or nonexistent;

-
- - SA-5(c)[2] -

documents attempts to obtain information system, system component, or information system service documentation when such documentation is either unavailable or nonexistent;

-
- - SA-5(c)[3] -

takes organization-defined actions in response;

-
-
- - SA-5(d) -

protects documentation as required, in accordance with the risk management strategy;

-
- - SA-5(e) - - SA-5(e)[1] -

defines personnel or roles to whom documentation is to be distributed; and

-
- - SA-5(e)[2] -

distributes documentation to organization-defined personnel or roles.

-
-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing information system documentation

-

information system documentation including administrator and user guides

-

records documenting attempts to obtain unavailable or nonexistent information system documentation

-

list of actions to be taken in response to documented attempts to obtain information system, system component, or information system service documentation

-

risk management strategy documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with acquisition/contracting responsibilities

-

organizational personnel with responsibility for determining information system security requirements

-

system administrators

-

organizational personnel operating, using, and/or maintaining the information system

-

information system developers

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for obtaining, protecting, and distributing information system administrator and user documentation

-
-
- - Functional Properties of Security Controls - SA-5(1) - Withdrawn - SA-4 (1) - - - Security-relevant External System Interfaces - SA-5(2) - Withdrawn - SA-4 (2) - - - High-level Design - SA-5(3) - Withdrawn - SA-4 (2) - - - Low-level Design - SA-5(4) - Withdrawn - SA-4 (2) - - - Source Code - SA-5(5) - Withdrawn - SA-4 (2) - -
- - Software Usage Restrictions - SA-6 - Withdrawn - CM-10 - SI-7 - - - User-installed Software - SA-7 - Withdrawn - CM-11 - SI-7 - - - Security Engineering Principles - SA-8 - -

The organization applies information system security engineering principles in the specification, design, development, implementation, and modification of the information system.

-
- -

Organizations apply security engineering principles primarily to new development information systems or systems undergoing major upgrades. For legacy systems, organizations apply security engineering principles to system upgrades and modifications to the extent feasible, given the current state of hardware, software, and firmware within those systems. Security engineering principles include, for example: (i) developing layered protections; (ii) establishing sound security policy, architecture, and controls as the foundation for design; (iii) incorporating security requirements into the system development life cycle; (iv) delineating physical and logical security boundaries; (v) ensuring that system developers are trained on how to build secure software; (vi) tailoring security controls to meet organizational and operational needs; (vii) performing threat modeling to identify use cases, threat agents, attack vectors, and attack patterns as well as compensating controls and design patterns needed to mitigate risk; and (viii) reducing risk to acceptable levels, thus enabling informed risk management decisions.

- PM-7 - SA-3 - SA-4 - SA-17 - SC-2 - SC-3 -
- -

Determine if the organization applies information system security engineering principles in:

- - SA-8[1] -

the specification of the information system;

-
- - SA-8[2] -

the design of the information system;

-
- - SA-8[3] -

the development of the information system;

-
- - SA-8[4] -

the implementation of the information system; and

-
- - SA-8[5] -

the modification of the information system.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing security engineering principles used in the specification, design, development, implementation, and modification of the information system

-

information system design documentation

-

information security requirements and specifications for the information system

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with acquisition/contracting responsibilities

-

organizational personnel with responsibility for determining information system security requirements

-

organizational personnel with information system specification, design, development, implementation, and modification responsibilities

-

information system developers

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for applying security engineering principles in information system specification, design, development, implementation, and modification

-

automated mechanisms supporting the application of security engineering principles in information system specification, design, development, implementation, and modification

-
-
- - NIST Special Publication 800-27 - -
- - External Information System Services - - - - - - - SA-9 - -

The organization:

- - a. -

Requires that providers of external information system services comply with organizational information security requirements and employ in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance;

-
- - b. -

Defines and documents government oversight and user roles and responsibilities with regard to external information system services; and

-
- - c. -

Employs to monitor security control compliance by external service providers on an ongoing basis.

-
-
- -

External information system services are services that are implemented outside of the authorization boundaries of organizational information systems. This includes services that are used by, but not a part of, organizational information systems. FISMA and OMB policy require that organizations using external service providers that are processing, storing, or transmitting federal information or operating information systems on behalf of the federal government ensure that such providers meet the same security requirements that federal agencies are required to meet. Organizations establish relationships with external service providers in a variety of ways including, for example, through joint ventures, business partnerships, contracts, interagency agreements, lines of business arrangements, licensing agreements, and supply chain exchanges. The responsibility for managing risks from the use of external information system services remains with authorizing officials. For services external to organizations, a chain of trust requires that organizations establish and retain a level of confidence that each participating provider in the potentially complex consumer-provider relationship provides adequate protection for the services rendered. The extent and nature of this chain of trust varies based on the relationships between organizations and the external providers. Organizations document the basis for trust relationships so the relationships can be monitored over time. External information system services documentation includes government, service providers, end user security roles and responsibilities, and service-level agreements. Service-level agreements define expectations of performance for security controls, describe measurable outcomes, and identify remedies and response requirements for identified instances of noncompliance.

- CA-3 - IR-7 - PS-7 -
- -

Determine if the organization:

- - SA-9(a) - - SA-9(a)[1] -

defines security controls to be employed by providers of external information system services;

-
- - SA-9(a)[2] -

requires that providers of external information system services comply with organizational information security requirements;

-
- - SA-9(a)[3] -

requires that providers of external information system services employ organization-defined security controls in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance;

-
-
- - SA-9(b) - - SA-9(b)[1] -

defines and documents government oversight with regard to external information system services;

-
- - SA-9(b)[2] -

defines and documents user roles and responsibilities with regard to external information system services;

-
-
- - SA-9(c) - - SA-9(c)[1] -

defines processes, methods, and techniques to be employed to monitor security control compliance by external service providers; and

-
- - SA-9(c)[2] -

employs organization-defined processes, methods, and techniques to monitor security control compliance by external service providers on an ongoing basis.

-
-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing external information system services

-

procedures addressing methods and techniques for monitoring security control compliance by external service providers of information system services

-

acquisition contracts, service-level agreements

-

organizational security requirements and security specifications for external provider services

-

security control assessment evidence from external providers of information system services

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

external providers of information system services

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for monitoring security control compliance by external service providers on an ongoing basis

-

automated mechanisms for monitoring security control compliance by external service providers on an ongoing basis

-
-
- - Risk Assessments / Organizational Approvals - - - - SA-9(1) - -

The organization:

- - (a) -

Conducts an organizational assessment of risk prior to the acquisition or outsourcing of dedicated information security services; and

-
- - (b) -

Ensures that the acquisition or outsourcing of dedicated information security services is approved by .

-
-
- -

Dedicated information security services include, for example, incident monitoring, analysis and response, operation of information security-related devices such as firewalls, or key management services.

- CA-6 - RA-3 -
- -

Determine if the organization:

- - SA-9(1)(a) -

conducts an organizational assessment of risk prior to the acquisition or outsourcing of dedicated information security services;

- SA-9(1)(a) -
- - SA-9(1)(b) - - SA-9(1)(b)[1] -

defines personnel or roles designated to approve the acquisition or outsourcing of dedicated information security services; and

-
- - SA-9(1)(b)[2] -

ensures that the acquisition or outsourcing of dedicated information security services is approved by organization-defined personnel or roles.

-
- SA-9(1)(b) -
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing external information system services

-

acquisition documentation

-

acquisition contracts for the information system, system component, or information system service

-

risk assessment reports

-

approval records for acquisition or outsourcing of dedicated information security services

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information system security responsibilities

-

external providers of information system services

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for conducting a risk assessment prior to acquiring or outsourcing dedicated information security services

-

organizational processes for approving the outsourcing of dedicated information security services

-

automated mechanisms supporting and/or implementing risk assessment

-

automated mechanisms supporting and/or implementing approval processes

-
-
-
- - Identification of Functions / Ports / Protocols / Services - - - - SA-9(2) - -

The organization requires providers of to identify the functions, ports, protocols, and other services required for the use of such services.

-
- -

Information from external service providers regarding the specific functions, ports, protocols, and services used in the provision of such services can be particularly useful when the need arises to understand the trade-offs involved in restricting certain functions/services or blocking certain ports/protocols.

- CM-7 -
- -

Determine if the organization:

- - SA-9(2)[1] -

defines external information system services for which providers of such services are to identify the functions, ports, protocols, and other services required for the use of such services;

-
- - SA-9(2)[2] -

requires providers of organization-defined external information system services to identify:

- - SA-9(2)[2][a] -

the functions required for the use of such services;

-
- - SA-9(2)[2][b] -

the ports required for the use of such services;

-
- - SA-9(2)[2][c] -

the protocols required for the use of such services; and

-
- - SA-9(2)[2][d] -

the other services required for the use of such services.

-
-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing external information system services

-

acquisition contracts for the information system, system component, or information system service

-

acquisition documentation

-

solicitation documentation, service-level agreements

-

organizational security requirements and security specifications for external service providers

-

list of required functions, ports, protocols, and other services

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

external providers of information system services

-
-
-
- - Establish / Maintain Trust Relationship with Providers - - - - SA-9(3) - -

The organization establishes, documents, and maintains trust relationships with external service providers based on .

-
- -

The degree of confidence that the risk from using external services is at an acceptable level depends on the trust that organizations place in the external providers, individually or in combination. Trust relationships can help organization to gain increased levels of confidence that participating service providers are providing adequate protection for the services rendered. Such relationships can be complicated due to the number of potential entities participating in the consumer-provider interactions, subordinate relationships and levels of trust, and the types of interactions between the parties. In some cases, the degree of trust is based on the amount of direct control organizations are able to exert on external service providers with regard to employment of security controls necessary for the protection of the service/information and the evidence brought forth as to the effectiveness of those controls. The level of control is typically established by the terms and conditions of the contracts or service-level agreements and can range from extensive control (e.g., negotiating contracts or agreements that specify security requirements for the providers) to very limited control (e.g., using contracts or service-level agreements to obtain commodity services such as commercial telecommunications services). In other cases, levels of trust are based on factors that convince organizations that required security controls have been employed and that determinations of control effectiveness exist. For example, separately authorized external information system services provided to organizations through well-established business relationships may provide degrees of trust in such services within the tolerable risk range of the organizations using the services. External service providers may also outsource selected services to other external entities, making the trust relationship more difficult and complicated to manage. Depending on the nature of the services, organizations may find it very difficult to place significant trust in external providers. This is not due to any inherent untrustworthiness on the part of providers, but to the intrinsic level of risk in the services.

-
- -

Determine if the organization:

- - SA-9(3)[1] -

defines requirements, properties, factors, or conditions defining acceptable trust relationships;

-
- - SA-9(3)[2] -

based on organization-defined requirements, properties, factors, or conditions defining acceptable trust relationships:

- - SA-9(3)[2][a] -

establishes trust relationships with external service providers;

-
- - SA-9(3)[2][b] -

documents trust relationships with external service providers; and

-
- - SA-9(3)[2][c] -

maintains trust relationships with external service providers.

-
-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing external information system services

-

acquisition contracts for the information system, system component, or information system service

-

acquisition documentation

-

solicitation documentation

-

service-level agreements

-

organizational security requirements, properties, factors, or conditions defining acceptable trust relationships

-

documentation of trust relationships with external service providers

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

external providers of information system services

-
-
-
- - Consistent Interests of Consumers and Providers - - - - - - - SA-9(4) - -

The organization employs to ensure that the interests of are consistent with and reflect organizational interests.

-
- -

As organizations increasingly use external service providers, the possibility exists that the interests of the service providers may diverge from organizational interests. In such situations, simply having the correct technical, procedural, or operational safeguards in place may not be sufficient if the service providers that implement and control those safeguards are not operating in a manner consistent with the interests of the consuming organizations. Possible actions that organizations might take to address such concerns include, for example, requiring background checks for selected service provider personnel, examining ownership records, employing only trustworthy service providers (i.e., providers with which organizations have had positive experiences), and conducting periodic/unscheduled visits to service provider facilities.

-
- -

Determine if the organization:

- - SA-9(4)[1] -

defines external service providers whose interests are to be consistent with and reflect organizational interests;

-
- - SA-9(4)[2] -

defines security safeguards to be employed to ensure that the interests of organization-defined external service providers are consistent with and reflect organizational interests; and

-
- - SA-9(4)[3] -

employs organization-defined security safeguards to ensure that the interests of organization-defined external service providers are consistent with and reflect organizational interests.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing external information system services

-

acquisition contracts for the information system, system component, or information system service

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

organizational security requirements/safeguards for external service providers

-

personnel security policies for external service providers

-

assessments performed on external service providers

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

external providers of information system services

-
-
- - TEST - -

Organizational processes for defining and employing safeguards to ensure consistent interests with external service providers

-

automated mechanisms supporting and/or implementing safeguards to ensure consistent interests with external service providers

-
-
-
- - Processing, Storage, and Service Location - - - - - - - - - - SA-9(5) - -

The organization restricts the location of to based on .

-
- -

The location of information processing, information/data storage, or information system services that are critical to organizations can have a direct impact on the ability of those organizations to successfully execute their missions/business functions. This situation exists when external providers control the location of processing, storage or services. The criteria external providers use for the selection of processing, storage, or service locations may be different from organizational criteria. For example, organizations may want to ensure that data/information storage locations are restricted to certain locations to facilitate incident response activities (e.g., forensic analyses, after-the-fact investigations) in case of information security breaches/compromises. Such incident response activities may be adversely affected by the governing laws or protocols in the locations where processing and storage occur and/or the locations from which information system services emanate.

-
- -

Determine if the organization:

- - SA-9(5)[1] -

defines locations where organization-defined information processing, information/data, and/or information system services are to be restricted;

-
- - SA-9(5)[2] -

defines requirements or conditions to restrict the location of information processing, information/data, and/or information system services;

-
- - SA-9(5)[3] -

restricts the location of one or more of the following to organization-defined locations based on organization-defined requirements or conditions:

- - SA-9(5)[3][a] -

information processing;

-
- - SA-9(5)[3][b] -

information/data; and/or

-
- - SA-9(5)[3][c] -

information services.

-
-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing external information system services

-

acquisition contracts for the information system, system component, or information system service

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

restricted locations for information processing

-

information/data and/or information system services

-

information processing, information/data, and/or information system services to be maintained in restricted locations

-

organizational security requirements or conditions for external providers

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

external providers of information system services

-
-
- - TEST - -

Organizational processes for defining requirements to restrict locations of information processing, information/data, or information services

-

organizational processes for ensuring the location is restricted in accordance with requirements or conditions

-
-
-
- - NIST Special Publication 800-35 - -
- - Developer Configuration Management - - - - - - - - - - SA-10 - -

The organization requires the developer of the information system, system component, or information system service to:

- - a. -

Perform configuration management during system, component, or service ;

-
- - b. -

Document, manage, and control the integrity of changes to ;

-
- - c. -

Implement only organization-approved changes to the system, component, or service;

-
- - d. -

Document approved changes to the system, component, or service and the potential security impacts of such changes; and

-
- - e. -

Track security flaws and flaw resolution within the system, component, or service and report findings to .

-
-
- -

This control also applies to organizations conducting internal information systems development and integration. Organizations consider the quality and completeness of the configuration management activities conducted by developers as evidence of applying effective security safeguards. Safeguards include, for example, protecting from unauthorized modification or destruction, the master copies of all material used to generate security-relevant portions of the system hardware, software, and firmware. Maintaining the integrity of changes to the information system, information system component, or information system service requires configuration control throughout the system development life cycle to track authorized changes and prevent unauthorized changes. Configuration items that are placed under configuration management (if existence/use is required by other security controls) include: the formal model; the functional, high-level, and low-level design specifications; other design data; implementation documentation; source code and hardware schematics; the running version of the object code; tools for comparing new versions of security-relevant hardware descriptions and software/firmware source code with previous versions; and test fixtures and documentation. Depending on the mission/business needs of organizations and the nature of the contractual relationships in place, developers may provide configuration management support during the operations and maintenance phases of the life cycle.

- CM-3 - CM-4 - CM-9 - SA-12 - SI-2 -
- -

Determine if the organization:

- - SA-10(a) -

requires the developer of the information system, system component, or information system service to perform configuration management during one or more of the following:

- - SA-10(a)[1] -

system, component, or service design;

-
- - SA-10(a)[2] -

system, component, or service development;

-
- - SA-10(a)[3] -

system, component, or service implementation; and/or

-
- - SA-10(a)[4] -

system, component, or service operation;

-
-
- - SA-10(b) - - SA-10(b)[1] -

defines configuration items to be placed under configuration management;

-
- - SA-10(b)[2] -

requires the developer of the information system, system component, or information system service to:

- - SA-10(b)[2][a] -

document the integrity of changes to organization-defined items under configuration management;

-
- - SA-10(b)[2][b] -

manage the integrity of changes to organization-defined items under configuration management;

-
- - SA-10(b)[2][c] -

control the integrity of changes to organization-defined items under configuration management;

-
-
-
- - SA-10(c) -

requires the developer of the information system, system component, or information system service to implement only organization-approved changes to the system, component, or service;

-
- - SA-10(d) -

requires the developer of the information system, system component, or information system service to document:

- - SA-10(d)[1] -

approved changes to the system, component, or service;

-
- - SA-10(d)[2] -

the potential security impacts of such changes;

-
-
- - SA-10(e) - - SA-10(e)[1] -

defines personnel to whom findings, resulting from security flaws and flaw resolution tracked within the system, component, or service, are to be reported;

-
- - SA-10(e)[2] -

requires the developer of the information system, system component, or information system service to:

- - SA-10(e)[2][a] -

track security flaws within the system, component, or service;

-
- - SA-10(e)[2][b] -

track security flaw resolution within the system, component, or service; and

-
- - SA-10(e)[2][c] -

report findings to organization-defined personnel.

-
-
-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing system developer configuration management

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

system developer configuration management plan

-

security flaw and flaw resolution tracking records

-

system change authorization records

-

change control records

-

configuration management records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with configuration management responsibilities

-

system developers

-
-
- - TEST - -

Organizational processes for monitoring developer configuration management

-

automated mechanisms supporting and/or implementing the monitoring of developer configuration management

-
-
- - Software / Firmware Integrity Verification - SA-10(1) - -

The organization requires the developer of the information system, system component, or information system service to enable integrity verification of software and firmware components.

-
- -

This control enhancement allows organizations to detect unauthorized changes to software and firmware components through the use of tools, techniques, and/or mechanisms provided by developers. Integrity checking mechanisms can also address counterfeiting of software and firmware components. Organizations verify the integrity of software and firmware components, for example, through secure one-way hashes provided by developers. Delivered software and firmware components also include any updates to such components.

- SI-7 -
- -

Determine if the organization requires the developer of the information system, system component, or information system service to enable integrity verification of software and firmware components.

-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing system developer configuration management

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system

-

system component, or information system service

-

system developer configuration management plan

-

software and firmware integrity verification records

-

system change authorization records

-

change control records

-

configuration management records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with configuration management responsibilities

-

system developers

-
-
- - TEST - -

Organizational processes for monitoring developer configuration management

-

automated mechanisms supporting and/or implementing the monitoring of developer configuration management

-
-
-
- - Alternative Configuration Management Processes - SA-10(2) - -

The organization provides an alternate configuration management process using organizational personnel in the absence of a dedicated developer configuration management team.

-
- -

Alternate configuration management processes may be required, for example, when organizations use commercial off-the-shelf (COTS) information technology products. Alternate configuration management processes include organizational personnel that: (i) are responsible for reviewing/approving proposed changes to information systems, system components, and information system services; and (ii) conduct security impact analyses prior to the implementation of any changes to systems, components, or services (e.g., a configuration control board that considers security impacts of changes during development and includes representatives of both the organization and the developer, when applicable).

-
- -

Determine if the organization provides an alternative configuration management process with organizational personnel in the absence of a dedicated developer configuration management team.

-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing system developer configuration management

-

procedures addressing configuration management

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system

-

system component, or information system service

-

system developer configuration management plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with configuration management responsibilities

-

system developers

-
-
- - TEST - -

Organizational processes for monitoring developer configuration management

-

automated mechanisms supporting and/or implementing the monitoring of developer configuration management

-
-
-
- - Hardware Integrity Verification - SA-10(3) - -

The organization requires the developer of the information system, system component, or information system service to enable integrity verification of hardware components.

-
- -

This control enhancement allows organizations to detect unauthorized changes to hardware components through the use of tools, techniques, and/or mechanisms provided by developers. Organizations verify the integrity of hardware components, for example, with hard-to-copy labels and verifiable serial numbers provided by developers, and by requiring the implementation of anti-tamper technologies. Delivered hardware components also include updates to such components.

- SI-7 -
- -

Determine if the organization requires the developer of the information system, system component, or information system service to enable integrity verification of hardware components.

-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing system developer configuration management

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

system developer configuration management plan

-

hardware integrity verification records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with configuration management responsibilities

-

system developers

-
-
- - TEST - -

Organizational processes for monitoring developer configuration management

-

automated mechanisms supporting and/or implementing the monitoring of developer configuration management

-
-
-
- - Trusted Generation - SA-10(4) - -

The organization requires the developer of the information system, system component, or information system service to employ tools for comparing newly generated versions of security-relevant hardware descriptions and software/firmware source and object code with previous versions.

-
- -

This control enhancement addresses changes to hardware, software, and firmware components between versions during development. In contrast, SA-10 (1) and SA-10 (3) allow organizations to detect unauthorized changes to hardware, software, and firmware components through the use of tools, techniques, and/or mechanisms provided by developers.

-
- -

Determine if the organization requires the developer of the information system, system component, or information system service to employ tools for comparing newly generated versions of:

- - SA-10(4)[1] -

security-relevant hardware descriptions with previous versions; and

-
- - SA-10(4)[2] -

software/firmware source and object code with previous versions.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing system developer configuration management

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

system developer configuration management plan

-

change control records

-

configuration management records

-

configuration control audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with configuration management responsibilities

-

system developers

-
-
- - TEST - -

Organizational processes for monitoring developer configuration management

-

automated mechanisms supporting and/or implementing the monitoring of developer configuration management

-
-
-
- - Mapping Integrity for Version Control - SA-10(5) - -

The organization requires the developer of the information system, system component, or information system service to maintain the integrity of the mapping between the master build data (hardware drawings and software/firmware code) describing the current version of security-relevant hardware, software, and firmware and the on-site master copy of the data for the current version.

-
- -

This control enhancement addresses changes to hardware, software, and firmware components during initial development and during system life cycle updates. Maintaining the integrity between the master copies of security-relevant hardware, software, and firmware (including designs and source code) and the equivalent data in master copies on-site in operational environments is essential to ensure the availability of organizational information systems supporting critical missions and/or business functions.

-
- -

Determine if the organization requires the developer of the information system, system component, or information system service to maintain the integrity of the mapping between the master build data (hardware drawings and software/firmware code) describing the current version of security-relevant hardware, software, and firmware and the on-site master copy of the data for the current version.

-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing system developer configuration management

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

system developer configuration management plan

-

change control records

-

configuration management records

-

version control change/update records

-

integrity verification records between master copies of security-relevant hardware, software, and firmware (including designs and source code)

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with configuration management responsibilities

-

system developers

-
-
- - TEST - -

Organizational processes for monitoring developer configuration management

-

automated mechanisms supporting and/or implementing the monitoring of developer configuration management

-
-
-
- - Trusted Distribution - SA-10(6) - -

The organization requires the developer of the information system, system component, or information system service to execute procedures for ensuring that security-relevant hardware, software, and firmware updates distributed to the organization are exactly as specified by the master copies.

-
- -

The trusted distribution of security-relevant hardware, software, and firmware updates helps to ensure that such updates are faithful representations of the master copies maintained by the developer and have not been tampered with during distribution.

-
- -

Determine if the organization requires the developer of the information system, system component, or information system service to execute procedures for ensuring that security-relevant hardware, software, and firmware updates distributed to the organization are exactly as specified by the master copies.

-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing system developer configuration management

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system

-

system component, or information system service

-

system developer configuration management plan

-

change control records

-

configuration management records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with configuration management responsibilities

-

system developers

-
-
- - TEST - -

Organizational processes for monitoring developer configuration management

-

automated mechanisms supporting and/or implementing the monitoring of developer configuration management

-
-
-
- - NIST Special Publication 800-128 - -
- - Developer Security Testing and Evaluation - - - - - - - SA-11 - -

The organization requires the developer of the information system, system component, or information system service to:

- - a. -

Create and implement a security assessment plan;

-
- - b. -

Perform testing/evaluation at ;

-
- - c. -

Produce evidence of the execution of the security assessment plan and the results of the security testing/evaluation;

-
- - d. -

Implement a verifiable flaw remediation process; and

-
- - e. -

Correct flaws identified during security testing/evaluation.

-
-
- -

Developmental security testing/evaluation occurs at all post-design phases of the system development life cycle. Such testing/evaluation confirms that the required security controls are implemented correctly, operating as intended, enforcing the desired security policy, and meeting established security requirements. Security properties of information systems may be affected by the interconnection of system components or changes to those components. These interconnections or changes (e.g., upgrading or replacing applications and operating systems) may adversely affect previously implemented security controls. This control provides additional types of security testing/evaluation that developers can conduct to reduce or eliminate potential flaws. Testing custom software applications may require approaches such as static analysis, dynamic analysis, binary analysis, or a hybrid of the three approaches. Developers can employ these analysis approaches in a variety of tools (e.g., web-based application scanners, static analysis tools, binary analyzers) and in source code reviews. Security assessment plans provide the specific activities that developers plan to carry out including the types of analyses, testing, evaluation, and reviews of software and firmware components, the degree of rigor to be applied, and the types of artifacts produced during those processes. The depth of security testing/evaluation refers to the rigor and level of detail associated with the assessment process (e.g., black box, gray box, or white box testing). The coverage of security testing/evaluation refers to the scope (i.e., number and type) of the artifacts included in the assessment process. Contracts specify the acceptance criteria for security assessment plans, flaw remediation processes, and the evidence that the plans/processes have been diligently applied. Methods for reviewing and protecting assessment plans, evidence, and documentation are commensurate with the security category or classification level of the information system. Contracts may specify documentation protection requirements.

- CA-2 - CM-4 - SA-3 - SA-4 - SA-5 - SI-2 -
- -

Determine if the organization:

- - SA-11(a) -

requires the developer of the information system, system component, or information system service to create and implement a security plan;

-
- - SA-11(b) - - SA-11(b)[1] -

defines the depth of testing/evaluation to be performed by the developer of the information system, system component, or information system service;

-
- - SA-11(b)[2] -

defines the coverage of testing/evaluation to be performed by the developer of the information system, system component, or information system service;

-
- - SA-11(b)[3] -

requires the developer of the information system, system component, or information system service to perform one or more of the following testing/evaluation at the organization-defined depth and coverage:

- - SA-11(b)[3][a] -

unit testing/evaluation;

-
- - SA-11(b)[3][b] -

integration testing/evaluation;

-
- - SA-11(b)[3][c] -

system testing/evaluation; and/or

-
- - SA-11(b)[3][d] -

regression testing/evaluation;

-
-
-
- - SA-11(c) -

requires the developer of the information system, system component, or information system service to produce evidence of:

- - SA-11(c)[1] -

the execution of the security assessment plan;

-
- - SA-11(c)[2] -

the results of the security testing/evaluation;

-
-
- - SA-11(d) -

requires the developer of the information system, system component, or information system service to implement a verifiable flaw remediation process; and

-
- - SA-11(e) -

requires the developer of the information system, system component, or information system service to correct flaws identified during security testing/evaluation.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing system developer security testing

-

procedures addressing flaw remediation

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

system developer security test plans

-

records of developer security testing results for the information system, system component, or information system service

-

security flaw and remediation tracking records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with developer security testing responsibilities

-

system developers

-
-
- - TEST - -

Organizational processes for monitoring developer security testing and evaluation

-

automated mechanisms supporting and/or implementing the monitoring of developer security testing and evaluation

-
-
- - Static Code Analysis - SA-11(1) - -

The organization requires the developer of the information system, system component, or information system service to employ static code analysis tools to identify common flaws and document the results of the analysis.

-
- -

Static code analysis provides a technology and methodology for security reviews. Such analysis can be used to identify security vulnerabilities and enforce security coding practices. Static code analysis is most effective when used early in the development process, when each code change can be automatically scanned for potential weaknesses. Static analysis can provide clear remediation guidance along with defects to enable developers to fix such defects. Evidence of correct implementation of static analysis can include, for example, aggregate defect density for critical defect types, evidence that defects were inspected by developers or security professionals, and evidence that defects were fixed. An excessively high density of ignored findings (commonly referred to as ignored or false positives) indicates a potential problem with the analysis process or tool. In such cases, organizations weigh the validity of the evidence against evidence from other sources.

-
- -

Determine if the organization requires the developer of the information system, system component, or information system service to employ static code analysis tools to identify common flaws and document the results of the analysis.

-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing system developer security testing

-

procedures addressing flaw remediation

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

system developer security test plans

-

system developer security testing results

-

security flaw and remediation tracking records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with developer security testing responsibilities

-

organizational personnel with configuration management responsibilities

-

system developers

-
-
- - TEST - -

Organizational processes for monitoring developer security testing and evaluation

-

automated mechanisms supporting and/or implementing the monitoring of developer security testing and evaluation

-

static code analysis tools

-
-
-
- - Threat and Vulnerability Analyses - SA-11(2) - -

The organization requires the developer of the information system, system component, or information system service to perform threat and vulnerability analyses and subsequent testing/evaluation of the as-built system, component, or service.

-
- -

Applications may deviate significantly from the functional and design specifications created during the requirements and design phases of the system development life cycle. Therefore, threat and vulnerability analyses of information systems, system components, and information system services prior to delivery are critical to the effective operation of those systems, components, and services. Threat and vulnerability analyses at this phase of the life cycle help to ensure that design or implementation changes have been accounted for, and that any new vulnerabilities created as a result of those changes have been reviewed and mitigated.

- PM-15 - RA-5 -
- -

Determine if the organization requires the developer of the information system, system component, or information system service to perform:

- - SA-11(2)[1] -

threat analyses of the as-built, system component, or service;

-
- - SA-11(2)[2] -

vulnerability analyses of the as-built, system component, or service; and

-
- - SA-11(2)[3] -

subsequent testing/evaluation of the as-built, system component, or service.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing system developer security testing

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

system developer security test plans

-

records of developer security testing results for the information system, system component, or information system service

-

vulnerability scanning results

-

information system risk assessment reports

-

threat and vulnerability analysis reports

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with developer security testing responsibilities

-

system developers

-
-
- - TEST - -

Organizational processes for monitoring developer security testing and evaluation

-

automated mechanisms supporting and/or implementing the monitoring of developer security testing and evaluation

-
-
-
- - Independent Verification of Assessment Plans / Evidence - - - - SA-11(3) - -

The organization:

- - (a) -

Requires an independent agent satisfying to verify the correct implementation of the developer security assessment plan and the evidence produced during security testing/evaluation; and

-
- - (b) -

Ensures that the independent agent is either provided with sufficient information to complete the verification process or granted the authority to obtain such information.

-
-
- -

Independent agents have the necessary qualifications (i.e., expertise, skills, training, and experience) to verify the correct implementation of developer security assessment plans.

- AT-3 - CA-7 - RA-5 - SA-12 -
- -

Determine if the organization:

- - SA-11(3)(a) - - SA-11(3)(a)[1] -

defines independence criteria that an independent agent is required to satisfy;

-
- - SA-11(3)(a)[2] -

requires an independent agent satisfying organization-defined independence criteria to verify:

- - SA-11(3)(a)[2][a] -

the correct implementation of the developer security assessment plan;

-
- - SA-11(3)(a)[2][b] -

the evidence produced during security testing/evaluation;

-
-
- SA-11(3)(a) -
- - SA-11(3)(b) -

ensures that the independent agent is either:

- - SA-11(3)(b)[1] -

provided with sufficient information to complete the verification process; or

-
- - SA-11(3)(b)[2] -

granted the authority to obtain such information.

-
- SA-11(3)(b) -
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing system developer security testing

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

independent verification and validation reports

-

security test and evaluation plans

-

security test and evaluation results for the information system, system component, or information system service

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with developer security testing responsibilities

-

system developers

-

independent verification agent

-
-
- - TEST - -

Organizational processes for monitoring developer security testing and evaluation

-

automated mechanisms supporting and/or implementing the monitoring of developer security testing and evaluation

-
-
-
- - Manual Code Reviews - - - - - - - SA-11(4) - -

The organization requires the developer of the information system, system component, or information system service to perform a manual code review of using .

-
- -

Manual code reviews are usually reserved for the critical software and firmware components of information systems. Such code reviews are uniquely effective at identifying weaknesses that require knowledge of the application’s requirements or context which are generally unavailable to more automated analytic tools and techniques such as static or dynamic analysis. Components benefiting from manual review include for example, verifying access control matrices against application controls and reviewing more detailed aspects of cryptographic implementations and controls.

-
- -

Determine if the organization:

- - SA-11(4)[1] -

defines specific code for which the developer of the information system, system component, or information system service is required to perform a manual code review;

-
- - SA-11(4)[2] -

defines processes, procedures, and/or techniques to be used when the developer performs a manual code review of organization-defined specific code; and

-
- - SA-11(4)[3] -

requires the developer of the information system, system component, or information system service to perform a manual code review of organization-defined specific code using organization-defined processes, procedures, and/or techniques.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing system developer security testing

-

processes, procedures, and/or techniques for performing manual code reviews

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

system developer security testing and evaluation plans

-

system developer security testing and evaluation results

-

list of code requiring manual reviews

-

records of manual code reviews

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with developer security testing responsibilities

-

system developers

-

independent verification agent

-
-
- - TEST - -

Organizational processes for monitoring developer security testing and evaluation

-

automated mechanisms supporting and/or implementing the monitoring of developer security testing and evaluation

-
-
-
- - Penetration Testing - - - - - - - SA-11(5) - -

The organization requires the developer of the information system, system component, or information system service to perform penetration testing at and with .

-
- -

Penetration testing is an assessment methodology in which assessors, using all available information technology product and/or information system documentation (e.g., product/system design specifications, source code, and administrator/operator manuals) and working under specific constraints, attempt to circumvent implemented security features of information technology products and information systems. Penetration testing can include, for example, white, gray, or black box testing with analyses performed by skilled security professionals simulating adversary actions. The objective of penetration testing is to uncover potential vulnerabilities in information technology products and information systems resulting from implementation errors, configuration faults, or other operational deployment weaknesses or deficiencies. Penetration tests can be performed in conjunction with automated and manual code reviews to provide greater levels of analysis than would ordinarily be possible.

-
- -

Determine if the organization:

- - SA-11(5)[1] -

defines for the developer of the information system, system component, or information system service:

- - SA-11(5)[1][a] -

the breadth of penetration testing to be performed by the developer;

-
- - SA-11(5)[1][b] -

the depth of penetration testing to be performed by the developer;

-
-
- - SA-11(5)[2] -

defines constraints under which the developer is to perform penetration testing; and

-
- - SA-11(5)[3] -

requires the developer of the information system, system component, or information system service to perform penetration testing at organization-defined breadth/depth and with organization-defined constraints.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing system developer security testing

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

system developer penetration testing and evaluation plans

-

system developer penetration testing and evaluation results

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with developer security testing responsibilities

-

system developers

-

independent verification agent

-
-
- - TEST - -

Organizational processes for monitoring developer security testing and evaluation

-

automated mechanisms supporting and/or implementing the monitoring of developer security testing and evaluation

-
-
-
- - Attack Surface Reviews - SA-11(6) - -

The organization requires the developer of the information system, system component, or information system service to perform attack surface reviews.

-
- -

Attack surfaces of information systems are exposed areas that make those systems more vulnerable to cyber attacks. This includes any accessible areas where weaknesses or deficiencies in information systems (including the hardware, software, and firmware components) provide opportunities for adversaries to exploit vulnerabilities. Attack surface reviews ensure that developers: (i) analyze both design and implementation changes to information systems; and (ii) mitigate attack vectors generated as a result of the changes. Correction of identified flaws includes, for example, deprecation of unsafe functions.

-
- -

Determine if the organization requires the developer of the information system, system component, or information system service to perform attack surface reviews.

-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing system developer security testing

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

system developer security testing and evaluation plans

-

system developer security testing and evaluation results

-

records of attack surface reviews

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with developer security testing responsibilities

-

organizational personnel with configuration management responsibilities

-

system developers

-
-
- - TEST - -

Organizational processes for monitoring developer security testing and evaluation

-

automated mechanisms supporting and/or implementing the monitoring of developer security testing and evaluation

-
-
-
- - Verify Scope of Testing / Evaluation - - - - SA-11(7) - -

The organization requires the developer of the information system, system component, or information system service to verify that the scope of security testing/evaluation provides complete coverage of required security controls at .

-
- -

Verifying that security testing/evaluation provides complete coverage of required security controls can be accomplished by a variety of analytic techniques ranging from informal to formal. Each of these techniques provides an increasing level of assurance corresponding to the degree of formality of the analysis. Rigorously demonstrating security control coverage at the highest levels of assurance can be provided by the use of formal modeling and analysis techniques including correlation between control implementation and corresponding test cases.

-
- -

Determine if the organization:

- - SA-11(7)[1] -

defines the depth of testing/evaluation to ensure the scope of security/testing evaluation provides complete coverage of required security controls; and

-
- - SA-11(7)[2] -

requires the developer of the information system, system component, or information system service to verify that the scope of security testing/evaluation provides complete coverage of required security controls at the organization-defined depth of testing/evaluation.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing system developer security testing

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

system developer security testing and evaluation plans

-

system developer security testing and evaluation results

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with developer security testing responsibilities

-

system developers

-

independent verification agent

-
-
- - TEST - -

Organizational processes for monitoring developer security testing and evaluation

-

automated mechanisms supporting and/or implementing the monitoring of developer security testing and evaluation

-
-
-
- - Dynamic Code Analysis - SA-11(8) - -

The organization requires the developer of the information system, system component, or information system service to employ dynamic code analysis tools to identify common flaws and document the results of the analysis.

-
- -

Dynamic code analysis provides run-time verification of software programs, using tools capable of monitoring programs for memory corruption, user privilege issues, and other potential security problems. Dynamic code analysis employs run-time tools to help to ensure that security functionality performs in the manner in which it was designed. A specialized type of dynamic analysis, known as fuzz testing, induces program failures by deliberately introducing malformed or random data into software programs. Fuzz testing strategies derive from the intended use of applications and the functional and design specifications for the applications. To understand the scope of dynamic code analysis and hence the assurance provided, organizations may also consider conducting code coverage analysis (checking the degree to which the code has been tested using metrics such as percent of subroutines tested or percent of program statements called during execution of the test suite) and/or concordance analysis (checking for words that are out of place in software code such as non-English language words or derogatory terms).

-
- -

Determine if the organization requires the developer of the information system, system component, or information system service to employ dynamic code analysis tools to identify common flaws and document the results of the analysis.

-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing system developer security testing

-

procedures addressing flaw remediation

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

system developer security test and evaluation plans

-

security test and evaluation results

-

security flaw and remediation tracking reports

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with developer security testing responsibilities

-

organizational personnel with configuration management responsibilities

-

system developers

-
-
- - TEST - -

Organizational processes for monitoring developer security testing and evaluation

-

automated mechanisms supporting and/or implementing the monitoring of developer security testing and evaluation

-
-
-
- - ISO/IEC 15408 - - NIST Special Publication 800-53A - - http://nvd.nist.gov - - http://cwe.mitre.org - - http://cve.mitre.org - - http://capec.mitre.org - -
- - Supply Chain Protection - - - - SA-12 - -

The organization protects against supply chain threats to the information system, system component, or information system service by employing as part of a comprehensive, defense-in-breadth information security strategy.

-
- -

Information systems (including system components that compose those systems) need to be protected throughout the system development life cycle (i.e., during design, development, manufacturing, packaging, assembly, distribution, system integration, operations, maintenance, and retirement). Protection of organizational information systems is accomplished through threat awareness, by the identification, management, and reduction of vulnerabilities at each phase of the life cycle and the use of complementary, mutually reinforcing strategies to respond to risk. Organizations consider implementing a standardized process to address supply chain risk with respect to information systems and system components, and to educate the acquisition workforce on threats, risk, and required security controls. Organizations use the acquisition/procurement processes to require supply chain entities to implement necessary security safeguards to: (i) reduce the likelihood of unauthorized modifications at each stage in the supply chain; and (ii) protect information systems and information system components, prior to taking delivery of such systems/components. This control also applies to information system services. Security safeguards include, for example: (i) security controls for development systems, development facilities, and external connections to development systems; (ii) vetting development personnel; and (iii) use of tamper-evident packaging during shipping/warehousing. Methods for reviewing and protecting development plans, evidence, and documentation are commensurate with the security category or classification level of the information system. Contracts may specify documentation protection requirements.

- AT-3 - CM-8 - IR-4 - PE-16 - PL-8 - SA-3 - SA-4 - SA-8 - SA-10 - SA-14 - SA-15 - SA-18 - SA-19 - SC-29 - SC-30 - SC-38 - SI-7 -
- -

Determine if the organization:

- - SA-12[1] -

defines security safeguards to be employed to protect against supply chain threats to the information system, system component, or information system service; and

-
- - SA-12[2] -

protects against supply chain threats to the information system, system component, or information system service by employing organization-defined security safeguards as part of a comprehensive, defense-in-breadth information security strategy.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing supply chain protection

-

procedures addressing the integration of information security requirements into the acquisition process

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

list of supply chain threats

-

list of security safeguards to be taken against supply chain threats

-

system development life cycle documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with supply chain protection responsibilities

-
-
- - TEST - -

Organizational processes for defining safeguards for and protecting against supply chain threats

-

automated mechanisms supporting and/or implementing safeguards for supply chain threats

-
-
- - Acquisition Strategies / Tools / Methods - - - - SA-12(1) - -

The organization employs for the purchase of the information system, system component, or information system service from suppliers.

-
- -

The use of acquisition and procurement processes by organizations early in the system development life cycle provides an important vehicle to protect the supply chain. Organizations use available all-source intelligence analysis to inform the tailoring of acquisition strategies, tools, and methods. There are a number of different tools and techniques available (e.g., obscuring the end use of an information system or system component, using blind or filtered buys). Organizations also consider creating incentives for suppliers who: (i) implement required security safeguards; (ii) promote transparency into their organizational processes and security practices; (iii) provide additional vetting of the processes and security practices of subordinate suppliers, critical information system components, and services; (iv) restrict purchases from specific suppliers or countries; and (v) provide contract language regarding the prohibition of tainted or counterfeit components. In addition, organizations consider minimizing the time between purchase decisions and required delivery to limit opportunities for adversaries to corrupt information system components or products. Finally, organizations can use trusted/controlled distribution, delivery, and warehousing options to reduce supply chain risk (e.g., requiring tamper-evident packaging of information system components during shipping and warehousing).

- SA-19 -
- -

Determine if the organization:

- - SA-12(1)[1] -

defines the following to be employed for the purchase of the information system, system component, or information system service from suppliers:

- - SA-12(1)[1][a] -

tailored acquisition strategies;

-
- - SA-12(1)[1][b] -

contract tools;

-
- - SA-12(1)[1][c] -

procurement methods; and

-
-
- - SA-12(1)[2] -

employs organization-defined tailored acquisition strategies, contract tools, and procurement methods for the purchase of the information system, system component, or information system service from suppliers.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing supply chain protection

-

procedures addressing the integration of information security requirements into the acquisition process

-

procedures addressing the integration of acquisition strategies, contract tools, and procure methods into the acquisition process

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for information systems or services

-

purchase orders/requisitions for the information system

-

system component

-

or information system service from suppliers

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with supply chain protection responsibilities

-
-
- - TEST - -

Organizational processes for defining and employing tailored acquisition strategies, contract tools, and procurement methods

-

automated mechanisms supporting and/or implementing the definition and employment of tailored acquisition strategies, contract tools, and procurement methods

-
-
-
- - Supplier Reviews - SA-12(2) - -

The organization conducts a supplier review prior to entering into a contractual agreement to acquire the information system, system component, or information system service.

-
- -

Supplier reviews include, for example: (i) analysis of supplier processes used to design, develop, test, implement, verify, deliver, and support information systems, system components, and information system services; and (ii) assessment of supplier training and experience in developing systems, components, or services with the required security capability. These reviews provide organizations with increased levels of visibility into supplier activities during the system development life cycle to promote more effective supply chain risk management. Supplier reviews can also help to determine whether primary suppliers have security safeguards in place and a practice for vetting subordinate suppliers, for example, second- and third-tier suppliers, and any subcontractors.

-
- -

Determine if the organization conducts a supplier review prior to entering into a contractual agreement to acquire the information system, system component, or information system service.

-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing supply chain protection

-

procedures addressing the integration of information security requirements into the acquisition process

-

records of supplier due diligence reviews

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with supply chain protection responsibilities

-
-
- - TEST - -

Organizational processes for conducting supplier reviews

-

automated mechanisms supporting and/or implementing supplier reviews

-
-
-
- - Trusted Shipping and Warehousing - SA-12(3) - Withdrawn - SA-12 (1) - - - Diversity of Suppliers - SA-12(4) - Withdrawn - SA-12 (13) - - - Limitation of Harm - - - - SA-12(5) - -

The organization employs to limit harm from potential adversaries identifying and targeting the organizational supply chain.

-
- -

Supply chain risk is part of the advanced persistent threat (APT). Security safeguards and countermeasures to reduce the probability of adversaries successfully identifying and targeting the supply chain include, for example: (i) avoiding the purchase of custom configurations to reduce the risk of acquiring information systems, components, or products that have been corrupted via supply chain actions targeted at specific organizations; (ii) employing a diverse set of suppliers to limit the potential harm from any given supplier in the supply chain; (iii) employing approved vendor lists with standing reputations in industry, and (iv) using procurement carve outs (i.e., exclusions to commitments or obligations).

-
- -

Determine if the organization:

- - SA-12(5)[1] -

defines security safeguards to be employed to limit harm from potential adversaries identifying and targeting the organizational supply chain; and

-
- - SA-12(5)[2] -

employs organization-defined security safeguards to limit harm from potential adversaries identifying and targeting the organizational supply chain.

-
-
- - EXAMINE - -

System and services acquisition policy

-

configuration management policy

-

procedures addressing supply chain protection

-

procedures addressing the integration of information security requirements into the acquisition process

-

procedures addressing the baseline configuration of the information system

-

configuration management plan

-

information system design documentation

-

information system architecture and associated configuration documentation

-

solicitation documentation

-

acquisition documentation

-

acquisition contracts for the information system, system component, or information system service

-

list of security safeguards to be taken to protect organizational supply chain against potential supply chain threats

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with supply chain protection responsibilities

-
-
- - TEST - -

Organizational processes for defining and employing safeguards to limit harm from adversaries of the organizational supply chain

-

automated mechanisms supporting and/or implementing the definition and employment of safeguards to protect the organizational supply chain

-
-
-
- - Minimizing Procurement Time - SA-12(6) - Withdrawn - SA-12 (1) - - - Assessments Prior to Selection / Acceptance / Update - SA-12(7) - -

The organization conducts an assessment of the information system, system component, or information system service prior to selection, acceptance, or update.

-
- -

Assessments include, for example, testing, evaluations, reviews, and analyses. Independent, third-party entities or organizational personnel conduct assessments of systems, components, products, tools, and services. Organizations conduct assessments to uncover unintentional vulnerabilities and intentional vulnerabilities including, for example, malicious code, malicious processes, defective software, and counterfeits. Assessments can include, for example, static analyses, dynamic analyses, simulations, white, gray, and black box testing, fuzz testing, penetration testing, and ensuring that components or services are genuine (e.g., using tags, cryptographic hash verifications, or digital signatures). Evidence generated during security assessments is documented for follow-on actions carried out by organizations.

- CA-2 - SA-11 -
- -

Determine if the organization conducts an assessment of the information system, system component, or information system service prior to:

- - SA-12(7)[1] -

selection;

-
- - SA-12(7)[2] -

acceptance; or

-
- - SA-12(7)[3] -

update.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing supply chain protection

-

procedures addressing the integration of information security requirements into the acquisition process

-

security test and evaluation results

-

vulnerability assessment results

-

penetration testing results

-

organizational risk assessment results

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with supply chain protection responsibilities

-
-
- - TEST - -

Organizational processes for conducting assessments prior to selection, acceptance, or update

-

automated mechanisms supporting and/or implementing the conducting of assessments prior to selection, acceptance, or update

-
-
-
- - Use of All-source Intelligence - SA-12(8) - -

The organization uses all-source intelligence analysis of suppliers and potential suppliers of the information system, system component, or information system service.

-
- -

All-source intelligence analysis is employed by organizations to inform engineering, acquisition, and risk management decisions. All-source intelligence consists of intelligence products and/or organizations and activities that incorporate all sources of information, most frequently including human intelligence, imagery intelligence, measurement and signature intelligence, signals intelligence, and open source data in the production of finished intelligence. Where available, such information is used to analyze the risk of both intentional and unintentional vulnerabilities from development, manufacturing, and delivery processes, people, and the environment. This review is performed on suppliers at multiple tiers in the supply chain sufficient to manage risks.

- SA-15 -
- -

Determine if the organization uses all-source intelligence analysis of:

- - SA-12(8)[1] -

suppliers of the information system, system component, or information system service; and

-
- - SA-12(8)[2] -

potential suppliers of the information system, system component, or information system service.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing supply chain protection

-

solicitation documentation

-

acquisition documentation

-

acquisition contracts for the information system, system component, or information system service

-

records of all-source intelligence analyses

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with supply chain protection responsibilities

-
-
- - TEST - -

Organizational processes for use of an all-source analysis of suppliers and potential suppliers

-

automated mechanisms supporting and/or implementing the use of all-source analysis of suppliers and potential suppliers

-
-
-
- - Operations Security - - - - SA-12(9) - -

The organization employs in accordance with classification guides to protect supply chain-related information for the information system, system component, or information system service.

-
- -

Supply chain information includes, for example: user identities; uses for information systems, information system components, and information system services; supplier identities; supplier processes; security requirements; design specifications; testing and evaluation results; and system/component configurations. This control enhancement expands the scope of OPSEC to include suppliers and potential suppliers. OPSEC is a process of identifying critical information and subsequently analyzing friendly actions attendant to operations and other activities to: (i) identify those actions that can be observed by potential adversaries; (ii) determine indicators that adversaries might obtain that could be interpreted or pieced together to derive critical information in sufficient time to cause harm to organizations; (iii) implement safeguards or countermeasures to eliminate or reduce to an acceptable level, exploitable vulnerabilities; and (iv) consider how aggregated information may compromise the confidentiality of users or uses of the supply chain. OPSEC may require organizations to withhold critical mission/business information from suppliers and may include the use of intermediaries to hide the end use, or users, of information systems, system components, or information system services.

-
- -

Determine if the organization:

- - SA-12(9)[1] -

defines Operations Security (OPSEC) safeguards to be employed in accordance with classification guides to protect supply chain-related information for the information system, system component, or information system service; and

-
- - SA-12(9)[2] -

employs organization-defined OPSEC safeguards in accordance with classification guides to protect supply chain-related information for the information system, system component, or information system service.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing supply chain protection

-

solicitation documentation

-

acquisition documentation

-

acquisition contracts for the information system, system component, or information system service

-

records of all-source intelligence analyses

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with supply chain protection responsibilities

-
-
- - TEST - -

Organizational processes for defining and employing OPSEC safeguards

-

automated mechanisms supporting and/or implementing the definition and employment of OPSEC safeguards

-
-
-
- - Validate as Genuine and Not Altered - - - - SA-12(10) - -

The organization employs to validate that the information system or system component received is genuine and has not been altered.

-
- -

For some information system components, especially hardware, there are technical means to help determine if the components are genuine or have been altered. Security safeguards used to validate the authenticity of information systems and information system components include, for example, optical/nanotechnology tagging and side-channel analysis. For hardware, detailed bill of material information can highlight the elements with embedded logic complete with component and production location.

-
- -

Determine if the organization:

- - SA-12(10)[1] -

defines security safeguards to be employed to validate that the information system or system component received is genuine and has not been altered; and

-
- - SA-12(10)[2] -

employs organization-defined security safeguards to validate that the information system or system components received is genuine and has not been altered.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing supply chain protection

-

procedures address the integration of information security requirements into the acquisition process

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

evidentiary documentation (including applicable configurations) indicating the information system, system component, or information system service are genuine and have not been altered

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with supply chain protection responsibilities

-
-
- - TEST - -

Organizational processes for defining and employing validation safeguards

-

automated mechanisms supporting and/or implementing the definition and employment of validation safeguards

-
-
-
- - Penetration Testing / Analysis of Elements, Processes, and Actors - - - - - - - SA-12(11) - -

The organization employs of associated with the information system, system component, or information system service.

-
- -

This control enhancement addresses analysis and/or testing of the supply chain, not just delivered items. Supply chain elements are information technology products or product components that contain programmable logic and that are critically important to information system functions. Supply chain processes include, for example: (i) hardware, software, and firmware development processes; (ii) shipping/handling procedures; (iii) personnel and physical security programs; (iv) configuration management tools/measures to maintain provenance; or (v) any other programs, processes, or procedures associated with the production/distribution of supply chain elements. Supply chain actors are individuals with specific roles and responsibilities in the supply chain. The evidence generated during analyses and testing of supply chain elements, processes, and actors is documented and used to inform organizational risk management activities and decisions.

- RA-5 -
- -

Determine if the organization:

- - SA-12(11)[1] -

defines supply chain:

- - SA-12(11)[1][a] -

elements to be analyzed and/or tested;

-
- - SA-12(11)[1][b] -

processes to be analyzed and/or tested;

-
- - SA-12(11)[1][c] -

actors to be analyzed and/or tested;

-
-
- - SA-12(11)[2] -

employs one or more of the following to analyze and/or test organization-defined supply chain elements, processes, and actors associated with the information system, system component, or information system service:

- - SA-12(11)[2][a] -

organizational analysis;

-
- - SA-12(11)[2][b] -

independent third party analysis;

-
- - SA-12(11)[2][c] -

organizational penetration testing; and/or

-
- - SA-12(11)[2][d] -

independent third-party penetration testing.

-
-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing supply chain protection

-

evidence of organizational analysis, independent third-party analysis, organizational penetration testing, and/or independent third-party penetration testing

-

list of supply chain elements, processes, and actors (associated with the information system, system component, or information system service) subject to analysis and/or testing

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with supply chain protection responsibilities

-

organizational personnel with responsibilities for analyzing and/or testing supply chain elements, processes, and actors

-
-
- - TEST - -

Organizational processes for defining and employing methods of analysis/testing of supply chain elements, processes, and actors

-

automated mechanisms supporting and/or implementing the analysis/testing of supply chain elements, processes, and actors

-
-
-
- - Inter-organizational Agreements - SA-12(12) - -

The organization establishes inter-organizational agreements and procedures with entities involved in the supply chain for the information system, system component, or information system service.

-
- -

The establishment of inter-organizational agreements and procedures provides for notification of supply chain compromises. Early notification of supply chain compromises that can potentially adversely affect or have adversely affected organizational information systems, including critical system components, is essential for organizations to provide appropriate responses to such incidents.

-
- -

Determine if the organization establishes, with entities involved in the supply chain for the information system, system component, or information system service,:

- - SA-12(12)[1] -

inter-organizational agreements; and

-
- - SA-12(12)[2] -

inter-organizational procedures.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing supply chain protection

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

inter-organizational agreements and procedures

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with supply chain protection responsibilities

-
-
- - TEST - -

Organizational processes for establishing inter-organizational agreements and procedures with supply chain entities

-
-
-
- - Critical Information System Components - - - - - - - SA-12(13) - -

The organization employs to ensure an adequate supply of .

-
- -

Adversaries can attempt to impede organizational operations by disrupting the supply of critical information system components or corrupting supplier operations. Safeguards to ensure adequate supplies of critical information system components include, for example: (i) the use of multiple suppliers throughout the supply chain for the identified critical components; and (ii) stockpiling of spare components to ensure operation during mission-critical times.

-
- -

Determine if the organization:

- - SA-12(13)[1] -

defines critical information system components for which security safeguards are to be employed to ensure an adequate supply of such components;

-
- - SA-12(13)[2] -

defines security safeguards to be employed to ensure an adequate supply of organization-defined critical information components; and

-
- - SA-12(13)[3] -

employs organization-defined security safeguards to ensure an adequate supply of organization-defined critical information system components.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing supply chain protection

-

physical inventory of critical information system components

-

inventory records of critical information system components

-

list of security safeguards ensuring adequate supply of critical information system components

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with supply chain protection responsibilities

-
-
- - TEST - -

Organizational processes for defining and employing security safeguards to ensure an adequate supply of critical information system components

-

automated mechanisms supporting and/or implementing the security safeguards that ensure an adequate supply of critical information system components

-
-
-
- - Identity and Traceability - - - - SA-12(14) - -

The organization establishes and retains unique identification of for the information system, system component, or information system service.

-
- -

Knowing who and what is in the supply chains of organizations is critical to gaining visibility into what is happening within such supply chains, as well as monitoring and identifying high-risk events and activities. Without reasonable visibility and traceability into supply chains (i.e., elements, processes, and actors), it is very difficult for organizations to understand and therefore manage risk, and to reduce the likelihood of adverse events. Uniquely identifying acquirer and integrator roles, organizations, personnel, mission and element processes, testing and evaluation procedures, delivery mechanisms, support mechanisms, communications/delivery paths, and disposal/final disposition activities as well as the components and tools used, establishes a foundational identity structure for assessment of supply chain activities. For example, labeling (using serial numbers) and tagging (using radio-frequency identification [RFID] tags) individual supply chain elements including software packages, modules, and hardware devices, and processes associated with those elements can be used for this purpose. Identification methods are sufficient to support the provenance in the event of a supply chain issue or adverse supply chain event.

-
- -

Determine if the organization:

- - SA-12(14)[1] -

defines the following for the establishment and retention of unique identification:

- - SA-12(14)[1][a] -

supply chain elements;

-
- - SA-12(14)[1][b] -

supply chain processes;

-
- - SA-12(14)[1][c] -

supply chain actors; and

-
-
- - SA-12(14)[2] -

establishes and retains unique identification of organization-defined supply chain elements, processes, and actors for the information system, system component, or information system service.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing supply chain protection

-

procedures addressing the integration of information security requirements into the acquisition process

-

list of supply chain elements, processes, and actors (associated with the information system, system component, or information system service) requiring implementation of unique identification processes, procedures, tools, mechanisms, equipment, techniques and/or configurations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with supply chain protection responsibilities

-

organizational personnel with responsibilities for establishing and retaining unique identification of supply chain elements, processes, and actors

-
-
- - TEST - -

Organizational processes for defining, establishing, and retaining unique identification for supply chain elements, processes, and actors

-

automated mechanisms supporting and/or implementing the definition, establishment, and retention of unique identification for supply chain elements, processes, and actors

-
-
-
- - Processes to Address Weaknesses or Deficiencies - SA-12(15) - -

The organization establishes a process to address weaknesses or deficiencies in supply chain elements identified during independent or organizational assessments of such elements.

-
- -

Evidence generated during independent or organizational assessments of supply chain elements (e.g., penetration testing, audits, verification/validation activities) is documented and used in follow-on processes implemented by organizations to respond to the risks related to the identified weaknesses and deficiencies. Supply chain elements include, for example, supplier development processes and supplier distribution systems.

-
- -

Determine if the organization establishes a process to address weaknesses or deficiencies in supply chain elements identified during independent or organizational assessments of such elements.

-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing supply chain protection

-

procedures addressing weaknesses or deficiencies in supply chain elements

-

results of independent or organizational assessments of supply chain controls and processes

-

acquisition contracts, service-level agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with supply chain protection responsibilities

-
-
- - TEST - -

Organizational processes for addressing weaknesses or deficiencies in supply chain elements

-

automated mechanisms supporting and/or implementing the addressing of weaknesses or deficiencies in supply chain elements

-
-
-
- - NIST Special Publication 800-161 - - NIST Interagency Report 7622 - -
- - Trustworthiness - - - - - - - SA-13 - -

The organization:

- - a. -

Describes the trustworthiness required in the supporting its critical missions/business functions; and

-
- - b. -

Implements to achieve such trustworthiness.

-
-
- -

This control helps organizations to make explicit trustworthiness decisions when designing, developing, and implementing information systems that are needed to conduct critical organizational missions/business functions. Trustworthiness is a characteristic/property of an information system that expresses the degree to which the system can be expected to preserve the confidentiality, integrity, and availability of the information it processes, stores, or transmits. Trustworthy information systems are systems that are capable of being trusted to operate within defined levels of risk despite the environmental disruptions, human errors, and purposeful attacks that are expected to occur in the specified environments of operation. Trustworthy systems are important to mission/business success. Two factors affecting the trustworthiness of information systems include: (i) security functionality (i.e., the security features, functions, and/or mechanisms employed within the system and its environment of operation); and (ii) security assurance (i.e., the grounds for confidence that the security functionality is effective in its application). Developers, implementers, operators, and maintainers of organizational information systems can increase the level of assurance (and trustworthiness), for example, by employing well-defined security policy models, structured and rigorous hardware, software, and firmware development techniques, sound system/security engineering principles, and secure configuration settings (defined by a set of assurance-related security controls in Appendix E). -Assurance is also based on the assessment of evidence produced during the system development life cycle. Critical missions/business functions are supported by high-impact systems and the associated assurance requirements for such systems. The additional assurance controls in Table E-4 in Appendix E (designated as optional) can be used to develop and implement high-assurance solutions for specific information systems and system components using the concept of overlays described in Appendix I. Organizations select assurance overlays that have been developed, validated, and approved for community adoption (e.g., cross-organization, governmentwide), limiting the development of such overlays on an organization-by-organization basis. Organizations can conduct criticality analyses as described in SA-14, to determine the information systems, system components, or information system services that require high-assurance solutions. Trustworthiness requirements and assurance overlays can be described in the security plans for organizational information systems.

- RA-2 - SA-4 - SA-8 - SA-14 - SC-3 -
- -

Determine if the organization:

- - SA-13(a) - - SA-13(a)[1] -

defines information system, system component, or information system service for which the trustworthiness required is to be described;

-
- - SA-13(a)[2] -

describes the trustworthiness required in organization-defined information system, information system component, or information system service supporting its critical mission/business functions;

-
-
- - SA-13(b) - - SA-13(b)[1] -

defines an assurance overlay to be implemented to achieve such trustworthiness; and

-
- - SA-13(b)[2] -

organization implements the organization-defined assurance overlay to achieve such trustworthiness.

-
-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing trustworthiness requirements for the information system, system component, or information system service

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

security categorization documentation/results

-

security authorization package for the information system, system component, or information system service

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

authorizing official

-
-
- - FIPS Publication 199 - - FIPS Publication 200 - - NIST Special Publication 800-53 - - NIST Special Publication 800-53A - - NIST Special Publication 800-60 - - NIST Special Publication 800-64 - -
- - Criticality Analysis - - - - - - - SA-14 - -

The organization identifies critical information system components and functions by performing a criticality analysis for at .

-
- -

Criticality analysis is a key tenet of supply chain risk management and informs the prioritization of supply chain protection activities such as attack surface reduction, use of all-source intelligence, and tailored acquisition strategies. Information system engineers can conduct an end-to-end functional decomposition of an information system to identify mission-critical functions and components. The functional decomposition includes the identification of core organizational missions supported by the system, decomposition into the specific functions to perform those missions, and traceability to the hardware, software, and firmware components that implement those functions, including when the functions are shared by many components within and beyond the information system boundary. Information system components that allow for unmediated access to critical components or functions are considered critical due to the inherent vulnerabilities such components create. Criticality is assessed in terms of the impact of the function or component failure on the ability of the component to complete the organizational missions supported by the information system. A criticality analysis is performed whenever an architecture or design is being developed or modified, including upgrades.

- CP-2 - PL-2 - PL-8 - PM-1 - SA-8 - SA-12 - SA-13 - SA-15 - SA-20 -
- -

Determine if the organization:

- - SA-14[1] -

defines information systems, information system components, or information system services requiring a criticality analysis to identify critical information system components and functions;

-
- - SA-14[2] -

defines decision points in the system development life cycle when a criticality analysis is to be performed for organization-defined information systems, information system components, or information system services; and

-
- - SA-14[3] -

identifies critical information system components and functions by performing a criticality analysis for organization-defined information systems, information system components, or information system services at organization-defined decisions points in the system development life cycle.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing criticality analysis requirements for information systems, security plan

-

contingency plan

-

list of information systems, information system components, or information system services requiring criticality analyses

-

list of critical information system components and functions identified by criticality analyses

-

criticality analysis documentation

-

business impact analysis documentation

-

system development life cycle documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibilities for performing criticality analysis for the information system

-
-
- - Critical Components with No Viable Alternative Sourcing - SA-14(1) - Withdrawn - SA-20 - -
- - Development Process, Standards, and Tools - - - - - - - SA-15 - -

The organization:

- - a. -

Requires the developer of the information system, system component, or information system service to follow a documented development process that:

- - 1. -

Explicitly addresses security requirements;

-
- - 2. -

Identifies the standards and tools used in the development process;

-
- - 3. -

Documents the specific tool options and tool configurations used in the development process; and

-
- - 4. -

Documents, manages, and ensures the integrity of changes to the process and/or tools used in development; and

-
-
- - b. -

Reviews the development process, standards, tools, and tool options/configurations to determine if the process, standards, tools, and tool options/configurations selected and employed can satisfy .

-
-
- -

Development tools include, for example, programming languages and computer-aided design (CAD) systems. Reviews of development processes can include, for example, the use of maturity models to determine the potential effectiveness of such processes. Maintaining the integrity of changes to tools and processes enables accurate supply chain risk assessment and mitigation, and requires robust configuration control throughout the life cycle (including design, development, transport, delivery, integration, and maintenance) to track authorized changes and prevent unauthorized changes.

- SA-3 - SA-8 -
- -

Determine if the organization:

- - SA-15(a) -

requires the developer of the information system, system component, or information system service to follow a documented development process that:

- - SA-15(a)(1) -

explicitly addresses security requirements;

-
- - SA-15(a)(2) -

identifies the standards and tools used in the development process;

-
- - SA-15(a)(3) - - SA-15(a)(3)[1] -

documents the specific tool options used in the development process;

-
- - SA-15(a)(3)[2] -

documents the specific tool configurations used in the development process;

-
-
- - SA-15(a)(4) - - SA-15(a)(4)[1] -

documents changes to the process and/or tools used in the development;

-
- - SA-15(a)(4)[2] -

manages changes to the process and/or tools used in the development;

-
- - SA-15(a)(4)[3] -

ensures the integrity of changes to the process and/or tools used in the development;

-
-
-
- - SA-15(b) - - SA-15(b)[1] -

defines a frequency to review the development process, standards, tools, and tool options/configurations;

-
- - SA-15(b)[2] -

defines security requirements to be satisfied by the process, standards, tools, and tool option/configurations selected and employed; and

-
- - SA-15(b)[3] - - SA-15(b)[3][a] -

reviews the development process with the organization-defined frequency to determine if the process selected and employed can satisfy organization-defined security requirements;

-
- - SA-15(b)[3][b] -

reviews the development standards with the organization-defined frequency to determine if the standards selected and employed can satisfy organization-defined security requirements;

-
- - SA-15(b)[3][c] -

reviews the development tools with the organization-defined frequency to determine if the tools selected and employed can satisfy organization-defined security requirements; and

-
- - SA-15(b)[3][d] -

reviews the development tool options/configurations with the organization-defined frequency to determine if the tool options/configurations selected and employed can satisfy organization-defined security requirements.

-
-
-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing development process, standards, and tools

-

procedures addressing the integration of security requirements during the development process

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

system developer documentation listing tool options/configuration guides, configuration management records

-

change control records

-

configuration control records

-

documented reviews of development process, standards, tools, and tool options/configurations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - Quality Metrics - - - - - - - - - - SA-15(1) - -

The organization requires the developer of the information system, system component, or information system service to:

- - (a) -

Define quality metrics at the beginning of the development process; and

-
- - (b) -

Provide evidence of meeting the quality metrics .

-
-
- -

Organizations use quality metrics to establish minimum acceptable levels of information system quality. Metrics may include quality gates which are collections of completion criteria or sufficiency standards representing the satisfactory execution of particular phases of the system development project. A quality gate, for example, may require the elimination of all compiler warnings or an explicit determination that the warnings have no impact on the effectiveness of required security capabilities. During the execution phases of development projects, quality gates provide clear, unambiguous indications of progress. Other metrics apply to the entire development project. These metrics can include defining the severity thresholds of vulnerabilities, for example, requiring no known vulnerabilities in the delivered information system with a Common Vulnerability Scoring System (CVSS) severity of Medium or High.

-
- -

Determine if the organization:

- - SA-15(1)(a) -

requires the developer of the information system, system component, or information system service to define quality metrics at the beginning of the development process;

- SA-15(1)(a) -
- - SA-15(1)(b) - - SA-15(1)(b)[1] -

defines a frequency to provide evidence of meeting the quality metrics;

-
- - SA-15(1)(b)[2] -

defines program review milestones to provide evidence of meeting the quality metrics;

-
- - SA-15(1)(b)[3] -

requires the developer of the information system, system component, or information system service to provide evidence of meeting the quality metrics one or more of the following:

- - SA-15(1)(b)[3][a] -

with the organization-defined frequency;

-
- - SA-15(1)(b)[3][b] -

in accordance with the organization-defined program review milestones; and/or

-
- - SA-15(1)(b)[3][c] -

upon delivery of the information system, system component, or information system service.

-
-
- SA-15(1)(b) -
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing development process, standards, and tools

-

procedures addressing the integration of security requirements into the acquisition process

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

list of quality metrics

-

documentation evidence of meeting quality metrics

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system developer

-
-
-
- - Security Tracking Tools - SA-15(2) - -

The organization requires the developer of the information system, system component, or information system service to select and employ a security tracking tool for use during the development process.

-
- -

Information system development teams select and deploy security tracking tools, including, for example, vulnerability/work item tracking systems that facilitate assignment, sorting, filtering, and tracking of completed work items or tasks associated with system development processes.

-
- -

Determine if the organization requires the developer of the information system, system component, or information system service to select and employ a security tracking tool for use during the development process.

-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing development process, standards, and tools

-

procedures addressing the integration of security requirements into the acquisition process

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

list of quality metrics

-

documentation evidence of meeting quality metrics

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system developer

-
-
-
- - Criticality Analysis - - - - - - - SA-15(3) - -

The organization requires the developer of the information system, system component, or information system service to perform a criticality analysis at and at .

-
- -

This control enhancement provides developer input to the criticality analysis performed by organizations in SA-14. Developer input is essential to such analysis because organizations may not have access to detailed design documentation for information system components that are developed as commercial off-the-shelf (COTS) information technology products (e.g., functional specifications, high-level designs, low-level designs, and source code/hardware schematics).

- SA-4 - SA-14 -
- -

Determine if the organization:

- - SA-15(3)[1] -

defines the breadth of criticality analysis to be performed by the developer of the information system, system component, or information system service;

-
- - SA-15(3)[2] -

defines the depth of criticality analysis to be performed by the developer of the information system, system component, or information system service;

-
- - SA-15(3)[3] -

defines decision points in the system development life cycle when a criticality analysis is to be performed for the information system, system component, or information system service; and

-
- - SA-15(3)[4] -

requires the developer of the information system, system component, or information system service to perform a criticality analysis at the organization-defined breadth/depth and at organization-defined decision points in the system development life cycle.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing development process, standards, and tools

-

procedures addressing criticality analysis requirements for the information system, system component, or information system service

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

criticality analysis documentation

-

business impact analysis documentation

-

software development life cycle documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel responsibility for performing criticality analysis

-

system developer

-
-
- - TEST - -

Organizational processes for performing criticality analysis

-

automated mechanisms supporting and/or implementing criticality analysis

-
-
-
- - Threat Modeling / Vulnerability Analysis - - - - - - - - - - - - - SA-15(4) - -

The organization requires that developers perform threat modeling and a vulnerability analysis for the information system at that:

- - (a) -

Uses ;

-
- - (b) -

Employs ; and

-
- - (c) -

Produces evidence that meets .

-
-
- - SA-4 - - -

Determine if the organization:

- - SA-15(4)[1] -

defines the breadth of threat modeling and vulnerability analysis to be performed by developers for the information system;

-
- - SA-15(4)[2] -

defines the depth of threat modeling and vulnerability analysis to be performed by developers for the information system;

-
- - SA-15(4)[3] -

defines information concerning impact, environment of operations, known or assumed threats, and acceptable risk levels to be used in threat modeling and vulnerability analysis;

-
- - SA-15(4)[4] -

defines tools and methods to be employed in threat modeling and vulnerability analysis;

-
- - SA-15(4)[5] -

defines acceptance criteria for evidence produced from threat modeling and vulnerability analysis;

-
- - SA-15(4)[6] -

requires that developers perform threat modeling and a vulnerability analysis for the information system at the organization-defined breadth/depth that:

- - SA-15(4)[6](a) -

uses organization-defined information concerning impact, environment of operations, known or assumed threats, and acceptable risk levels;

- SA-15(4)(a) -
- - SA-15(4)[6](b) -

employs organization-defined tools and methods; and

- SA-15(4)(b) -
- - SA-15(4)[6](c) -

produces evidence that meets organization-defined acceptance criteria.

- SA-15(4)(c) -
-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing development process, standards, and tools

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

threat modeling documentation

-

vulnerability analysis results

-

organizational risk assessments

-

acceptance criteria for evidence produced from threat modeling and vulnerability analysis

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Organizational processes for performing development threat modeling and vulnerability analysis

-

automated mechanisms supporting and/or implementing development threat modeling and vulnerability analysis

-
-
-
- - Attack Surface Reduction - - - - SA-15(5) - -

The organization requires the developer of the information system, system component, or information system service to reduce attack surfaces to .

-
- -

Attack surface reduction is closely aligned with developer threat and vulnerability analyses and information system architecture and design. Attack surface reduction is a means of reducing risk to organizations by giving attackers less opportunity to exploit weaknesses or deficiencies (i.e., potential vulnerabilities) within information systems, information system components, and information system services. Attack surface reduction includes, for example, applying the principle of least privilege, employing layered defenses, applying the principle of least functionality (i.e., restricting ports, protocols, functions, and services), deprecating unsafe functions, and eliminating application programming interfaces (APIs) that are vulnerable to cyber attacks.

- CM-7 -
- -

Determine if the organization:

- - SA-15(5)[1] -

defines thresholds to which attack surfaces are to be reduced; and

-
- - SA-15(5)[2] -

requires the developer of the information system, system component, or information system service to reduce attack surfaces to organization-defined thresholds.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing development process, standards, and tools

-

procedures addressing attack surface reduction

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, or information system service

-

information system design documentation

-

network diagram

-

information system configuration settings and associated documentation establishing/enforcing organization-defined thresholds for reducing attack surfaces

-

list of restricted ports, protocols, functions and services

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel responsibility for attack surface reduction thresholds

-

system developer

-
-
- - TEST - -

Organizational processes for defining attack surface reduction thresholds

-
-
-
- - Continuous Improvement - SA-15(6) - -

The organization requires the developer of the information system, system component, or information system service to implement an explicit process to continuously improve the development process.

-
- -

Developers of information systems, information system components, and information system services consider the effectiveness/efficiency of current development processes for meeting quality objectives and addressing security capabilities in current threat environments.

-
- -

Determine if the organization requires the developer of the information system, system component, or information system service to implement an explicit process to continuously improve the development process.

-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing development process, standards, and tools

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

quality goals and metrics for improving system development process

-

security assessments and/or quality control reviews of system development process

-

plans of action and milestones for improving system development process

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system developer

-
-
-
- - Automated Vulnerability Analysis - - - - - - - SA-15(7) - -

The organization requires the developer of the information system, system component, or information system service to:

- - (a) -

Perform an automated vulnerability analysis using ;

-
- - (b) -

Determine the exploitation potential for discovered vulnerabilities;

-
- - (c) -

Determine potential risk mitigations for delivered vulnerabilities; and

-
- - (d) -

Deliver the outputs of the tools and results of the analysis to .

-
-
- - RA-5 - - -

Determine if the organization:

- - SA-15(7)(a) - - SA-15(7)(a)[1] -

defines tools to be used to perform automated vulnerability analysis of the information system, system component, or information system service;

-
- - SA-15(7)(a)[2] -

requires the developer of the information system, system component, or information system service to perform an automated vulnerability analysis using organization-defined tools;

-
- SA-15(7)(a) -
- - SA-15(7)(b) -

requires the developer of the information system, system component, or information system service to determine the exploitation potential for discovered vulnerabilities;

- SA-15(7)(b) -
- - SA-15(7)(c) -

requires the developer of the information system, system component, or information system service to determine potential risk mitigations for delivered vulnerabilities;

- SA-15(7)(c) -
- - SA-15(7)(d) - - SA-15(7)(d)[1] -

defines personnel or roles to whom the output of the tools and results of the analysis are to be delivered; and

-
- - SA-15(7)(d)[2] -

requires the developer of the information system, system component, or information system service to deliver the outputs of the tools and results of the analysis to organization-defined personnel or roles.

-
- SA-15(7)(d) -
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing development process, standards, and tools

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

vulnerability analysis tools and associated documentation

-

risk assessment reports

-

vulnerability analysis results

-

vulnerability mitigation reports

-

risk mitigation strategy documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel performing automated vulnerability analysis on the information system

-
-
- - TEST - -

Organizational processes for vulnerability analysis of information systems, system components, or information system services under development

-

automated mechanisms supporting and/or implementing vulnerability analysis of information systems, system components, or information system services under development

-
-
-
- - Reuse of Threat / Vulnerability Information - SA-15(8) - -

The organization requires the developer of the information system, system component, or information system service to use threat modeling and vulnerability analyses from similar systems, components, or services to inform the current development process.

-
- -

Analysis of vulnerabilities found in similar software applications can inform potential design or implementation issues for information systems under development. Similar information systems or system components may exist within developer organizations. Authoritative vulnerability information is available from a variety of public and private sector sources including, for example, the National Vulnerability Database.

-
- -

Determine if the organization requires the developer of the information system, system component, or information system service to use threat modeling and vulnerability analyses from similar systems, components, or services to inform the current development process.

-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing development process, standards, and tools

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

threat modeling and vulnerability analyses from similar information systems, system components, or information system service

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system developer

-
-
-
- - Use of Live Data - SA-15(9) - -

The organization approves, documents, and controls the use of live data in development and test environments for the information system, system component, or information system service.

-
- -

The use of live data in preproduction environments can result in significant risk to organizations. Organizations can minimize such risk by using test or dummy data during the development and testing of information systems, information system components, and information system services.

-
- -

Determine if the organization, for the information system, system component, or information system service:

- - SA-15(9)[1] -

approves the use of live data in development and test environments;

-
- - SA-15(9)[2] -

documents the use of live data in development and test environments; and

-
- - SA-15(9)[3] -

controls the use of live data in development and test environments.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing development process, standards, and tools

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

information system design documentation

-

information system configuration settings and associated documentation

-

documentation authorizing use of live data in development and test environments

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Organizational processes for approving, documenting, and controlling the use of live data in development and test environments

-

automated mechanisms supporting and/or implementing the approval, documentation, and control of the use of live data in development and test environments

-
-
-
- - Incident Response Plan - SA-15(10) - -

The organization requires the developer of the information system, system component, or information system service to provide an incident response plan.

-
- -

The incident response plan for developers of information systems, system components, and information system services is incorporated into organizational incident response plans to provide the type of incident response information not readily available to organizations. Such information may be extremely helpful, for example, when organizations respond to vulnerabilities in commercial off-the-shelf (COTS) information technology products.

- IR-8 -
- -

Determine if the organization requires the developer of the information system, system component, or information system service to provide an incident response plan.

-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing development process, standards, and tools

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, or services

-

acquisition documentation

-

solicitation documentation

-

service-level agreements

-

developer incident response plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system developer

-
-
-
- - Archive Information System / Component - SA-15(11) - -

The organization requires the developer of the information system or system component to archive the system or component to be released or delivered together with the corresponding evidence supporting the final security review.

-
- -

Archiving relevant documentation from the development process can provide a readily available baseline of information that can be helpful during information system/component upgrades or modifications.

-
- -

Determine if the organization requires the developer of the information system or system component to archive the system or component to be released or delivered together with the corresponding evidence supporting the final security review.

-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing development process, standards, and tools

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, or services

-

acquisition documentation

-

solicitation documentation

-

service-level agreements

-

developer incident response plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system developer

-
-
-
-
- - Developer-provided Training - - - - SA-16 - -

The organization requires the developer of the information system, system component, or information system service to provide on the correct use and operation of the implemented security functions, controls, and/or mechanisms.

-
- -

This control applies to external and internal (in-house) developers. Training of personnel is an essential element to ensure the effectiveness of security controls implemented within organizational information systems. Training options include, for example, classroom-style training, web-based/computer-based training, and hands-on training. Organizations can also request sufficient training materials from developers to conduct in-house training or offer self-training to organizational personnel. Organizations determine the type of training necessary and may require different types of training for different security functions, controls, or mechanisms.

- AT-2 - AT-3 - SA-5 -
- -

Determine if the organization:

- - SA-16[1] -

defines training to be provided by the developer of the information system, system component, or information system service; and

-
- - SA-16[2] -

requires the developer of the information system, system component, or information system service to provide organization-defined training on the correct use and operation of the implemented security functions, controls, and/or mechanisms.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing developer-provided training

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

developer-provided training materials

-

training records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information system security responsibilities

-

system developer

-

organizational or third-party developers with training responsibilities for the information system, system component, or information system service

-
-
-
- - Developer Security Architecture and Design - SA-17 - -

The organization requires the developer of the information system, system component, or information system service to produce a design specification and security architecture that:

- - a. -

Is consistent with and supportive of the organization’s security architecture which is established within and is an integrated part of the organization’s enterprise architecture;

-
- - b. -

Accurately and completely describes the required security functionality, and the allocation of security controls among physical and logical components; and

-
- - c. -

Expresses how individual security functions, mechanisms, and services work together to provide required security capabilities and a unified approach to protection.

-
-
- -

This control is primarily directed at external developers, although it could also be used for internal (in-house) development. In contrast, PL-8 is primarily directed at internal developers to help ensure that organizations develop an information security architecture and such security architecture is integrated or tightly coupled to the enterprise architecture. This distinction is important if/when organizations outsource the development of information systems, information system components, or information system services to external entities, and there is a requirement to demonstrate consistency with the organization’s enterprise architecture and information security architecture.

- PL-8 - PM-7 - SA-3 - SA-8 -
- -

Determine if the organization requires the developer of the information system, system component, or information system service to produce a design specification and security architecture that:

- - SA-17(a) -

is consistent with and supportive of the organization’s security architecture which is established within and is an integrated part of the organization’s enterprise architecture;

-
- - SA-17(b) -

accurately and completely describes:

- - SA-17(b)[1] -

the required security functionality;

-
- - SA-17(b)[2] -

the allocation of security controls among physical and logical components; and

-
-
- - SA-17(c) -

expresses how individual security functions, mechanisms, and services work together to provide required security capabilities and a unified approach to protection.

-
-
- - EXAMINE - -

System and services acquisition policy

-

enterprise architecture policy

-

procedures addressing developer security architecture and design specification for the information system

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

design specification and security architecture documentation for the system

-

information system design documentation

-

information system configuration settings and associated documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with security architecture and design responsibilities

-
-
- - Formal Policy Model - - - - SA-17(1) - -

The organization requires the developer of the information system, system component, or information system service to:

- - (a) -

Produce, as an integral part of the development process, a formal policy model describing the to be enforced; and

-
- - (b) -

Prove that the formal policy model is internally consistent and sufficient to enforce the defined elements of the organizational security policy when implemented.

-
-
- -

Formal models describe specific behaviors or security policies using formal languages, thus enabling the correctness of those behaviors/policies to be formally proven. Not all components of information systems can be modeled, and generally, formal specifications are scoped to specific behaviors or policies of interest (e.g., nondiscretionary access control policies). Organizations choose the particular formal modeling language and approach based on the nature of the behaviors/policies to be described and the available tools. Formal modeling tools include, for example, Gypsy and Zed.

-
- -

Determine if the organization:

- - SA-17(1)(a) - - SA-17(1)(a)[1] -

defines elements of the organizational security policy to be enforced under a formal policy model produced by the developer as an integral part of the development process for the information system, system component, or information system service;

-
- - SA-17(1)(a)[2] -

requires the developer of the information system, system component, or information system service to produce, as an integral part of the development process, a formal policy model describing the organization-defined elements of organizational security policy to be enforced; and

-
- SA-17(1)(a) -
- - SA-17(1)(b) -

requires the developer of the information system, system component, or information system service to prove that the formal policy model is internally consistent and sufficient to enforce the defined elements of the organizational security policy when implemented.

- SA-17(1)(b) -
-
- - EXAMINE - -

System and services acquisition policy

-

enterprise architecture policy

-

procedures addressing developer security architecture and design specification for the information system

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

design specification and security architecture documentation for the system

-

information system design documentation

-

information system configuration settings and associated documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with security architecture and design responsibilities

-
-
-
- - Security-relevant Components - SA-17(2) - -

The organization requires the developer of the information system, system component, or information system service to:

- - (a) -

Define security-relevant hardware, software, and firmware; and

-
- - (b) -

Provide a rationale that the definition for security-relevant hardware, software, and firmware is complete.

-
-
- -

Security-relevant hardware, software, and firmware represent the portion of the information system, component, or service that must be trusted to perform correctly in order to maintain required security properties.

- SA-5 -
- -

Determine if the organization requires the developer of the information system, system component, or information system service to:

- - SA-17(2)(a) - - SA-17(2)(a)[1] -

define security-relevant hardware;

-
- - SA-17(2)(a)[2] -

define security-relevant software;

-
- - SA-17(2)(a)[3] -

define security-relevant firmware; and

-
- SA-17(2)(a) -
- - SA-17(2)(b) -

provide a rationale that the definition for security-relevant hardware, software, and firmware components is complete.

- SA-17(2)(b) -
-
- - EXAMINE - -

System and services acquisition policy

-

enterprise architecture policy

-

procedures addressing developer security architecture and design specification for the information system

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

list of security-relevant hardware, software, and firmware components

-

documented rationale of completeness regarding definitions provided for security-relevant hardware, software, and firmware

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system developers

-

organizational personnel with security architecture and design responsibilities

-
-
-
- - Formal Correspondence - SA-17(3) - -

The organization requires the developer of the information system, system component, or information system service to:

- - (a) -

Produce, as an integral part of the development process, a formal top-level specification that specifies the interfaces to security-relevant hardware, software, and firmware in terms of exceptions, error messages, and effects;

-
- - (b) -

Show via proof to the extent feasible with additional informal demonstration as necessary, that the formal top-level specification is consistent with the formal policy model;

-
- - (c) -

Show via informal demonstration, that the formal top-level specification completely covers the interfaces to security-relevant hardware, software, and firmware;

-
- - (d) -

Show that the formal top-level specification is an accurate description of the implemented security-relevant hardware, software, and firmware; and

-
- - (e) -

Describe the security-relevant hardware, software, and firmware mechanisms not addressed in the formal top-level specification but strictly internal to the security-relevant hardware, software, and firmware.

-
-
- -

Correspondence is an important part of the assurance gained through modeling. It demonstrates that the implementation is an accurate transformation of the model, and that any additional code or implementation details present have no impact on the behaviors or policies being modeled. Formal methods can be used to show that the high-level security properties are satisfied by the formal information system description, and that the formal system description is correctly implemented by a description of some lower level, for example a hardware description. Consistency between the formal top-level specification and the formal policy models is generally not amenable to being fully proven. Therefore, a combination of formal/informal methods may be needed to show such consistency. Consistency between the formal top-level specification and the implementation may require the use of an informal demonstration due to limitations in the applicability of formal methods to prove that the specification accurately reflects the implementation. Hardware, software, and firmware mechanisms strictly internal to security-relevant hardware, software, and firmware include, for example, mapping registers and direct memory input/output.

- SA-5 -
- -

Determine if the organization requires the developer of the information system, system component, or information system service to:

- - SA-17(3)(a) -

produce, as an integral part of the development process, a formal top-level specification that specifies the interfaces to security-relevant hardware, software, and firmware in terms of:

- - SA-17(3)(a)[1] -

exceptions;

-
- - SA-17(3)(a)[2] -

error messages;

-
- - SA-17(3)(a)[3] -

effects;

-
- SA-17(3)(a) -
- - SA-17(3)(b) -

show via proof to the extent feasible with additional informal demonstration as necessary, that the formal top-level specification is consistent with the formal policy model;

- SA-17(3)(b) -
- - SA-17(3)(c) -

show via informal demonstration, that the formal top-level specification completely covers the interfaces to security-relevant hardware, software, and firmware;

- SA-17(3)(c) -
- - SA-17(3)(d) -

show that the formal top-level specification is an accurate description of the implemented security-relevant hardware, software, and firmware; and

- SA-17(3)(d) -
- - SA-17(3)(e) -

describe the security-relevant hardware, software, and firmware mechanisms not addressed in the formal top-level specification but strictly internal to the security-relevant hardware, software, and firmware.

- SA-17(3)(e) -
-
- - EXAMINE - -

System and services acquisition policy

-

enterprise architecture policy

-

formal policy model

-

procedures addressing developer security architecture and design specification for the information system

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

formal top-level specification documentation

-

information system security architecture and design documentation

-

information system design documentation

-

information system configuration settings and associated documentation

-

documentation describing security-relevant hardware, software and firmware mechanisms not addressed in the formal top-level specification documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with security architecture and design responsibilities

-
-
-
- - Informal Correspondence - - - - SA-17(4) - -

The organization requires the developer of the information system, system component, or information system service to:

- - (a) -

Produce, as an integral part of the development process, an informal descriptive top-level specification that specifies the interfaces to security-relevant hardware, software, and firmware in terms of exceptions, error messages, and effects;

-
- - (b) -

Show via that the descriptive top-level specification is consistent with the formal policy model;

-
- - (c) -

Show via informal demonstration, that the descriptive top-level specification completely covers the interfaces to security-relevant hardware, software, and firmware;

-
- - (d) -

Show that the descriptive top-level specification is an accurate description of the interfaces to security-relevant hardware, software, and firmware; and

-
- - (e) -

Describe the security-relevant hardware, software, and firmware mechanisms not addressed in the descriptive top-level specification but strictly internal to the security-relevant hardware, software, and firmware.

-
-
- -

Correspondence is an important part of the assurance gained through modeling. It demonstrates that the implementation is an accurate transformation of the model, and that any additional code or implementation details present has no impact on the behaviors or policies being modeled. Consistency between the descriptive top-level specification (i.e., high-level/low-level design) and the formal policy model is generally not amenable to being fully proven. Therefore, a combination of formal/informal methods may be needed to show such consistency. Hardware, software, and firmware mechanisms strictly internal to security-relevant hardware, software, and firmware include, for example, mapping registers and direct memory input/output.

- SA-5 -
- -

Determine if the organization requires the developer of the information system, system component, or information system service to:

- - SA-17(4)(a) -

produce, as an integral part of the development process, an informal descriptive top-level specification that specifies the interfaces to security-relevant hardware, software, and firmware in terms of:

- - SA-17(4)(a)[1] -

exceptions;

-
- - SA-17(4)(a)[2] -

error messages;

-
- - SA-17(4)(a)[3] -

effects;

-
- SA-17(4)(a) -
- - SA-17(4)(b) -

show via informal demonstration and/or convincing argument with formal methods as feasible that the descriptive top-level specification is consistent with the formal policy model;

- SA-17(4)(b) -
- - SA-17(4)(c) -

show via informal demonstration, that the descriptive top-level specification completely covers the interfaces to security-relevant hardware, software, and firmware;

- SA-17(4)(c) -
- - SA-17(4)(d) -

show that the descriptive top-level specification is an accurate description of the interfaces to the security-relevant hardware, software, and firmware; and

- SA-17(4)(d) -
- - SA-17(4)(e) -

describe the security-relevant hardware, software, and firmware mechanisms not addressed in the descriptive top-level specification but strictly internal to the security-relevant hardware, software, and firmware.

- SA-17(4)(e) -
-
- - EXAMINE - -

System and services acquisition policy

-

enterprise architecture policy

-

formal policy model

-

procedures addressing developer security architecture and design specification for the information system

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

informal descriptive top-level specification documentation

-

information system security architecture and design documentation

-

information system design documentation

-

information system configuration settings and associated documentation

-

documentation describing security-relevant hardware, software and firmware mechanisms not addressed in the informal descriptive top-level specification documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with security architecture and design responsibilities

-
-
-
- - Conceptually Simple Design - SA-17(5) - -

The organization requires the developer of the information system, system component, or information system service to:

- - (a) -

Design and structure the security-relevant hardware, software, and firmware to use a complete, conceptually simple protection mechanism with precisely defined semantics; and

-
- - (b) -

Internally structure the security-relevant hardware, software, and firmware with specific regard for this mechanism.

-
-
- - SC-3 - - -

Determine if the organization requires the developer of the information system, system component, or information system service to:

- - SA-17(5)(a) -

design and structure the security-relevant hardware, software, and firmware to use a complete, conceptually simple protection mechanism with precisely defined semantics; and

- SA-17(5)(a) -
- - SA-17(5)(b) -

internally structure the security-relevant hardware, software, and firmware with specific regard for this mechanism.

- SA-17(5)(b) -
-
- - EXAMINE - -

System and services acquisition policy

-

enterprise architecture policy

-

procedures addressing developer security architecture and design specification for the information system

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

information system design documentation

-

information system security architecture documentation

-

information system configuration settings and associated documentation

-

developer documentation describing design and structure of security-relevant hardware, software, and firmware components

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with security architecture and design responsibilities

-
-
-
- - Structure for Testing - SA-17(6) - -

The organization requires the developer of the information system, system component, or information system service to structure security-relevant hardware, software, and firmware to facilitate testing.

-
- - SA-11 - - -

Determine if the organization requires the developer of the information system, system component, or information system service to structure security-relevant hardware, software, and firmware to facilitate testing.

-
- - EXAMINE - -

System and services acquisition policy

-

enterprise architecture policy

-

procedures addressing developer security architecture and design specification for the information system

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

information system design documentation

-

information system security architecture documentation

-

information system configuration settings and associated documentation

-

developer documentation describing design and structure of security-relevant hardware, software, and firmware components to facilitate testing

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with security architecture and design responsibilities

-
-
-
- - Structure for Least Privilege - SA-17(7) - -

The organization requires the developer of the information system, system component, or information system service to structure security-relevant hardware, software, and firmware to facilitate controlling access with least privilege.

-
- - AC-5 - AC-6 - - -

Determine if the organization requires the developer of the information system, system component, or information system service to structure security-relevant hardware, software, and firmware to facilitate controlling access with least privilege.

-
- - EXAMINE - -

System and services acquisition policy

-

enterprise architecture policy

-

procedures addressing developer security architecture and design specification for the information system

-

solicitation documentation

-

acquisition documentation

-

service-level agreements

-

acquisition contracts for the information system, system component, or information system service

-

information system design documentation

-

information system security architecture documentation

-

information system configuration settings and associated documentation

-

developer documentation describing design and structure of security-relevant hardware, software, and firmware components to facilitate controlling access with least privilege

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with security architecture and design responsibilities

-
-
-
-
- - Tamper Resistance and Detection - SA-18 - -

The organization implements a tamper protection program for the information system, system component, or information system service.

-
- -

Anti-tamper technologies and techniques provide a level of protection for critical information systems, system components, and information technology products against a number of related threats including modification, reverse engineering, and substitution. Strong identification combined with tamper resistance and/or tamper detection is essential to protecting information systems, components, and products during distribution and when in use.

- PE-3 - SA-12 - SI-7 -
- -

Determine if the organization implements a tamper protection program for the information system, system component, or information system service.

-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing tamper resistance and detection

-

tamper protection program documentation

-

tamper protection tools and techniques documentation

-

tamper resistance and detection tools and techniques documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for the tamper protection program

-
-
- - TEST - -

Organizational processes for implementation of the tamper protection program

-

automated mechanisms supporting and/or implementing the tamper protection program

-
-
- - Multiple Phases of SDLC - SA-18(1) - -

The organization employs anti-tamper technologies and techniques during multiple phases in the system development life cycle including design, development, integration, operations, and maintenance.

-
- -

Organizations use a combination of hardware and software techniques for tamper resistance and detection. Organizations employ obfuscation and self-checking, for example, to make reverse engineering and modifications more difficult, time-consuming, and expensive for adversaries. Customization of information systems and system components can make substitutions easier to detect and therefore limit damage.

- SA-3 -
- -

Determine if the organization employs anti-tamper technologies and techniques during multiple phases in the system development life cycle including:

- - SA-18(1)[1] -

design;

-
- - SA-18(1)[2] -

development;

-
- - SA-18(1)[3] -

integration;

-
- - SA-18(1)[4] -

operations; and

-
- - SA-18(1)[5] -

maintenance.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing tamper resistance and detection

-

tamper protection program documentation

-

tamper protection tools and techniques documentation

-

tamper resistance and detection tools (technologies) and techniques documentation

-

system development life cycle documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for the tamper protection program

-

organizational personnel with SDLC responsibilities

-
-
- - TEST - -

Organizational processes for employing anti-tamper technologies

-

automated mechanisms supporting and/or implementing anti-tamper technologies

-
-
-
- - Inspection of Information Systems, Components, or Devices - - - - - - - - - - - - - SA-18(2) - -

The organization inspects - to detect tampering.

-
- -

This control enhancement addresses both physical and logical tampering and is typically applied to mobile devices, notebook computers, or other system components taken out of organization-controlled areas. Indications of need for inspection include, for example, when individuals return from travel to high-risk locations.

- SI-4 -
- -

Determine if the organization:

- - SA-18(2)[1] -

defines information systems, system components, or devices to be inspected to detect tampering;

-
- - SA-18(2)[2] -

defines the frequency to inspect organization-defined information systems, system components, or devices to detect tampering;

-
- - SA-18(2)[3] -

defines indications of need for inspection of organization-defined information systems, system components, or devices to detect tampering;

-
- - SA-18(2)[4] -

inspects organization-defined information systems, system components, or devices to detect tampering, selecting one or more of the following:

- - SA-18(2)[4][a] -

at random;

-
- - SA-18(2)[4][b] -

with the organization-defined frequency; and/or

-
- - SA-18(2)[4][c] -

upon organization-defined indications of need for inspection.

-
-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing tamper resistance and detection

-

records of random inspections

-

inspection reports/results

-

assessment reports/results

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for the tamper protection program

-
-
- - TEST - -

Organizational processes for inspecting information systems, system components, or devices to detect tampering

-

automated mechanisms supporting and/or implementing tampering detection

-
-
-
-
- - Component Authenticity - - - - - - - - - - SA-19 - -

The organization:

- - a. -

Develops and implements anti-counterfeit policy and procedures that include the means to detect and prevent counterfeit components from entering the information system; and

-
- - b. -

Reports counterfeit information system components to .

-
-
- -

Sources of counterfeit components include, for example, manufacturers, developers, vendors, and contractors. Anti-counterfeiting policy and procedures support tamper resistance and provide a level of protection against the introduction of malicious code. External reporting organizations include, for example, US-CERT.

- PE-3 - SA-12 - SI-7 -
- -

Determine if the organization:

- - SA-19(a) -

develops and implements anti-counterfeit policy and procedures that include the means to detect and prevent counterfeit components from entering the information system;

-
- - SA-19(b) - - SA-19(b)[1] -

defines external reporting organizations to whom counterfeit information system components are to be reported;

-
- - SA-19(b)[2] -

defines personnel or roles to whom counterfeit information system components are to be reported;

-
- - SA-19(b)[3] -

reports counterfeit information system components to one or more of the following:

- - SA-19(b)[3][a] -

the source of counterfeit component;

-
- - SA-19(b)[3][b] -

the organization-defined external reporting organizations; and/or

-
- - SA-19(b)[3][c] -

the organization-defined personnel or roles.

-
-
-
-
- - EXAMINE - -

System and services acquisition policy

-

anti-counterfeit policy and procedures

-

media disposal policy

-

media protection policy

-

incident response policy

-

training materials addressing counterfeit information system components

-

training records on detection and prevention of counterfeit components from entering the information system

-

reports notifying developers/manufacturers/vendors/ contractors and/or external reporting organizations of counterfeit information system components

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for anti-counterfeit policy, procedures, and reporting

-
-
- - TEST - -

Organizational processes for anti-counterfeit detection, prevention, and reporting

-

automated mechanisms supporting and/or implementing anti-counterfeit detection, prevention, and reporting

-
-
- - Anti-counterfeit Training - - - - SA-19(1) - -

The organization trains to detect counterfeit information system components (including hardware, software, and firmware).

-
- -

Determine if the organization:

- - SA-19(1)[1] -

defines personnel or roles to be trained to detect counterfeit information system components (including hardware, software, and firmware); and

-
- - SA-19(1)[2] -

trains organization-defined personnel or roles to detect counterfeit information system components (including hardware, software, and firmware).

-
-
- - EXAMINE - -

System and services acquisition policy

-

anti-counterfeit policy and procedures

-

media disposal policy

-

media protection policy

-

incident response policy

-

training materials addressing counterfeit information system components

-

training records on detection of counterfeit information system components

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for anti-counterfeit policy, procedures, and training

-
-
- - TEST - -

Organizational processes for anti-counterfeit training

-
-
-
- - Configuration Control for Component Service / Repair - - - - SA-19(2) - -

The organization maintains configuration control over awaiting service/repair and serviced/repaired components awaiting return to service.

-
- -

Determine if the organization:

- - SA-19(2)[1] -

defines information system components requiring configuration control to be maintained when awaiting service/repair;

-
- - SA-19(2)[2] -

defines information system components requiring configuration control to be maintained when awaiting return to service; and

-
- - SA-19(2)[3] -

maintains configuration control over organization-defined information system components awaiting service/repairs and serviced/repaired components awaiting return to service.

-
-
- - EXAMINE - -

System and services acquisition policy

-

anti-counterfeit policy and procedures

-

media protection policy

-

configuration management plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

configuration control records for components awaiting service/repair

-

configuration control records for serviced/repaired components awaiting return to service

-

information system maintenance records

-

information system audit records

-

inventory management records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for anti-counterfeit policy and procedures

-

organizational personnel with responsibility for configuration management

-
-
- - TEST - -

Organizational processes for configuration management

-

automated mechanisms supporting and/or implementing configuration management

-
-
-
- - Component Disposal - - - - SA-19(3) - -

The organization disposes of information system components using .

-
- -

Proper disposal of information system components helps to prevent such components from entering the gray market.

-
- -

Determine if the organization:

- - SA-19(3)[1] -

defines techniques and methods to dispose of information system components; and

-
- - SA-19(3)[2] -

disposes of information system components using organization-defined techniques and methods.

-
-
- - EXAMINE - -

System and services acquisition policy

-

anti-counterfeit policy and procedures

-

media disposal policy

-

media protection policy

-

disposal records for information system components

-

documentation of disposal techniques and methods employed for information system components

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for anti-counterfeit policy and procedures

-

organizational personnel with responsibility for disposal of information system components

-
-
- - TEST - -

Organizational techniques and methods for information system component disposal

-

automated mechanisms supporting and/or implementing system component disposal

-
-
-
- - Anti-counterfeit Scanning - - - - SA-19(4) - -

The organization scans for counterfeit information system components .

-
- -

Determine if the organization:

- - SA-19(4)[1] -

defines a frequency to scan for counterfeit information system components; and

-
- - SA-19(4)[2] -

scans for counterfeit information system components with the organization-defined frequency.

-
-
- - EXAMINE - -

System and services acquisition policy

-

anti-counterfeit policy and procedures

-

information system design documentation

-

information system configuration settings and associated documentation

-

scanning tools and associated documentation

-

scanning results

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for anti-counterfeit policy and procedures

-

organizational personnel with responsibility for anti-counterfeit scanning

-
-
- - TEST - -

Organizational processes for anti-counterfeit scanning

-

automated mechanisms supporting and/or implementing anti-counterfeit scanning

-
-
-
-
- - Customized Development of Critical Components - - - - SA-20 - -

The organization re-implements or custom develops .

-
- -

Organizations determine that certain information system components likely cannot be trusted due to specific threats to and vulnerabilities in those components, and for which there are no viable security controls to adequately mitigate the resulting risk. Re-implementation or custom development of such components helps to satisfy requirements for higher assurance. This is accomplished by initiating changes to system components (including hardware, software, and firmware) such that the standard attacks by adversaries are less likely to succeed. In situations where no alternative sourcing is available and organizations choose not to re-implement or custom develop critical information system components, additional safeguards can be employed (e.g., enhanced auditing, restrictions on source code and system utility access, and protection from deletion of system and application files.

- CP-2 - SA-8 - SA-14 -
- -

Determine if the organization:

- - SA-20[1] -

defines critical information system components to be re-implemented or custom developed; and

-
- - SA-20[2] -

re-implements or custom develops organization-defined information system components.

-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing customized development of critical information system components

-

information system design documentation

-

information system configuration settings and associated documentation

-

system development life cycle documentation addressing custom development of critical information system components

-

configuration management records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility re-implementation or customized development of critical information system components

-
-
- - TEST - -

Organizational processes for re-implementing or customized development of critical information system components

-

automated mechanisms supporting and/or implementing re-implementation or customized development of critical information system components

-
-
-
- - Developer Screening - - - - - - - - - - SA-21 - -

The organization requires that the developer of :

- - a. -

Have appropriate access authorizations as determined by assigned ; and

-
- - b. -

Satisfy .

-
-
- -

Because the information system, system component, or information system service may be employed in critical activities essential to the national and/or economic security interests of the United States, organizations have a strong interest in ensuring that the developer is trustworthy. The degree of trust required of the developer may need to be consistent with that of the individuals accessing the information system/component/service once deployed. Examples of authorization and personnel screening criteria include clearance, satisfactory background checks, citizenship, and nationality. Trustworthiness of developers may also include a review and analysis of company ownership and any relationships the company has with entities potentially affecting the quality/reliability of the systems, components, or services being developed.

- PS-3 - PS-7 -
- -

Determine if the organization:

- - SA-21[1] -

defines the information system, system component, or information system service for which the developer is to be screened;

-
- - SA-21[2] -

defines official government duties to be used to determine appropriate access authorizations for the developer;

-
- - SA-21[3] -

defines additional personnel screening criteria to be satisfied by the developer;

-
- - SA-21[4] - - SA-21[4][a] -

requires that the developer of organization-defined information system, system component, or information system service have appropriate access authorizations as determined by assigned organization-defined official government duties; and

-
- - SA-21[4][b] -

requires that the developer of organization-defined information system, system component, or information system service satisfy organization-defined additional personnel screening criteria.

-
-
-
- - EXAMINE - -

System and services acquisition policy

-

personnel security policy and procedures

-

procedures addressing personnel screening

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of appropriate access authorizations required by developers of the information system

-

personnel screening criteria and associated documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for developer screening

-
-
- - TEST - -

Organizational processes for developer screening

-

automated mechanisms supporting developer screening

-
-
- - Validation of Screening - - - - SA-21(1) - -

The organization requires the developer of the information system, system component, or information system service take to ensure that the required access authorizations and screening criteria are satisfied.

-
- -

Satisfying required access authorizations and personnel screening criteria includes, for example, providing a listing of all the individuals authorized to perform development activities on the selected information system, system component, or information system service so that organizations can validate that the developer has satisfied the necessary authorization and screening requirements.

-
- -

Determine if the organization:

- - SA-21(1)[1] -

defines actions to be taken by the developer of the information system, system component, or information system service to ensure that the required access authorizations and screening criteria are satisfied; and

-
- - SA-21(1)[2] -

requires the developer of the information system, system component, or information system service take organization-defined actions to ensure that the required access authorizations and screening criteria are satisfied.

-
-
- - EXAMINE - -

System and services acquisition policy

-

personnel security policy and procedures

-

procedures addressing personnel screening

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of appropriate access authorizations required by developers of the information system

-

personnel screening criteria and associated documentation

-

list of actions ensuring required access authorizations and screening criteria are satisfied

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for developer screening

-

system developer

-
-
- - TEST - -

Organizational processes for developer screening

-

automated mechanisms supporting developer screening

-
-
-
-
- - Unsupported System Components - SA-22 - -

The organization:

- - a. -

Replaces information system components when support for the components is no longer available from the developer, vendor, or manufacturer; and

-
- - b. -

Provides justification and documents approval for the continued use of unsupported system components required to satisfy mission/business needs.

-
-
- -

Support for information system components includes, for example, software patches, firmware updates, replacement parts, and maintenance contracts. Unsupported components (e.g., when vendors are no longer providing critical software patches), provide a substantial opportunity for adversaries to exploit new weaknesses discovered in the currently installed components. Exceptions to replacing unsupported system components may include, for example, systems that provide critical mission/business capability where newer technologies are not available or where the systems are so isolated that installing replacement components is not an option.

- PL-2 - SA-3 -
- -

Determine if the organization:

- - SA-22(a) -

replaces information system components when support for the components is no longer available from the developer, vendor, or manufacturer;

-
- - SA-22(b) - - SA-22(b)[1] -

provides justification for the continued use of unsupported system components required to satisfy mission/business needs; and

-
- - SA-22(b)[2] -

documents approval for the continued use of unsupported system components required to satisfy mission/business needs.

-
-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing replacement or continued use of unsupported information system components

-

documented evidence of replacing unsupported information system components

-

documented approvals (including justification) for continued use of unsupported information system components

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility system development life cycle

-

organizational personnel responsible for configuration management

-
-
- - TEST - -

Organizational processes for replacing unsupported system components

-

automated mechanisms supporting and/or implementing replacement of unsupported system components

-
-
- - Alternative Sources for Continued Support - - - - - - - SA-22(1) - -

The organization provides for unsupported information system components.

-
- -

This control enhancement addresses the need to provide continued support for selected information system components that are no longer supported by the original developers, vendors, or manufacturers when such components remain essential to mission/business operations. Organizations can establish in-house support, for example, by developing customized patches for critical software components or secure the services of external providers who through contractual relationships, provide ongoing support for the designated unsupported components. Such contractual relationships can include, for example, Open Source Software value-added vendors.

-
- -

Determine if the organization:

- - SA-22(1)[1] -

defines support from external providers to be provided for unsupported information system components;

-
- - SA-22(1)[2] -

provides and/or obtains support for unsupported information system components from one or more of the following:

- - SA-22(1)[2][a] -

in-house support; and/or

-
- - SA-22(1)[2][b] -

organization-defined support from external providers.

-
-
-
- - EXAMINE - -

System and services acquisition policy

-

procedures addressing support for unsupported information system components

-

solicitation documentation

-

acquisition documentation

-

acquisition contracts

-

service-level agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and services acquisition responsibilities

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility system development life cycle

-

organizational personnel or third-party external providers supporting information system components no longer supported by original developers, vendors, or manufacturers

-
-
- - TEST - -

Organizational processes for supporting system components no longer supported by original developers, vendors, or manufacturers

-

automated mechanisms providing support for system components no longer supported by original developers, vendors, or manufacturers

-
-
-
-
-
- - System and Communications Protection - - System and Communications Protection Policy and Procedures - - - - - - - - - - SC-1 - -

The organization:

- - a. -

Develops, documents, and disseminates to :

- - 1. -

A system and communications protection policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and

-
- - 2. -

Procedures to facilitate the implementation of the system and communications protection policy and associated system and communications protection controls; and

-
-
- - b. -

Reviews and updates the current:

- - 1. -

System and communications protection policy ; and

-
- - 2. -

System and communications protection procedures .

-
-
-
- -

This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the SC family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures.

- PM-9 -
- -

Determine if the organization:

- - SC-1(a) - - SC-1(a)(1) - - SC-1(a)(1)[1] -

develops and documents a system and communications protection policy that addresses:

- - SC-1(a)(1)[1][a] -

purpose;

-
- - SC-1(a)(1)[1][b] -

scope;

-
- - SC-1(a)(1)[1][c] -

roles;

-
- - SC-1(a)(1)[1][d] -

responsibilities;

-
- - SC-1(a)(1)[1][e] -

management commitment;

-
- - SC-1(a)(1)[1][f] -

coordination among organizational entities;

-
- - SC-1(a)(1)[1][g] -

compliance;

-
-
- - SC-1(a)(1)[2] -

defines personnel or roles to whom the system and communications protection policy is to be disseminated;

-
- - SC-1(a)(1)[3] -

disseminates the system and communications protection policy to organization-defined personnel or roles;

-
-
- - SC-1(a)(2) - - SC-1(a)(2)[1] -

develops and documents procedures to facilitate the implementation of the system and communications protection policy and associated system and communications protection controls;

-
- - SC-1(a)(2)[2] -

defines personnel or roles to whom the procedures are to be disseminated;

-
- - SC-1(a)(2)[3] -

disseminates the procedures to organization-defined personnel or roles;

-
-
-
- - SC-1(b) - - SC-1(b)(1) - - SC-1(b)(1)[1] -

defines the frequency to review and update the current system and communications protection policy;

-
- - SC-1(b)(1)[2] -

reviews and updates the current system and communications protection policy with the organization-defined frequency;

-
-
- - SC-1(b)(2) - - SC-1(b)(2)[1] -

defines the frequency to review and update the current system and communications protection procedures; and

-
- - SC-1(b)(2)[2] -

reviews and updates the current system and communications protection procedures with the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

System and communications protection policy and procedures

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and communications protection responsibilities

-

organizational personnel with information security responsibilities

-
-
- - NIST Special Publication 800-12 - - NIST Special Publication 800-100 - -
- - Application Partitioning - SC-2 - -

The information system separates user functionality (including user interface services) from information system management functionality.

-
- -

Information system management functionality includes, for example, functions necessary to administer databases, network components, workstations, or servers, and typically requires privileged user access. The separation of user functionality from information system management functionality is either physical or logical. Organizations implement separation of system management-related functionality from user functionality by using different computers, different central processing units, different instances of operating systems, different network addresses, virtualization techniques, or combinations of these or other methods, as appropriate. This type of separation includes, for example, web administrative interfaces that use separate authentication methods for users of any other information system resources. Separation of system and user functionality may include isolating administrative interfaces on different domains and with additional access controls.

- SA-4 - SA-8 - SC-3 -
- -

Determine if the information system separates user functionality (including user interface services) from information system management functionality.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing application partitioning

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Separation of user functionality from information system management functionality

-
-
- - Interfaces for Non-privileged Users - SC-2(1) - -

The information system prevents the presentation of information system management-related functionality at an interface for non-privileged users.

-
- -

This control enhancement ensures that administration options (e.g., administrator privileges) are not available to general users (including prohibiting the use of the grey-out option commonly used to eliminate accessibility to such information). Such restrictions include, for example, not presenting administration options until users establish sessions with administrator privileges.

- AC-3 -
- -

Determine if the information system prevents the presentation of information system management-related functionality at an interface for non-privileged users.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing application partitioning

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

non-privileged users of the information system

-

system developer

-
-
- - TEST - -

Separation of user functionality from information system management functionality

-
-
-
-
- - Security Function Isolation - SC-3 - -

The information system isolates security functions from nonsecurity functions.

-
- -

The information system isolates security functions from nonsecurity functions by means of an isolation boundary (implemented via partitions and domains). Such isolation controls access to and protects the integrity of the hardware, software, and firmware that perform those security functions. Information systems implement code separation (i.e., separation of security functions from nonsecurity functions) in a number of ways, including, for example, through the provision of security kernels via processor rings or processor modes. For non-kernel code, security function isolation is often achieved through file system protections that serve to protect the code on disk, and address space protections that protect executing code. Information systems restrict access to security functions through the use of access control mechanisms and by implementing least privilege capabilities. While the ideal is for all of the code within the security function isolation boundary to only contain security-relevant code, it is sometimes necessary to include nonsecurity functions within the isolation boundary as an exception.

- AC-3 - AC-6 - SA-4 - SA-5 - SA-8 - SA-13 - SC-2 - SC-7 - SC-39 -
- -

Determine if the information system isolates security functions from nonsecurity functions.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing security function isolation

-

list of security functions to be isolated from nonsecurity functions

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Separation of security functions from nonsecurity functions within the information system

-
-
- - Hardware Separation - SC-3(1) - -

The information system utilizes underlying hardware separation mechanisms to implement security function isolation.

-
- -

Underlying hardware separation mechanisms include, for example, hardware ring architectures, commonly implemented within microprocessors, and hardware-enforced address segmentation used to support logically distinct storage objects with separate attributes (i.e., readable, writeable).

-
- -

Determine if the information system utilizes underlying hardware separation mechanisms to implement security function isolation.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing security function isolation

-

information system design documentation

-

hardware separation mechanisms

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Separation of security functions from nonsecurity functions within the information system

-
-
-
- - Access / Flow Control Functions - SC-3(2) - -

The information system isolates security functions enforcing access and information flow control from nonsecurity functions and from other security functions.

-
- -

Security function isolation occurs as a result of implementation; the functions can still be scanned and monitored. Security functions that are potentially isolated from access and flow control enforcement functions include, for example, auditing, intrusion detection, and anti-virus functions.

-
- -

Determine if the information system isolates security functions enforcing:

- - SC-3(2)[1] -

access control from nonsecurity functions;

-
- - SC-3(2)[2] -

information flow control from nonsecurity functions;

-
- - SC-3(2)[3] -

access control from other security functions; and

-
- - SC-3(2)[4] -

information flow control from other security functions.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing security function isolation

-

list of critical security functions

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Isolation of security functions enforcing access and information flow control

-
-
-
- - Minimize Nonsecurity Functionality - SC-3(3) - -

The organization minimizes the number of nonsecurity functions included within the isolation boundary containing security functions.

-
- -

In those instances where it is not feasible to achieve strict isolation of nonsecurity functions from security functions, it is necessary to take actions to minimize the nonsecurity-relevant functions within the security function boundary. Nonsecurity functions contained within the isolation boundary are considered security-relevant because errors or maliciousness in such software, by virtue of being within the boundary, can impact the security functions of organizational information systems. The design objective is that the specific portions of information systems providing information security are of minimal size/complexity. Minimizing the number of nonsecurity functions in the security-relevant components of information systems allows designers and implementers to focus only on those functions which are necessary to provide the desired security capability (typically access enforcement). By minimizing nonsecurity functions within the isolation boundaries, the amount of code that must be trusted to enforce security policies is reduced, thus contributing to understandability.

-
- -

Determine if the organization implements an information system isolation boundary to minimize the number of nonsecurity functions included within the boundary containing security functions.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing security function isolation

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing an isolation boundary

-
-
-
- - Module Coupling and Cohesiveness - SC-3(4) - -

The organization implements security functions as largely independent modules that maximize internal cohesiveness within modules and minimize coupling between modules.

-
- -

The reduction in inter-module interactions helps to constrain security functions and to manage complexity. The concepts of coupling and cohesion are important with respect to modularity in software design. Coupling refers to the dependencies that one module has on other modules. Cohesion refers to the relationship between the different functions within a particular module. Good software engineering practices rely on modular decomposition, layering, and minimization to reduce and manage complexity, thus producing software modules that are highly cohesive and loosely coupled.

-
- -

Determine if the organization implements security functions as largely independent modules that:

- - SC-3(4)[1] -

maximize internal cohesiveness within modules; and

-
- - SC-3(4)[2] -

minimize coupling between modules.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing security function isolation

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for maximizing internal cohesiveness within modules and minimizing coupling between modules

-

automated mechanisms supporting and/or implementing security functions as independent modules

-
-
-
- - Layered Structures - SC-3(5) - -

The organization implements security functions as a layered structure minimizing interactions between layers of the design and avoiding any dependence by lower layers on the functionality or correctness of higher layers.

-
- -

The implementation of layered structures with minimized interactions among security functions and non-looping layers (i.e., lower-layer functions do not depend on higher-layer functions) further enables the isolation of security functions and management of complexity.

-
- -

Determine if the organization implements security functions as a layered structure:

- - SC-3(5)[1] -

minimizing interactions between layers of the design; and

-
- - SC-3(5)[2] -

avoiding any dependence by lower layers on the functionality or correctness of higher layers.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing security function isolation

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for implementing security functions as a layered structure that minimizes interactions between layers and avoids dependence by lower layers on functionality/correctness of higher layers

-

automated mechanisms supporting and/or implementing security functions as a layered structure

-
-
-
-
- - Information in Shared Resources - SC-4 - -

The information system prevents unauthorized and unintended information transfer via shared system resources.

-
- -

This control prevents information, including encrypted representations of information, produced by the actions of prior users/roles (or the actions of processes acting on behalf of prior users/roles) from being available to any current users/roles (or current processes) that obtain access to shared system resources (e.g., registers, main memory, hard disks) after those resources have been released back to information systems. The control of information in shared resources is also commonly referred to as object reuse and residual information protection. This control does not address: (i) information remanence which refers to residual representation of data that has been nominally erased or removed; (ii) covert channels (including storage and/or timing channels) where shared resources are manipulated to violate information flow restrictions; or (iii) components within information systems for which there are only single users/roles.

- AC-3 - AC-4 - MP-6 -
- -

Determine if the information system prevents unauthorized and unintended information transfer via shared system resources.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing information protection in shared system resources

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Automated mechanisms preventing unauthorized and unintended transfer of information via shared system resources

-
-
- - Security Levels - SC-4(1) - Withdrawn - SC-4 - - - Periods Processing - - - - SC-4(2) - -

The information system prevents unauthorized information transfer via shared resources in accordance with when system processing explicitly switches between different information classification levels or security categories.

-
- -

This control enhancement applies when there are explicit changes in information processing levels during information system operations, for example, during multilevel processing and periods processing with information at different classification levels or security categories. Organization-defined procedures may include, for example, approved sanitization processes for electronically stored information.

-
- -

Determine if:

- - SC-4(2)[1] -

the organization defines procedures to be employed to ensure unauthorized information transfer via shared resources is prevented when system processing explicitly switches between different information classification levels or security categories; and

-
- - SC-4(2)[2] -

the information system prevents unauthorized information transfer via shared resources in accordance with organization-defined procedures when system processing explicitly switches between different information classification levels or security categories.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing information protection in shared system resources

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Automated mechanisms preventing unauthorized transfer of information via shared system resources

-
-
-
-
- - Denial of Service Protection - - - - - - - SC-5 - -

The information system protects against or limits the effects of the following types of denial of service attacks: by employing .

-
- -

A variety of technologies exist to limit, or in some cases, eliminate the effects of denial of service attacks. For example, boundary protection devices can filter certain types of packets to protect information system components on internal organizational networks from being directly affected by denial of service attacks. Employing increased capacity and bandwidth combined with service redundancy may also reduce the susceptibility to denial of service attacks.

- SC-6 - SC-7 -
- -

Determine if:

- - SC-5[1] -

the organization defines types of denial of service attacks or reference to source of such information for the information system to protect against or limit the effects;

-
- - SC-5[2] -

the organization defines security safeguards to be employed by the information system to protect against or limit the effects of organization-defined types of denial of service attacks; and

-
- - SC-5[3] -

the information system protects against or limits the effects of the organization-defined denial or service attacks (or reference to source for such information) by employing organization-defined security safeguards.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing denial of service protection

-

information system design documentation

-

security plan

-

list of denial of services attacks requiring employment of security safeguards to protect against or limit effects of such attacks

-

list of security safeguards protecting against or limiting the effects of denial of service attacks

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with incident response responsibilities

-

system developer

-
-
- - TEST - -

Automated mechanisms protecting against or limiting the effects of denial of service attacks

-
-
- - Restrict Internal Users - - - - SC-5(1) - -

The information system restricts the ability of individuals to launch against other information systems.

-
- -

Restricting the ability of individuals to launch denial of service attacks requires that the mechanisms used for such attacks are unavailable. Individuals of concern can include, for example, hostile insiders or external adversaries that have successfully breached the information system and are using the system as a platform to launch cyber attacks on third parties. Organizations can restrict the ability of individuals to connect and transmit arbitrary information on the transport medium (i.e., network, wireless spectrum). Organizations can also limit the ability of individuals to use excessive information system resources. Protection against individuals having the ability to launch denial of service attacks may be implemented on specific information systems or on boundary devices prohibiting egress to potential target systems.

-
- -

Determine if:

- - SC-5(1)[1] -

the organization defines denial of service attacks for which the information system is required to restrict the ability of individuals to launch such attacks against other information systems; and

-
- - SC-5(1)[2] -

the information system restricts the ability of individuals to launch organization-defined denial of service attacks against other information systems.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing denial of service protection

-

information system design documentation

-

security plan

-

list of denial of service attacks launched by individuals against information systems

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with incident response responsibilities

-

system developer

-
-
- - TEST - -

Automated mechanisms restricting the ability to launch denial of service attacks against other information systems

-
-
-
- - Excess Capacity / Bandwidth / Redundancy - SC-5(2) - -

The information system manages excess capacity, bandwidth, or other redundancy to limit the effects of information flooding denial of service attacks.

-
- -

Managing excess capacity ensures that sufficient capacity is available to counter flooding attacks. Managing excess capacity may include, for example, establishing selected usage priorities, quotas, or partitioning.

-
- -

Determine if the information system, to limit the effects of information flooding denial of service attacks, manages:

- - SC-5(2)[1] -

excess capacity;

-
- - SC-5(2)[2] -

bandwidth; or

-
- - SC-5(2)[3] -

other redundancy.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing denial of service protection

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with incident response responsibilities

-

system developer

-
-
- - TEST - -

Automated mechanisms implementing management of information system bandwidth, capacity, and redundancy to limit the effects of information flooding denial of service attacks

-
-
-
- - Detection / Monitoring - - - - - - - SC-5(3) - -

The organization:

- - (a) -

Employs to detect indicators of denial of service attacks against the information system; and

-
- - (b) -

Monitors to determine if sufficient resources exist to prevent effective denial of service attacks.

-
-
- -

Organizations consider utilization and capacity of information system resources when managing risk from denial of service due to malicious attacks. Denial of service attacks can originate from external or internal sources. Information system resources sensitive to denial of service include, for example, physical disk storage, memory, and CPU cycles. Common safeguards to prevent denial of service attacks related to storage utilization and capacity include, for example, instituting disk quotas, configuring information systems to automatically alert administrators when specific storage capacity thresholds are reached, using file compression technologies to maximize available storage space, and imposing separate partitions for system and user data.

- CA-7 - SI-4 -
- -

Determine if the organization:

- - SC-5(3)(a) - - SC-5(3)(a)[1] -

defines monitoring tools to be employed to detect indicators of denial of service attacks against the information system;

-
- - SC-5(3)(a)[2] -

employs organization-defined monitoring tools to detect indicators of denial of service attacks against the information system;

-
- SC-5(3)(a) -
- - SC-5(3)(b) - - SC-5(3)(b)[1] -

defines information system resources to be monitored to determine if sufficient resources exist to prevent effective denial of service attacks; and

-
- - SC-5(3)(b)[2] -

monitors organization-defined information system resources to determine if sufficient resources exist to prevent effective denial of service attacks.

-
- SC-5(3)(b) -
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing denial of service protection

-

information system design documentation

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with detection and monitoring responsibilities

-
-
- - TEST - -

Automated mechanisms/tools implementing information system monitoring for denial of service attacks

-
-
-
-
- - Resource Availability - - - - - - - - - - SC-6 - -

The information system protects the availability of resources by allocating by .

-
- -

Priority protection helps prevent lower-priority processes from delaying or interfering with the information system servicing any higher-priority processes. Quotas prevent users or processes from obtaining more than predetermined amounts of resources. This control does not apply to information system components for which there are only single users/roles.

-
- -

Determine if:

- - SC-6[1] -

the organization defines resources to be allocated to protect the availability of resources;

-
- - SC-6[2] -

the organization defines security safeguards to be employed to protect the availability of resources;

-
- - SC-6[3] -

the information system protects the availability of resources by allocating organization-defined resources by one or more of the following:

- - SC-6[3][a] -

priority;

-
- - SC-6[3][b] -

quota; and/or

-
- - SC-6[3][c] -

organization-defined safeguards.

-
-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing prioritization of information system resources

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing resource allocation capability

-

safeguards employed to protect availability of resources

-
-
-
- - Boundary Protection - - - - SC-7 - -

The information system:

- - a. -

Monitors and controls communications at the external boundary of the system and at key internal boundaries within the system;

-
- - b. -

Implements subnetworks for publicly accessible system components that are separated from internal organizational networks; and

-
- - c. -

Connects to external networks or information systems only through managed interfaces consisting of boundary protection devices arranged in accordance with an organizational security architecture.

-
-
- -

Managed interfaces include, for example, gateways, routers, firewalls, guards, network-based malicious code analysis and virtualization systems, or encrypted tunnels implemented within a security architecture (e.g., routers protecting firewalls or application gateways residing on protected subnetworks). Subnetworks that are physically or logically separated from internal networks are referred to as demilitarized zones or DMZs. Restricting or prohibiting interfaces within organizational information systems includes, for example, restricting external web traffic to designated web servers within managed interfaces and prohibiting external traffic that appears to be spoofing internal addresses. Organizations consider the shared nature of commercial telecommunications services in the implementation of security controls associated with the use of such services. Commercial telecommunications services are commonly based on network components and consolidated management systems shared by all attached commercial customers, and may also include third party-provided access lines and other service elements. Such transmission services may represent sources of increased risk despite contract security provisions.

- AC-4 - AC-17 - CA-3 - CM-7 - CP-8 - IR-4 - RA-3 - SC-5 - SC-13 -
- -

Determine if the information system:

- - SC-7(a) - - SC-7(a)[1] -

monitors communications at the external boundary of the information system;

-
- - SC-7(a)[2] -

monitors communications at key internal boundaries within the system;

-
- - SC-7(a)[3] -

controls communications at the external boundary of the information system;

-
- - SC-7(a)[4] -

controls communications at key internal boundaries within the system;

-
-
- - SC-7(b) -

implements subnetworks for publicly accessible system components that are either:

- - SC-7(b)[1] -

physically separated from internal organizational networks; and/or

-
- - SC-7(b)[2] -

logically separated from internal organizational networks; and

-
-
- - SC-7(c) -

connects to external networks or information systems only through managed interfaces consisting of boundary protection devices arranged in accordance with an organizational security architecture.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

list of key internal boundaries of the information system

-

information system design documentation

-

boundary protection hardware and software

-

information system configuration settings and associated documentation

-

enterprise security architecture documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Automated mechanisms implementing boundary protection capability

-
-
- - Physically Separated Subnetworks - SC-7(1) - Withdrawn - SC-7 - - - Public Access - SC-7(2) - Withdrawn - SC-7 - - - Access Points - SC-7(3) - -

The organization limits the number of external network connections to the information system.

-
- -

Limiting the number of external network connections facilitates more comprehensive monitoring of inbound and outbound communications traffic. The Trusted Internet Connection (TIC) initiative is an example of limiting the number of external network connections.

-
- -

Determine if the organization limits the number of external network connections to the information system.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

information system design documentation

-

boundary protection hardware and software

-

information system architecture and configuration documentation

-

information system configuration settings and associated documentation

-

communications and network traffic monitoring logs

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Automated mechanisms implementing boundary protection capability

-

automated mechanisms limiting the number of external network connections to the information system

-
-
-
- - External Telecommunications Services - - - - SC-7(4) - -

The organization:

- - (a) -

Implements a managed interface for each external telecommunication service;

-
- - (b) -

Establishes a traffic flow policy for each managed interface;

-
- - (c) -

Protects the confidentiality and integrity of the information being transmitted across each interface;

-
- - (d) -

Documents each exception to the traffic flow policy with a supporting mission/business need and duration of that need; and

-
- - (e) -

Reviews exceptions to the traffic flow policy and removes exceptions that are no longer supported by an explicit mission/business need.

-
-
- - SC-8 - - -

Determine if the organization:

- - SC-7(4)(a) -

implements a managed interface for each external telecommunication service;

- SC-7(4)(a) -
- - SC-7(4)(b) -

establishes a traffic flow policy for each managed interface;

- SC-7(4)(b) -
- - SC-7(4)(c) -

protects the confidentiality and integrity of the information being transmitted across each interface;

- SC-7(4)(c) -
- - SC-7(4)(d) -

documents each exception to the traffic flow policy with:

- - SC-7(4)(d)[1] -

a supporting mission/business need;

-
- - SC-7(4)(d)[2] -

duration of that need;

-
- SC-7(4)(d) -
- - SC-7(4)(e) - - SC-7(4)(e)[1] -

defines a frequency to review exceptions to traffic flow policy;

-
- - SC-7(4)(e)[2] -

reviews exceptions to the traffic flow policy with the organization-defined frequency; and

-
- - SC-7(4)(e)[3] -

removes traffic flow policy exceptions that are no longer supported by an explicit mission/business need

-
- SC-7(4)(e) -
-
- - EXAMINE - -

System and communications protection policy

-

traffic flow policy

-

information flow control policy

-

procedures addressing boundary protection

-

information system security architecture

-

information system design documentation

-

boundary protection hardware and software

-

information system architecture and configuration documentation

-

information system configuration settings and associated documentation

-

records of traffic flow policy exceptions

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Organizational processes for documenting and reviewing exceptions to the traffic flow policy

-

organizational processes for removing exceptions to the traffic flow policy

-

automated mechanisms implementing boundary protection capability

-

managed interfaces implementing traffic flow policy

-
-
-
- - Deny by Default / Allow by Exception - SC-7(5) - -

The information system at managed interfaces denies network communications traffic by default and allows network communications traffic by exception (i.e., deny all, permit by exception).

-
- -

This control enhancement applies to both inbound and outbound network communications traffic. A deny-all, permit-by-exception network communications traffic policy ensures that only those connections which are essential and approved are allowed.

-
- -

Determine if the information system, at managed interfaces:

- - SC-7(5)[1] -

denies network traffic by default; and

-
- - SC-7(5)[2] -

allows network traffic by exception.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Automated mechanisms implementing traffic management at managed interfaces

-
-
-
- - Response to Recognized Failures - SC-7(6) - Withdrawn - SC-7 (18) - - - Prevent Split Tunneling for Remote Devices - SC-7(7) - -

The information system, in conjunction with a remote device, prevents the device from simultaneously establishing non-remote connections with the system and communicating via some other connection to resources in external networks.

-
- -

This control enhancement is implemented within remote devices (e.g., notebook computers) through configuration settings to disable split tunneling in those devices, and by preventing those configuration settings from being readily configurable by users. This control enhancement is implemented within the information system by the detection of split tunneling (or of configuration settings that allow split tunneling) in the remote device, and by prohibiting the connection if the remote device is using split tunneling. Split tunneling might be desirable by remote users to communicate with local information system resources such as printers/file servers. However, split tunneling would in effect allow unauthorized external connections, making the system more vulnerable to attack and to exfiltration of organizational information. The use of VPNs for remote connections, when adequately provisioned with appropriate security controls, may provide the organization with sufficient assurance that it can effectively treat such connections as non-remote connections from the confidentiality and integrity perspective. VPNs thus provide a means for allowing non-remote communications paths from remote devices. The use of an adequately provisioned VPN does not eliminate the need for preventing split tunneling.

-
- -

Determine if the information system, in conjunction with a remote device, prevents the device from simultaneously establishing non-remote connections with the system and communicating via some other connection to resources in external networks.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

information system design documentation

-

information system hardware and software

-

information system architecture

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Automated mechanisms implementing boundary protection capability

-

automated mechanisms supporting/restricting non-remote connections

-
-
-
- - Route Traffic to Authenticated Proxy Servers - - - - - - - SC-7(8) - -

The information system routes to through authenticated proxy servers at managed interfaces.

-
- -

External networks are networks outside of organizational control. A proxy server is a server (i.e., information system or application) that acts as an intermediary for clients requesting information system resources (e.g., files, connections, web pages, or services) from other organizational servers. Client requests established through an initial connection to the proxy server are evaluated to manage complexity and to provide additional protection by limiting direct connectivity. Web content filtering devices are one of the most common proxy servers providing access to the Internet. Proxy servers support logging individual Transmission Control Protocol (TCP) sessions and blocking specific Uniform Resource Locators (URLs), domain names, and Internet Protocol (IP) addresses. Web proxies can be configured with organization-defined lists of authorized and unauthorized websites.

- AC-3 - AU-2 -
- -

Determine if:

- - SC-7(8)[1] -

the organization defines internal communications traffic to be routed to external networks;

-
- - SC-7(8)[2] -

the organization defines external networks to which organization-defined internal communications traffic is to be routed; and

-
- - SC-7(8)[3] -

the information system routes organization-defined internal communications traffic to organization-defined external networks through authenticated proxy servers at managed interfaces.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

information system design documentation

-

information system hardware and software

-

information system architecture

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Automated mechanisms implementing traffic management through authenticated proxy servers at managed interfaces

-
-
-
- - Restrict Threatening Outgoing Communications Traffic - SC-7(9) - -

The information system:

- - (a) -

Detects and denies outgoing communications traffic posing a threat to external information systems; and

-
- - (b) -

Audits the identity of internal users associated with denied communications.

-
-
- -

Detecting outgoing communications traffic from internal actions that may pose threats to external information systems is sometimes termed extrusion detection. Extrusion detection at information system boundaries as part of managed interfaces includes the analysis of incoming and outgoing communications traffic searching for indications of internal threats to the security of external systems. Such threats include, for example, traffic indicative of denial of service attacks and traffic containing malicious code.

- AU-2 - AU-6 - SC-38 - SC-44 - SI-3 - SI-4 -
- -

Determine if the information system:

- - SC-7(9)(a) - - SC-7(9)(a)[1] -

detects outgoing communications traffic posing a threat to external information systems; and

-
- - SC-7(9)(a)[2] -

denies outgoing communications traffic posing a threat to external information systems; and

-
- SC-7(9)(a) -
- - SC-7(9)(b) -

audits the identity of internal users associated with denied communications.

- SC-7(9)(b) -
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

information system design documentation

-

information system hardware and software

-

information system architecture

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Automated mechanisms implementing boundary protection capability

-

automated mechanisms implementing detection and denial of threatening outgoing communications traffic

-

automated mechanisms implementing auditing of outgoing communications traffic

-
-
-
- - Prevent Unauthorized Exfiltration - SC-7(10) - -

The organization prevents the unauthorized exfiltration of information across managed interfaces.

-
- -

Safeguards implemented by organizations to prevent unauthorized exfiltration of information from information systems include, for example: (i) strict adherence to protocol formats; (ii) monitoring for beaconing from information systems; (iii) monitoring for steganography; (iv) disconnecting external network interfaces except when explicitly needed; (v) disassembling and reassembling packet headers; and (vi) employing traffic profile analysis to detect deviations from the volume/types of traffic expected within organizations or call backs to command and control centers. Devices enforcing strict adherence to protocol formats include, for example, deep packet inspection firewalls and XML gateways. These devices verify adherence to protocol formats and specification at the application layer and serve to identify vulnerabilities that cannot be detected by devices operating at the network or transport layers. This control enhancement is closely associated with cross-domain solutions and system guards enforcing information flow requirements.

- SI-3 -
- -

Determine if the organization prevents the unauthorized exfiltration of information across managed interfaces.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Automated mechanisms implementing boundary protection capability

-

preventing unauthorized exfiltration of information across managed interfaces

-
-
-
- - Restrict Incoming Communications Traffic - - - - - - - SC-7(11) - -

The information system only allows incoming communications from to be routed to .

-
- -

This control enhancement provides determinations that source and destination address pairs represent authorized/allowed communications. Such determinations can be based on several factors including, for example, the presence of source/destination address pairs in lists of authorized/allowed communications, the absence of address pairs in lists of unauthorized/disallowed pairs, or meeting more general rules for authorized/allowed source/destination pairs.

- AC-3 -
- -

Determine if:

- - SC-7(11)[1] -

the organization defines internal communications traffic to be routed to external networks;

-
- - SC-7(11)[2] -

the organization defines authorized destinations only to which that incoming communications from organization-defined authorized sources may be routed; and

-
- - SC-7(11)[3] -

the information system only allows incoming communications from organization-defined authorized sources to be routed to organization-defined authorized destinations.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Automated mechanisms implementing boundary protection capabilities with respect to source/destination address pairs

-
-
-
- - Host-based Protection - - - - - - - SC-7(12) - -

The organization implements at .

-
- -

Host-based boundary protection mechanisms include, for example, host-based firewalls. Information system components employing host-based boundary protection mechanisms include, for example, servers, workstations, and mobile devices.

-
- -

Determine if the organization:

- - SC-7(12)[1] -

defines host-based boundary protection mechanisms;

-
- - SC-7(12)[2] -

defines information system components where organization-defined host-based boundary protection mechanisms are to be implemented; and

-
- - SC-7(12)[3] -

implements organization-defined host-based boundary protection mechanisms at organization-defined information system components.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

information system design documentation

-

boundary protection hardware and software

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with boundary protection responsibilities

-

information system users

-
-
- - TEST - -

Automated mechanisms implementing host-based boundary protection capabilities

-
-
-
- - Isolation of Security Tools / Mechanisms / Support Components - - - - SC-7(13) - -

The organization isolates from other internal information system components by implementing physically separate subnetworks with managed interfaces to other components of the system.

-
- -

Physically separate subnetworks with managed interfaces are useful, for example, in isolating computer network defenses from critical operational processing networks to prevent adversaries from discovering the analysis and forensics techniques of organizations.

- SA-8 - SC-2 - SC-3 -
- -

Determine if the organization:

- - SC-7(13)[1] -

defines information security tools, mechanisms, and support components to be isolated from other internal information system components; and

-
- - SC-7(13)[2] -

isolates organization-defined information security tools, mechanisms, and support components from other internal information system components by implementing physically separate subnetworks with managed interfaces to other components of the system.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

information system design documentation

-

information system hardware and software

-

information system architecture

-

information system configuration settings and associated documentation

-

list of security tools and support components to be isolated from other internal information system components

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing isolation of information security tools, mechanisms, and support components

-
-
-
- - Protects Against Unauthorized Physical Connections - - - - SC-7(14) - -

The organization protects against unauthorized physical connections at .

-
- -

Information systems operating at different security categories or classification levels may share common physical and environmental controls, since the systems may share space within organizational facilities. In practice, it is possible that these separate information systems may share common equipment rooms, wiring closets, and cable distribution paths. Protection against unauthorized physical connections can be achieved, for example, by employing clearly identified and physically separated cable trays, connection frames, and patch panels for each side of managed interfaces with physical access controls enforcing limited authorized access to these items.

- PE-4 - PE-19 -
- -

Determine if the organization:

- - SC-7(14)[1] -

defines managed interfaces to be protected against unauthorized physical connections; and

-
- - SC-7(14)[2] -

protects against unauthorized physical connections at organization-defined managed interfaces.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

information system design documentation

-

information system hardware and software

-

information system architecture

-

information system configuration settings and associated documentation

-

facility communications and wiring diagram

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing protection against unauthorized physical connections

-
-
-
- - Route Privileged Network Accesses - SC-7(15) - -

The information system routes all networked, privileged accesses through a dedicated, managed interface for purposes of access control and auditing.

-
- - AC-2 - AC-3 - AU-2 - SI-4 - - -

Determine if the information system routes all networked, privileged accesses through a dedicated, managed interface for the purposes of:

- - SC-7(15)[1] -

access control; and

-
- - SC-7(15)[2] -

auditing.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

information system design documentation

-

information system hardware and software

-

information system architecture

-

information system configuration settings and associated documentation

-

audit logs

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing the routing of networked, privileged access through dedicated managed interfaces

-
-
-
- - Prevent Discovery of Components / Devices - SC-7(16) - -

The information system prevents discovery of specific system components composing a managed interface.

-
- -

This control enhancement protects network addresses of information system components that are part of managed interfaces from discovery through common tools and techniques used to identify devices on networks. Network addresses are not available for discovery (e.g., network address not published or entered in domain name systems), requiring prior knowledge for access. Another obfuscation technique is to periodically change network addresses.

-
- -

Determine if the information system prevents discovery of specific system components composing a managed interface.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

information system design documentation

-

information system hardware and software

-

information system architecture

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing the prevention of discovery of system components at managed interfaces

-
-
-
- - Automated Enforcement of Protocol Formats - SC-7(17) - -

The information system enforces adherence to protocol formats.

-
- -

Information system components that enforce protocol formats include, for example, deep packet inspection firewalls and XML gateways. Such system components verify adherence to protocol formats/specifications (e.g., IEEE) at the application layer and identify significant vulnerabilities that cannot be detected by devices operating at the network or transport layers.

- SC-4 -
- -

Determine if the information system enforces adherence to protocol formats.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

information system design documentation

-

information system architecture

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing enforcement of adherence to protocol formats

-
-
-
- - Fail Secure - SC-7(18) - -

The information system fails securely in the event of an operational failure of a boundary protection device.

-
- -

Fail secure is a condition achieved by employing information system mechanisms to ensure that in the event of operational failures of boundary protection devices at managed interfaces (e.g., routers, firewalls, guards, and application gateways residing on protected subnetworks commonly referred to as demilitarized zones), information systems do not enter into unsecure states where intended security properties no longer hold. Failures of boundary protection devices cannot lead to, or cause information external to the devices to enter the devices, nor can failures permit unauthorized information releases.

- CP-2 - SC-24 -
- -

Determine if the information system fails securely in the event of an operational failure of a boundary protection device.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

information system design documentation

-

information system architecture

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing secure failure

-
-
-
- - Blocks Communication from Non-organizationally Configured Hosts - - - - SC-7(19) - -

The information system blocks both inbound and outbound communications traffic between that are independently configured by end users and external service providers.

-
- -

Communication clients independently configured by end users and external service providers include, for example, instant messaging clients. Traffic blocking does not apply to communication clients that are configured by organizations to perform authorized functions.

-
- -

Determine if the organization:

- - SC-7(19)[1] -

defines communication clients that are independently configured by end users and external service providers; and

-
- - SC-7(19)[2] -

blocks, between organization-defined communication clients that are independently configured by end users and external service providers,:

- - SC-7(19)[2][a] -

inbound communications traffic; and

-
- - SC-7(19)[2][b] -

outbound communications traffic.

-
-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

information system design documentation

-

information system hardware and software

-

information system architecture

-

information system configuration settings and associated documentation

-

list of communication clients independently configured by end users and external service providers

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing the blocking of inbound and outbound communications traffic between communication clients independently configured by end users and external service providers

-
-
-
- - Dynamic Isolation / Segregation - - - - SC-7(20) - -

The information system provides the capability to dynamically isolate/segregate from other components of the system.

-
- -

The capability to dynamically isolate or segregate certain internal components of organizational information systems is useful when it is necessary to partition or separate certain components of dubious origin from those components possessing greater trustworthiness. Component isolation reduces the attack surface of organizational information systems. Isolation of selected information system components is also a means of limiting the damage from successful cyber attacks when those attacks occur.

-
- -

Determine if:

- - SC-7(20)[1] -

the organization defines information system components to be dynamically isolated/segregated from other components of the system; and

-
- - SC-7(20)[2] -

the information system provides the capability to dynamically isolate/segregate organization-defined information system components from other components of the system.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

information system design documentation

-

information system hardware and software

-

information system architecture

-

information system configuration settings and associated documentation

-

list of information system components to be dynamically isolated/segregated from other components of the system

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing the capability to dynamically isolate/segregate information system components

-
-
-
- - Isolation of Information System Components - - - - - - - SC-7(21) - -

The organization employs boundary protection mechanisms to separate supporting .

-
- -

Organizations can isolate information system components performing different missions and/or business functions. Such isolation limits unauthorized information flows among system components and also provides the opportunity to deploy greater levels of protection for selected components. Separating system components with boundary protection mechanisms provides the capability for increased protection of individual components and to more effectively control information flows between those components. This type of enhanced protection limits the potential harm from cyber attacks and errors. The degree of separation provided varies depending upon the mechanisms chosen. Boundary protection mechanisms include, for example, routers, gateways, and firewalls separating system components into physically separate networks or subnetworks, cross-domain devices separating subnetworks, virtualization techniques, and encrypting information flows among system components using distinct encryption keys.

- CA-9 - SC-3 -
- -

Determine if the organization:

- - SC-7(21)[1] -

defines information system components to be separated by boundary protection mechanisms;

-
- - SC-7(21)[2] -

defines missions and/or business functions to be supported by organization-defined information system components separated by boundary protection mechanisms; and

-
- - SC-7(21)[3] -

employs boundary protection mechanisms to separate organization-defined information system components supporting organization-defined missions and/or business functions.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

information system design documentation

-

information system hardware and software

-

enterprise architecture documentation

-

information system architecture

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing the capability to separate information system components supporting organizational missions and/or business functions

-
-
-
- - Separate Subnets for Connecting to Different Security Domains - SC-7(22) - -

The information system implements separate network addresses (i.e., different subnets) to connect to systems in different security domains.

-
- -

Decomposition of information systems into subnets helps to provide the appropriate level of protection for network connections to different security domains containing information with different security categories or classification levels.

-
- -

Determine if the information system implements separate network addresses (i.e., different subnets) to connect to systems in different security domains.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

information system design documentation

-

information system hardware and software

-

information system architecture

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing separate network addresses/different subnets

-
-
-
- - Disable Sender Feedback On Protocol Validation Failure - SC-7(23) - -

The information system disables feedback to senders on protocol format validation failure.

-
- -

Disabling feedback to senders when there is a failure in protocol validation format prevents adversaries from obtaining information which would otherwise be unavailable.

-
- -

Determine if the information system disables feedback to senders on protocol format validation failure.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing boundary protection

-

information system design documentation

-

information system hardware and software

-

information system architecture

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with boundary protection responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing the disabling of feedback to senders on protocol format validation failure

-
-
-
- - FIPS Publication 199 - - NIST Special Publication 800-41 - - NIST Special Publication 800-77 - -
- - Transmission Confidentiality and Integrity - - - - SC-8 - -

The information system protects the of transmitted information.

-
- -

This control applies to both internal and external networks and all types of information system components from which information can be transmitted (e.g., servers, mobile devices, notebook computers, printers, copiers, scanners, facsimile machines). Communication paths outside the physical protection of a controlled boundary are exposed to the possibility of interception and modification. Protecting the confidentiality and/or integrity of organizational information can be accomplished by physical means (e.g., by employing protected distribution systems) or by logical means (e.g., employing encryption techniques). Organizations relying on commercial providers offering transmission services as commodity services rather than as fully dedicated services (i.e., services which can be highly specialized to individual customer needs), may find it difficult to obtain the necessary assurances regarding the implementation of needed security controls for transmission confidentiality/integrity. In such situations, organizations determine what types of confidentiality/integrity services are available in standard, commercial telecommunication service packages. If it is infeasible or impractical to obtain the necessary security controls and assurances of control effectiveness through appropriate contracting vehicles, organizations implement appropriate compensating security controls or explicitly accept the additional risk.

- AC-17 - PE-4 -
- -

Determine if the information system protects one or more of the following:

- - SC-8[1] -

confidentiality of transmitted information; and/or

-
- - SC-8[2] -

integrity of transmitted information.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing transmission confidentiality and integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing transmission confidentiality and/or integrity

-
-
- - Cryptographic or Alternate Physical Protection - - - - - - - SC-8(1) - -

The information system implements cryptographic mechanisms to during transmission unless otherwise protected by .

-
- -

Encrypting information for transmission protects information from unauthorized disclosure and modification. Cryptographic mechanisms implemented to protect information integrity include, for example, cryptographic hash functions which have common application in digital signatures, checksums, and message authentication codes. Alternative physical security safeguards include, for example, protected distribution systems.

- SC-13 -
- -

Determine if:

- - SC-8(1)[1] -

the organization defines physical safeguards to be implemented to protect information during transmission when cryptographic mechanisms are not implemented; and

-
- - SC-8(1)[2] -

the information system implements cryptographic mechanisms to do one or more of the following during transmission unless otherwise protected by organization-defined alternative physical safeguards:

- - SC-8(1)[2][a] -

prevent unauthorized disclosure of information; and/or

-
- - SC-8(1)[2][b] -

detect changes to information.

-
-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing transmission confidentiality and integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Cryptographic mechanisms supporting and/or implementing transmission confidentiality and/or integrity

-

automated mechanisms supporting and/or implementing alternative physical safeguards

-

organizational processes for defining and implementing alternative physical safeguards

-
-
-
- - Pre / Post Transmission Handling - - - - SC-8(2) - -

The information system maintains the of information during preparation for transmission and during reception.

-
- -

Information can be either unintentionally or maliciously disclosed or modified during preparation for transmission or during reception including, for example, during aggregation, at protocol transformation points, and during packing/unpacking. These unauthorized disclosures or modifications compromise the confidentiality or integrity of the information.

- AU-10 -
- -

Determine if the information system maintains one or more of the following:

- - SC-8(2)[1] -

confidentiality of information during preparation for transmission;

-
- - SC-8(2)[2] -

confidentiality of information during reception; and/or

-
- - SC-8(2)[3] -

integrity of information during preparation for transmission;

-
- - SC-8(2)[4] -

integrity of information during reception.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing transmission confidentiality and integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing transmission confidentiality and/or integrity

-
-
-
- - Cryptographic Protection for Message Externals - - - - SC-8(3) - -

The information system implements cryptographic mechanisms to protect message externals unless otherwise protected by .

-
- -

This control enhancement addresses protection against unauthorized disclosure of information. Message externals include, for example, message headers/routing information. This control enhancement prevents the exploitation of message externals and applies to both internal and external networks or links that may be visible to individuals who are not authorized users. Header/routing information is sometimes transmitted unencrypted because the information is not properly identified by organizations as having significant value or because encrypting the information can result in lower network performance and/or higher costs. Alternative physical safeguards include, for example, protected distribution systems.

- SC-12 - SC-13 -
- -

Determine if:

- - SC-8(3)[1] -

the organization defines alternative physical safeguards to be implemented to protect message externals; and

-
- - SC-8(3)[2] -

the information system implements cryptographic mechanisms to protect message externals unless otherwise protected by organization-defined alternative physical safeguards.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing transmission confidentiality and integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Cryptographic mechanisms supporting and/or implementing transmission confidentiality and/or integrity for message externals

-

automated mechanisms supporting and/or implementing alternative physical safeguards

-

organizational processes for defining and implementing alternative physical safeguards

-
-
-
- - Conceal / Randomize Communications - - - - SC-8(4) - -

The information system implements cryptographic mechanisms to conceal or randomize communication patterns unless otherwise protected by .

-
- -

This control enhancement addresses protection against unauthorized disclosure of information. Communication patterns include, for example, frequency, periods, amount, and predictability. Changes to communications patterns can reveal information having intelligence value especially when combined with other available information related to missions/business functions supported by organizational information systems. This control enhancement prevents the derivation of intelligence based on communications patterns and applies to both internal and external networks or links that may be visible to individuals who are not authorized users. Encrypting the links and transmitting in continuous, fixed/random patterns prevents the derivation of intelligence from the system communications patterns. Alternative physical safeguards include, for example, protected distribution systems.

- SC-12 - SC-13 -
- -

Determine if:

- - SC-8(4)[1] -

the organization defines alternative physical safeguards to be implemented to protect against unauthorized disclosure of communication patterns;

-
- - SC-8(4)[2] -

the information system, unless otherwise protected by organization-defined alternative physical safeguards, implements cryptographic mechanisms to:

- - SC-8(4)[2][a] -

conceal communication patterns; or

-
- - SC-8(4)[2][b] -

randomize communication patterns.

-
-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing transmission confidentiality and integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Cryptographic mechanisms supporting and/or implementing concealment or randomization of communications patterns

-

automated mechanisms supporting and/or implementing alternative physical safeguards

-

organizational processes for defining and implementing alternative physical safeguards

-
-
-
- - FIPS Publication 140-2 - - FIPS Publication 197 - - NIST Special Publication 800-52 - - NIST Special Publication 800-77 - - NIST Special Publication 800-81 - - NIST Special Publication 800-113 - - CNSS Policy 15 - - NSTISSI No. 7003 - -
- - Transmission Confidentiality - SC-9 - Withdrawn - SC-8 - - - Network Disconnect - - - - SC-10 - -

The information system terminates the network connection associated with a communications session at the end of the session or after of inactivity.

-
- -

This control applies to both internal and external networks. Terminating network connections associated with communications sessions include, for example, de-allocating associated TCP/IP address/port pairs at the operating system level, or de-allocating networking assignments at the application level if multiple application sessions are using a single, operating system-level network connection. Time periods of inactivity may be established by organizations and include, for example, time periods by type of network access or for specific network accesses.

-
- -

Determine if:

- - SC-10[1] -

the organization defines a time period of inactivity after which the information system terminates a network connection associated with a communications session; and

-
- - SC-10[2] -

the information system terminates the network connection associated with a communication session at the end of the session or after the organization-defined time period of inactivity.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing network disconnect

-

information system design documentation

-

security plan

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing network disconnect capability

-
-
-
- - Trusted Path - - - - SC-11 - -

The information system establishes a trusted communications path between the user and the following security functions of the system: .

-
- -

Trusted paths are mechanisms by which users (through input devices) can communicate directly with security functions of information systems with the requisite assurance to support information security policies. The mechanisms can be activated only by users or the security functions of organizational information systems. User responses via trusted paths are protected from modifications by or disclosure to untrusted applications. Organizations employ trusted paths for high-assurance connections between security functions of information systems and users (e.g., during system logons). Enforcement of trusted communications paths is typically provided via an implementation that meets the reference monitor concept.

- AC-16 - AC-25 -
- -

Determine if:

- - SC-11[1] -

the organization defines security functions of the information system;

-
- - SC-11[2] -

the organization-defined security functions include at a minimum, information system authentication and re-authentication; and

-
- - SC-11[3] -

the information system establishes a trusted communications path between the user and the organization-defined security functions of the system.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing trusted communications paths

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

assessment results from independent, testing organizations

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing trusted communications paths

-
-
- - Logical Isolation - SC-11(1) - -

The information system provides a trusted communications path that is logically isolated and distinguishable from other paths.

-
- -

Determine if the information system provides a trusted communications path that is:

- - SC-11(1)[1] -

logically isolated; and

-
- - SC-11(1)[2] -

distinguishable from other paths.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing trusted communications paths

-

security plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

assessment results from independent, testing organizations

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing trusted communications paths

-
-
-
-
- - Cryptographic Key Establishment and Management - - - - SC-12 - -

The organization establishes and manages cryptographic keys for required cryptography employed within the information system in accordance with .

-
- -

Cryptographic key management and establishment can be performed using manual procedures or automated mechanisms with supporting manual procedures. Organizations define key management requirements in accordance with applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance, specifying appropriate options, levels, and parameters. Organizations manage trust stores to ensure that only approved trust anchors are in such trust stores. This includes certificates with visibility external to organizational information systems and certificates related to the internal operations of systems.

- SC-13 - SC-17 -
- -

Determine if the organization:

- - SC-12[1] -

defines requirements for cryptographic key:

- - SC-12[1][a] -

generation;

-
- - SC-12[1][b] -

distribution;

-
- - SC-12[1][c] -

storage;

-
- - SC-12[1][d] -

access;

-
- - SC-12[1][e] -

destruction; and

-
-
- - SC-12[2] -

establishes and manages cryptographic keys for required cryptography employed within the information system in accordance with organization-defined requirements for key generation, distribution, storage, access, and destruction.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing cryptographic key establishment and management

-

information system design documentation

-

cryptographic mechanisms

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibilities for cryptographic key establishment and/or management

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing cryptographic key establishment and management

-
-
- - Availability - SC-12(1) - -

The organization maintains availability of information in the event of the loss of cryptographic keys by users.

-
- -

Escrowing of encryption keys is a common practice for ensuring availability in the event of loss of keys (e.g., due to forgotten passphrase).

-
- -

Determine if the organization maintains availability of information in the event of the loss of cryptographic keys by users.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing cryptographic key establishment, management, and recovery

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibilities for cryptographic key establishment or management

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing cryptographic key establishment and management

-
-
-
- - Symmetric Keys - - - - SC-12(2) - -

The organization produces, controls, and distributes symmetric cryptographic keys using key management technology and processes.

-
- -

Determine if the organization produces, controls, and distributes symmetric cryptographic keys using one of the following:

- - SC-12(2)[1] -

NIST FIPS-compliant key management technology and processes; or

-
- - SC-12(2)[2] -

NSA-approved key management technology and processes.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing cryptographic key establishment and management

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of FIPS validated cryptographic products

-

list of NSA-approved cryptographic products

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with responsibilities for cryptographic key establishment or management

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing symmetric cryptographic key establishment and management

-
-
-
- - Asymmetric Keys - - - - SC-12(3) - -

The organization produces, controls, and distributes asymmetric cryptographic keys using .

-
- -

Determine if the organization produces, controls, and distributes asymmetric cryptographic keys using one of the following:

- - SC-12(3)[1] -

NSA-approved key management technology and processes;

-
- - SC-12(3)[2] -

approved PKI Class 3 certificates or prepositioned keying material; or

-
- - SC-12(3)[3] -

approved PKI Class 3 or Class 4 certificates and hardware security tokens that protect the user’s private key.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing cryptographic key establishment and management

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of NSA-approved cryptographic products

-

list of approved PKI Class 3 and Class 4 certificates

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with responsibilities for cryptographic key establishment or management

-

organizational personnel with responsibilities for PKI certificates

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing asymmetric cryptographic key establishment and management

-
-
-
- - PKI Certificates - SC-12(4) - Withdrawn - SC-12 - - - PKI Certificates / Hardware Tokens - SC-12(5) - Withdrawn - SC-12 - - - NIST Special Publication 800-56 - - NIST Special Publication 800-57 - -
- - Cryptographic Protection - - - - SC-13 - -

The information system implements in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, and standards.

-
- -

Cryptography can be employed to support a variety of security solutions including, for example, the protection of classified and Controlled Unclassified Information, the provision of digital signatures, and the enforcement of information separation when authorized individuals have the necessary clearances for such information but lack the necessary formal access approvals. Cryptography can also be used to support random number generation and hash generation. Generally applicable cryptographic standards include FIPS-validated cryptography and NSA-approved cryptography. This control does not impose any requirements on organizations to use cryptography. However, if cryptography is required based on the selection of other security controls, organizations define each type of cryptographic use and the type of cryptography required (e.g., protection of classified information: NSA-approved cryptography; provision of digital signatures: FIPS-validated cryptography).

- AC-2 - AC-3 - AC-7 - AC-17 - AC-18 - AU-9 - AU-10 - CM-11 - CP-9 - IA-3 - IA-7 - MA-4 - MP-2 - MP-4 - MP-5 - SA-4 - SC-8 - SC-12 - SC-28 - SI-7 -
- -

Determine if:

- - SC-13[1] -

the organization defines cryptographic uses; and

-
- - SC-13[2] -

the organization defines the type of cryptography required for each use; and

-
- - SC-13[3] -

the information system implements the organization-defined cryptographic uses and type of cryptography required for each use in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, and standards.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing cryptographic protection

-

information system design documentation

-

information system configuration settings and associated documentation

-

cryptographic module validation certificates

-

list of FIPS validated cryptographic modules

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with responsibilities for cryptographic protection

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing cryptographic protection

-
-
- - Fips-validated Cryptography - SC-13(1) - Withdrawn - SC-13 - - - Nsa-approved Cryptography - SC-13(2) - Withdrawn - SC-13 - - - Individuals Without Formal Access Approvals - SC-13(3) - Withdrawn - SC-13 - - - Digital Signatures - SC-13(4) - Withdrawn - SC-13 - - - FIPS Publication 140 - - http://csrc.nist.gov/cryptval - - http://www.cnss.gov - -
- - Public Access Protections - SC-14 - Withdrawn - AC-2 - AC-3 - AC-5 - AC-6 - SI-3 - SI-4 - SI-5 - SI-7 - SI-10 - - - Collaborative Computing Devices - - - - SC-15 - -

The information system:

- - a. -

Prohibits remote activation of collaborative computing devices with the following exceptions: ; and

-
- - b. -

Provides an explicit indication of use to users physically present at the devices.

-
-
- -

Collaborative computing devices include, for example, networked white boards, cameras, and microphones. Explicit indication of use includes, for example, signals to users when collaborative computing devices are activated.

- AC-21 -
- -

Determine if:

- - SC-15(a) - - SC-15(a)[1] -

the organization defines exceptions where remote activation of collaborative computing devices is to be allowed;

-
- - SC-15(a)[2] -

the information system prohibits remote activation of collaborative computing devices, except for organization-defined exceptions where remote activation is to be allowed; and

-
-
- - SC-15(b) -

the information system provides an explicit indication of use to users physically present at the devices.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing collaborative computing

-

access control policy and procedures

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with responsibilities for managing collaborative computing devices

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing management of remote activation of collaborative computing devices

-

automated mechanisms providing an indication of use of collaborative computing devices

-
-
- - Physical Disconnect - SC-15(1) - -

The information system provides physical disconnect of collaborative computing devices in a manner that supports ease of use.

-
- -

Failing to physically disconnect from collaborative computing devices can result in subsequent compromises of organizational information. Providing easy methods to physically disconnect from such devices after a collaborative computing session helps to ensure that participants actually carry out the disconnect activity without having to go through complex and tedious procedures.

-
- -

Determine if the information system provides physical disconnect of collaborative computing devices in a manner that supports ease of use.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing collaborative computing

-

access control policy and procedures

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with responsibilities for managing collaborative computing devices

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing physical disconnect of collaborative computing devices

-
-
-
- - Blocking Inbound / Outbound Communications Traffic - SC-15(2) - Withdrawn - SC-7 - - - Disabling / Removal in Secure Work Areas - - - - - - - SC-15(3) - -

The organization disables or removes collaborative computing devices from in .

-
- -

Failing to disable or remove collaborative computing devices from information systems or information system components can result in subsequent compromises of organizational information including, for example, eavesdropping on conversations.

-
- -

Determine if the organization:

- - SC-15(3)[1] -

defines information systems or information system components from which collaborative computing devices are to be disabled or removed;

-
- - SC-15(3)[2] -

defines secure work areas where collaborative computing devices are to be disabled or removed from information systems or information system components placed in such work areas; and

-
- - SC-15(3)[3] -

disables or removes collaborative computing devices from organization-defined information systems or information system components in organization-defined secure work areas.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing collaborative computing

-

access control policy and procedures

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of secure work areas

-

information systems or information system components in secured work areas where collaborative computing devices are to be disabled or removed

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibilities for managing collaborative computing devices

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing the capability to disable collaborative computing devices

-
-
-
- - Explicitly Indicate Current Participants - - - - SC-15(4) - -

The information system provides an explicit indication of current participants in .

-
- -

This control enhancement helps to prevent unauthorized individuals from participating in collaborative computing sessions without the explicit knowledge of other participants.

-
- -

Determine if:

- - SC-15(4)[1] -

the organization defines online meetings and teleconferences for which an explicit indication of current participants is to be provided; and

-
- - SC-15(4)[2] -

the information system provides an explicit indication of current participants in organization-defined meetings and teleconferences.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing collaborative computing

-

access control policy and procedures

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

list of types of meetings and teleconferences requiring explicit indication of current participants

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibilities for managing collaborative computing devices

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing the capability to indicate participants on collaborative computing devices

-
-
-
-
- - Transmission of Security Attributes - - - - SC-16 - -

The information system associates with information exchanged between information systems and between system components.

-
- -

Security attributes can be explicitly or implicitly associated with the information contained in organizational information systems or system components.

- AC-3 - AC-4 - AC-16 -
- -

Determine if:

- - SC-16[1] -

the organization defines security attributes to be associated with information exchanged:

- - SC-16[1][a] -

between information systems;

-
- - SC-16[1][b] -

between system components;

-
-
- - SC-16[2] -

the information system associates organization-defined security attributes with information exchanged:

- - SC-16[2][a] -

between information systems; and

-
- - SC-16[2][b] -

between system components.

-
-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing transmission of security attributes

-

access control policy and procedures

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing transmission of security attributes between information systems

-
-
- - Integrity Validation - SC-16(1) - -

The information system validates the integrity of transmitted security attributes.

-
- -

This control enhancement ensures that the verification of the integrity of transmitted information includes security attributes.

- AU-10 - SC-8 -
- -

Determine if the information system validates the integrity of transmitted security attributes.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing transmission of security attributes

-

access control policy and procedures

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing validation of the integrity of transmitted security attributes

-
-
-
-
- - Public Key Infrastructure Certificates - - - - SC-17 - -

The organization issues public key certificates under an or obtains public key certificates from an approved service provider.

-
- -

For all certificates, organizations manage information system trust stores to ensure only approved trust anchors are in the trust stores. This control addresses both certificates with visibility external to organizational information systems and certificates related to the internal operations of systems, for example, application-specific time services.

- SC-12 -
- -

Determine if the organization:

- - SC-17[1] -

defines a certificate policy for issuing public key certificates;

-
- - SC-17[2] -

issues public key certificates:

- - SC-17[2][a] -

under an organization-defined certificate policy: or

-
- - SC-17[2][b] -

obtains public key certificates from an approved service provider.

-
-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing public key infrastructure certificates

-

public key certificate policy or policies

-

public key issuing process

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibilities for issuing public key certificates

-

service providers

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing the management of public key infrastructure certificates

-
-
- - OMB Memorandum 05-24 - - NIST Special Publication 800-32 - - NIST Special Publication 800-63 - -
- - Mobile Code - SC-18 - -

The organization:

- - a. -

Defines acceptable and unacceptable mobile code and mobile code technologies;

-
- - b. -

Establishes usage restrictions and implementation guidance for acceptable mobile code and mobile code technologies; and

-
- - c. -

Authorizes, monitors, and controls the use of mobile code within the information system.

-
-
- -

Decisions regarding the employment of mobile code within organizational information systems are based on the potential for the code to cause damage to the systems if used maliciously. Mobile code technologies include, for example, Java, JavaScript, ActiveX, Postscript, PDF, Shockwave movies, Flash animations, and VBScript. Usage restrictions and implementation guidance apply to both the selection and use of mobile code installed on servers and mobile code downloaded and executed on individual workstations and devices (e.g., smart phones). Mobile code policy and procedures address preventing the development, acquisition, or introduction of unacceptable mobile code within organizational information systems.

- AU-2 - AU-12 - CM-2 - CM-6 - SI-3 -
- -

Determine if the organization:

- - SC-18(a) -

defines acceptable and unacceptable mobile code and mobile code technologies;

-
- - SC-18(b) - - SC-18(b)[1] -

establishes usage restrictions for acceptable mobile code and mobile code technologies;

-
- - SC-18(b)[2] -

establishes implementation guidance for acceptable mobile code and mobile code technologies;

-
-
- - SC-18(c) - - SC-18(c)[1] -

authorizes the use of mobile code within the information system;

-
- - SC-18(c)[2] -

monitors the use of mobile code within the information system; and

-
- - SC-18(c)[3] -

controls the use of mobile code within the information system.

-
-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing mobile code

-

mobile code usage restrictions, mobile code implementation policy and procedures

-

list of acceptable mobile code and mobile code technologies

-

list of unacceptable mobile code and mobile technologies

-

authorization records

-

information system monitoring records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibilities for managing mobile code

-
-
- - TEST - -

Organizational process for controlling, authorizing, monitoring, and restricting mobile code

-

automated mechanisms supporting and/or implementing the management of mobile code

-

automated mechanisms supporting and/or implementing the monitoring of mobile code

-
-
- - Identify Unacceptable Code / Take Corrective Actions - - - - - - - SC-18(1) - -

The information system identifies and takes .

-
- -

Corrective actions when unacceptable mobile code is detected include, for example, blocking, quarantine, or alerting administrators. Blocking includes, for example, preventing transmission of word processing files with embedded macros when such macros have been defined to be unacceptable mobile code.

-
- -

Determine if:

- - SC-18(1)[1] -

the organization defines unacceptable mobile code to be identified by the information system;

-
- - SC-18(1)[2] -

the organization defines correctives actions to be taken when the information system identifies organization-defined unacceptable mobile code;

-
- - SC-18(1)[3] -

the information system:

- - SC-18(1)[3][a] -

identifies organization-defined unacceptable mobile code; and

-
- - SC-18(1)[3][b] -

takes organization-defined corrective actions.

-
-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing mobile code

-

mobile code usage restrictions, mobile code implementation policy and procedures

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of unacceptable mobile code

-

list of corrective actions to be taken when unacceptable mobile code is identified

-

information system monitoring records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with responsibilities for managing mobile code

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing mobile code detection, inspection, and corrective capability

-
-
-
- - Acquisition / Development / Use - - - - SC-18(2) - -

The organization ensures that the acquisition, development, and use of mobile code to be deployed in the information system meets .

-
- -

Determine if the organization:

- - SC-18(2)[1] -

defines requirements for:

- - SC-18(2)[1][a] -

the acquisition of mobile code;

-
- - SC-18(2)[1][b] -

the development of mobile code;

-
- - SC-18(2)[1][c] -

the use of mobile code; and

-
-
- - SC-18(2)[2] -

ensures that the acquisition, development, and use of mobile code to be deployed in the information system meets organization-defined mobile code requirements.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing mobile code

-

mobile code requirements

-

mobile code usage restrictions, mobile code implementation policy and procedures

-

acquisition documentation

-

acquisition contracts for information system, system component, or information system service

-

system development life cycle documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibilities for managing mobile code

-

organizational personnel with acquisition and contracting responsibilities

-
-
- - TEST - -

Organizational processes for the acquisition, development, and use of mobile code

-
-
-
- - Prevent Downloading / Execution - - - - SC-18(3) - -

The information system prevents the download and execution of .

-
- -

Determine if:

- - SC-18(3)[1] -

the organization defines unacceptable mobile code to be prevented from downloading and execution;

-
- - SC-18(3)[2] -

the information system prevents the:

- - SC-18(3)[2][a] -

download of organization-defined unacceptable mobile code; and

-
- - SC-18(3)[2][b] -

execution of organization-defined unacceptable mobile code.

-
-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing mobile code

-

mobile code usage restrictions, mobile code implementation policy and procedures

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with responsibilities for managing mobile code

-
-
- - TEST - -

Automated mechanisms preventing download and execution of unacceptable mobile code

-
-
-
- - Prevent Automatic Execution - - - - - - - SC-18(4) - -

The information system prevents the automatic execution of mobile code in and enforces prior to executing the code.

-
- -

Actions enforced before executing mobile code, include, for example, prompting users prior to opening electronic mail attachments. Preventing automatic execution of mobile code includes, for example, disabling auto execute features on information system components employing portable storage devices such as Compact Disks (CDs), Digital Video Disks (DVDs), and Universal Serial Bus (USB) devices.

-
- -

Determine if:

- - SC-18(4)[1] -

the organization defines software applications in which the automatic execution of mobile code is to be prohibited;

-
- - SC-18(4)[2] -

the organization defines actions to be enforced by the information system prior to executing mobile code;

-
- - SC-18(4)[3] -

the information system prevents the automatic execution of mobile code in the organization-defined software applications; and

-
- - SC-18(4)[4] -

the information system enforces organization-defined actions prior to executing the code.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing mobile code

-

mobile code usage restrictions

-

mobile code implementation policy and procedures

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of software applications for which automatic execution of mobile code must be prohibited

-

list of actions required before execution of mobile code

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with responsibilities for managing mobile code

-
-
- - TEST - -

Automated mechanisms preventing automatic execution of unacceptable mobile code

-

automated mechanisms enforcing actions to be taken prior to the execution of the mobile code

-
-
-
- - Allow Execution Only in Confined Environments - SC-18(5) - -

The organization allows execution of permitted mobile code only in confined virtual machine environments.

-
- -

Determine if the organization allows execution of permitted mobile code only in confined virtual machine environments.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing mobile code

-

mobile code usage allowances

-

mobile code usage restrictions

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of confined virtual machine environments for which execution of organizationally-acceptable mobile code is allowed

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel with responsibilities for managing mobile code

-
-
- - TEST - -

Automated mechanisms allowing execution of permitted mobile code in confined virtual machine environments

-
-
-
- - NIST Special Publication 800-28 - - DoD Instruction 8552.01 - -
- - Voice Over Internet Protocol - SC-19 - -

The organization:

- - a. -

Establishes usage restrictions and implementation guidance for Voice over Internet Protocol (VoIP) technologies based on the potential to cause damage to the information system if used maliciously; and

-
- - b. -

Authorizes, monitors, and controls the use of VoIP within the information system.

-
-
- - CM-6 - SC-7 - SC-15 - - -

Determine if the organization:

- - SC-19(a) - - SC-19(a)[1] -

establishes usage restrictions for Voice over Internet Protocol (VoIP) technologies based on the potential to cause damage to the information system if used maliciously;

-
- - SC-19(a)[2] -

establishes implementation guidance for Voice over Internet Protocol (VoIP) technologies based on the potential to cause damage to the information system if used maliciously;

-
-
- - SC-19(b) - - SC-19(b)[1] -

authorizes the use of VoIP within the information system;

-
- - SC-19(b)[2] -

monitors the use of VoIP within the information system; and

-
- - SC-19(b)[3] -

controls the use of VoIP within the information system.

-
-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing VoIP

-

VoIP usage restrictions

-

VoIP implementation guidance

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system monitoring records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibilities for managing VoIP

-
-
- - TEST - -

Organizational process for authorizing, monitoring, and controlling VoIP

-

automated mechanisms supporting and/or implementing authorizing, monitoring, and controlling VoIP

-
-
- - NIST Special Publication 800-58 - -
- - Secure Name / Address Resolution Service (authoritative Source) - SC-20 - -

The information system:

- - a. -

Provides additional data origin authentication and integrity verification artifacts along with the authoritative name resolution data the system returns in response to external name/address resolution queries; and

-
- - b. -

Provides the means to indicate the security status of child zones and (if the child supports secure resolution services) to enable verification of a chain of trust among parent and child domains, when operating as part of a distributed, hierarchical namespace.

-
-
- -

This control enables external clients including, for example, remote Internet clients, to obtain origin authentication and integrity verification assurances for the host/service name to network address resolution information obtained through the service. Information systems that provide name and address resolution services include, for example, domain name system (DNS) servers. Additional artifacts include, for example, DNS Security (DNSSEC) digital signatures and cryptographic keys. DNS resource records are examples of authoritative data. The means to indicate the security status of child zones includes, for example, the use of delegation signer resource records in the DNS. The DNS security controls reflect (and are referenced from) OMB Memorandum 08-23. Information systems that use technologies other than the DNS to map between host/service names and network addresses provide other means to assure the authenticity and integrity of response data.

- AU-10 - SC-8 - SC-12 - SC-13 - SC-21 - SC-22 -
- -

Determine if the information system:

- - SC-20(a) -

provides additional data origin and integrity verification artifacts along with the authoritative name resolution data the system returns in response to external name/address resolution queries;

-
- - SC-20(b) -

provides the means to, when operating as part of a distributed, hierarchical namespace:

- - SC-20(b)[1] -

indicate the security status of child zones; and

-
- - SC-20(b)[2] -

enable verification of a chain of trust among parent and child domains (if the child supports secure resolution services).

-
-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing secure name/address resolution service (authoritative source)

-

information system design documentation

-

information system configuration settings and associated documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibilities for managing DNS

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing secure name/address resolution service

-
-
- - Child Subspaces - SC-20(1) - Withdrawn - SC-20 - - - Data Origin / Integrity - SC-20(2) - -

The information system provides data origin and integrity protection artifacts for internal name/address resolution queries.

-
- -

Determine if the information system provides data origin and integrity protection artifacts for internal name/address resolution queries.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing secure name/address resolution service (authoritative source)

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibilities for managing DNS

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing data origin and integrity protection for internal name/address resolution service queries

-
-
-
- - OMB Memorandum 08-23 - - NIST Special Publication 800-81 - -
- - Secure Name / Address Resolution Service (recursive or Caching Resolver) - SC-21 - -

The information system requests and performs data origin authentication and data integrity verification on the name/address resolution responses the system receives from authoritative sources.

-
- -

Each client of name resolution services either performs this validation on its own, or has authenticated channels to trusted validation providers. Information systems that provide name and address resolution services for local clients include, for example, recursive resolving or caching domain name system (DNS) servers. DNS client resolvers either perform validation of DNSSEC signatures, or clients use authenticated channels to recursive resolvers that perform such validations. Information systems that use technologies other than the DNS to map between host/service names and network addresses provide other means to enable clients to verify the authenticity and integrity of response data.

- SC-20 - SC-22 -
- -

Determine if the information system:

- - SC-21[1] -

requests data origin authentication on the name/address resolution responses the system receives from authoritative sources;

-
- - SC-21[2] -

requests data integrity verification on the name/address resolution responses the system receives from authoritative sources;

-
- - SC-21[3] -

performs data origin authentication on the name/address resolution responses the system receives from authoritative sources; and

-
- - SC-21[4] -

performs data integrity verification on the name/address resolution responses the system receives from authoritative sources.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing secure name/address resolution service (recursive or caching resolver)

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibilities for managing DNS

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing data origin authentication and data integrity verification for name/address resolution services

-
-
- - Data Origin / Integrity - SC-21(1) - Withdrawn - SC-21 - - - NIST Special Publication 800-81 - -
- - Architecture and Provisioning for Name / Address Resolution Service - SC-22 - -

The information systems that collectively provide name/address resolution service for an organization are fault-tolerant and implement internal/external role separation.

-
- -

Information systems that provide name and address resolution services include, for example, domain name system (DNS) servers. To eliminate single points of failure and to enhance redundancy, organizations employ at least two authoritative domain name system servers, one configured as the primary server and the other configured as the secondary server. Additionally, organizations typically deploy the servers in two geographically separated network subnetworks (i.e., not located in the same physical facility). For role separation, DNS servers with internal roles only process name and address resolution requests from within organizations (i.e., from internal clients). DNS servers with external roles only process name and address resolution information requests from clients external to organizations (i.e., on external networks including the Internet). Organizations specify clients that can access authoritative DNS servers in particular roles (e.g., by address ranges, explicit lists).

- SC-2 - SC-20 - SC-21 - SC-24 -
- -

Determine if the information systems that collectively provide name/address resolution service for an organization:

- - SC-22[1] -

are fault tolerant; and

-
- - SC-22[2] -

implement internal/external role separation.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing architecture and provisioning for name/address resolution service

-

access control policy and procedures

-

information system design documentation

-

assessment results from independent, testing organizations

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibilities for managing DNS

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing name/address resolution service for fault tolerance and role separation

-
-
- - NIST Special Publication 800-81 - -
- - Session Authenticity - SC-23 - -

The information system protects the authenticity of communications sessions.

-
- -

This control addresses communications protection at the session, versus packet level (e.g., sessions in service-oriented architectures providing web-based services) and establishes grounds for confidence at both ends of communications sessions in ongoing identities of other parties and in the validity of information transmitted. Authenticity protection includes, for example, protecting against man-in-the-middle attacks/session hijacking and the insertion of false information into sessions.

- SC-8 - SC-10 - SC-11 -
- -

Determine if the information system protects the authenticity of communications sessions.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing session authenticity

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing session authenticity

-
-
- - Invalidate Session Identifiers at Logout - SC-23(1) - -

The information system invalidates session identifiers upon user logout or other session termination.

-
- -

This control enhancement curtails the ability of adversaries from capturing and continuing to employ previously valid session IDs.

-
- -

Determine if the information system invalidates session identifiers upon user logout or other session termination.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing session authenticity

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing session identifier invalidation upon session termination

-
-
-
- - User-initiated Logouts / Message Displays - SC-23(2) - Withdrawn - AC-12 (1) - - - Unique Session Identifiers with Randomization - - - - SC-23(3) - -

The information system generates a unique session identifier for each session with and recognizes only session identifiers that are system-generated.

-
- -

This control enhancement curtails the ability of adversaries from reusing previously valid session IDs. Employing the concept of randomness in the generation of unique session identifiers helps to protect against brute-force attacks to determine future session identifiers.

- SC-13 -
- -

Determine if:

- - SC-23(3)[1] -

the organization defines randomness requirements for generating a unique session identifier for each session;

-
- - SC-23(3)[2] -

the information system generates a unique session identifier for each session with organization-defined randomness requirements; and

-
- - SC-23(3)[3] -

the information system recognizes only session identifiers that are system-generated.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing session authenticity

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing generating and monitoring unique session identifiers

-

automated mechanisms supporting and/or implementing randomness requirements

-
-
-
- - Unique Session Identifiers with Randomization - SC-23(4) - Withdrawn - SC-23 (3) - - - Allowed Certificate Authorities - - - - SC-23(5) - -

The information system only allows the use of for verification of the establishment of protected sessions.

-
- -

Reliance on certificate authorities (CAs) for the establishment of secure sessions includes, for example, the use of Secure Socket Layer (SSL) and/or Transport Layer Security (TLS) certificates. These certificates, after verification by the respective certificate authorities, facilitate the establishment of protected sessions between web clients and web servers.

- SC-13 -
- -

Determine if:

- - SC-23(5)[1] -

the organization defines certificate authorities to be allowed for verification of the establishment of protected sessions; and

-
- - SC-23(5)[2] -

the information system only allows the use of organization-defined certificate authorities for verification of the establishment of protected sessions.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing session authenticity

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of certificate authorities allowed for verification of the establishment of protected sessions

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing management of certificate authorities

-
-
-
- - NIST Special Publication 800-52 - - NIST Special Publication 800-77 - - NIST Special Publication 800-95 - -
- - Fail in Known State - - - - - - - - - - SC-24 - -

The information system fails to a for preserving in failure.

-
- -

Failure in a known state addresses security concerns in accordance with the mission/business needs of organizations. Failure in a known secure state helps to prevent the loss of confidentiality, integrity, or availability of information in the event of failures of organizational information systems or system components. Failure in a known safe state helps to prevent systems from failing to a state that may cause injury to individuals or destruction to property. Preserving information system state information facilitates system restart and return to the operational mode of organizations with less disruption of mission/business processes.

- CP-2 - CP-10 - CP-12 - SC-7 - SC-22 -
- -

Determine if:

- - SC-24[1] -

the organization defines a known-state to which the information system is to fail in the event of a system failure;

-
- - SC-24[2] -

the organization defines types of failures for which the information system is to fail to an organization-defined known-state;

-
- - SC-24[3] -

the organization defines system state information to be preserved in the event of a system failure;

-
- - SC-24[4] -

the information system fails to the organization-defined known-state for organization-defined types of failures; and

-
- - SC-24[5] -

the information system preserves the organization-defined system state information in the event of a system failure.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing information system failure to known state

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of failures requiring information system to fail in a known state

-

state information to be preserved in system failure

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing fail-in-known state capability

-

automated mechanisms preserving system state information in the event of a system failure

-
-
-
- - Thin Nodes - - - - SC-25 - -

The organization employs with minimal functionality and information storage.

-
- -

The deployment of information system components with reduced/minimal functionality (e.g., diskless nodes and thin client technologies) reduces the need to secure every user endpoint, and may reduce the exposure of information, information systems, and services to cyber attacks.

- SC-30 -
- -

Determine if the organization:

- - SC-25[1] -

defines information system components to be employed with minimal functionality and information storage; and

-
- - SC-25[2] -

employs organization-defined information system components with minimal functionality and information storage.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing use of thin nodes

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing thin nodes

-
-
-
- - Honeypots - SC-26 - -

The information system includes components specifically designed to be the target of malicious attacks for the purpose of detecting, deflecting, and analyzing such attacks.

-
- -

A honeypot is set up as a decoy to attract adversaries and to deflect their attacks away from the operational systems supporting organizational missions/business function. Depending upon the specific usage of the honeypot, consultation with the Office of the General Counsel before deployment may be needed.

- SC-30 - SC-44 - SI-3 - SI-4 -
- -

Determine if the information system includes components specifically designed to be the target of malicious attacks for the purpose of detecting, deflecting, and analyzing such attacks.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing use of honeypots

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing honey pots

-
-
- - Detection of Malicious Code - SC-26(1) - Withdrawn - SC-35 - -
- - Platform-independent Applications - - - - SC-27 - -

The information system includes: .

-
- -

Platforms are combinations of hardware and software used to run software applications. Platforms include: (i) operating systems; (ii) the underlying computer architectures, or (iii) both. Platform-independent applications are applications that run on multiple platforms. Such applications promote portability and reconstitution on different platforms, increasing the availability of critical functions within organizations while information systems with specific operating systems are under attack.

- SC-29 -
- -

Determine if:

- - SC-27[1] -

the organization defines platform-independent applications; and

-
- - SC-27[2] -

the information system includes organization-defined platform-independent applications.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing platform-independent applications

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of platform-independent applications

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing platform-independent applications

-
-
-
- - Protection of Information at Rest - - - - - - - SC-28 - -

The information system protects the of .

-
- -

This control addresses the confidentiality and integrity of information at rest and covers user information and system information. Information at rest refers to the state of information when it is located on storage devices as specific components of information systems. System-related information requiring protection includes, for example, configurations or rule sets for firewalls, gateways, intrusion detection/prevention systems, filtering routers, and authenticator content. Organizations may employ different mechanisms to achieve confidentiality and integrity protections, including the use of cryptographic mechanisms and file share scanning. Integrity protection can be achieved, for example, by implementing Write-Once-Read-Many (WORM) technologies. Organizations may also employ other security controls including, for example, secure off-line storage in lieu of online storage when adequate protection of information at rest cannot otherwise be achieved and/or continuous monitoring to identify malicious code at rest.

- AC-3 - AC-6 - CA-7 - CM-3 - CM-5 - CM-6 - PE-3 - SC-8 - SC-13 - SI-3 - SI-7 -
- -

Determine if:

- - SC-28[1] -

the organization defines information at rest requiring one or more of the following:

- - SC-28[1][a] -

confidentiality protection; and/or

-
- - SC-28[1][b] -

integrity protection;

-
-
- - SC-28[2] -

the information system protects:

- - SC-28[2][a] -

the confidentiality of organization-defined information at rest; and/or

-
- - SC-28[2][b] -

the integrity of organization-defined information at rest.

-
-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing protection of information at rest

-

information system design documentation

-

information system configuration settings and associated documentation

-

cryptographic mechanisms and associated configuration documentation

-

list of information at rest requiring confidentiality and integrity protections

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing confidentiality and integrity protections for information at rest

-
-
- - Cryptographic Protection - - - - - - - SC-28(1) - -

The information system implements cryptographic mechanisms to prevent unauthorized disclosure and modification of on .

-
- -

Selection of cryptographic mechanisms is based on the need to protect the confidentiality and integrity of organizational information. The strength of mechanism is commensurate with the security category and/or classification of the information. This control enhancement applies to significant concentrations of digital media in organizational areas designated for media storage and also to limited quantities of media generally associated with information system components in operational environments (e.g., portable storage devices, mobile devices). Organizations have the flexibility to either encrypt all information on storage devices (i.e., full disk encryption) or encrypt specific data structures (e.g., files, records, or fields). Organizations employing cryptographic mechanisms to protect information at rest also consider cryptographic key management solutions.

- AC-19 - SC-12 -
- -

Determine if:

- - SC-28(1)[1] -

the organization defines information requiring cryptographic protection;

-
- - SC-28(1)[2] -

the organization defines information system components with organization-defined information requiring cryptographic protection; and

-
- - SC-28(1)[3] -

the information system employs cryptographic mechanisms to prevent unauthorized disclosure and modification of organization-defined information on organization-defined information system components.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing protection of information at rest

-

information system design documentation

-

information system configuration settings and associated documentation

-

cryptographic mechanisms and associated configuration documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Cryptographic mechanisms implementing confidentiality and integrity protections for information at rest

-
-
-
- - Off-line Storage - - - - SC-28(2) - -

The organization removes from online storage and stores off-line in a secure location .

-
- -

Removing organizational information from online information system storage to off-line storage eliminates the possibility of individuals gaining unauthorized access to the information through a network. Therefore, organizations may choose to move information to off-line storage in lieu of protecting such information in online storage.

-
- -

Determine if the organization:

- - SC-28(2)[1] -

defines information to be removed from online storage and stored off-line in a secure location; and

-
- - SC-28(2)[2] -

removes organization-defined information from online storage; and

-
- - SC-28(2)[3] -

stores such information off-line in a secure location.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing protection of information at rest

-

information system design documentation

-

information system configuration settings and associated documentation

-

cryptographic mechanisms and associated configuration documentation

-

off-line storage locations for information at rest

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing removal of information from online storage

-

automated mechanisms supporting and/or implementing storage of information off-line

-
-
-
- - NIST Special Publication 800-56 - - NIST Special Publication 800-57 - - NIST Special Publication 800-111 - -
- - Heterogeneity - - - - SC-29 - -

The organization employs a diverse set of information technologies for in the implementation of the information system.

-
- -

Increasing the diversity of information technologies within organizational information systems reduces the impact of potential exploitations of specific technologies and also defends against common mode failures, including those failures induced by supply chain attacks. Diversity in information technologies also reduces the likelihood that the means adversaries use to compromise one information system component will be equally effective against other system components, thus further increasing the adversary work factor to successfully complete planned cyber attacks. An increase in diversity may add complexity and management overhead which could ultimately lead to mistakes and unauthorized configurations.

- SA-12 - SA-14 - SC-27 -
- -

Determine if the organization:

- - SC-29[1] -

defines information system components requiring a diverse set of information technologies to be employed in the implementation of the information system; and

-
- - SC-29[2] -

employs a diverse set of information technologies for organization-defined information system components in the implementation of the information system.

-
-
- - EXAMINE - -

System and communications protection policy

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of technologies deployed in the information system

-

acquisition documentation

-

acquisition contracts for information system components or services

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with information system acquisition, development, and implementation responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing employment of a diverse set of information technologies

-
-
- - Virtualization Techniques - - - - SC-29(1) - -

The organization employs virtualization techniques to support the deployment of a diversity of operating systems and applications that are changed .

-
- -

While frequent changes to operating systems and applications pose configuration management challenges, the changes can result in an increased work factor for adversaries in order to carry out successful cyber attacks. Changing virtual operating systems or applications, as opposed to changing actual operating systems/applications, provide virtual changes that impede attacker success while reducing configuration management efforts. In addition, virtualization techniques can assist organizations in isolating untrustworthy software and/or software of dubious provenance into confined execution environments.

-
- -

Determine if the organization:

- - SC-29(1)[1] -

defines a frequency to change the diversity of operating systems and applications deployed using virtualization techniques; and

-
- - SC-29(1)[2] -

employs virtualization techniques to support the deployment of a diversity of operating systems and applications that are changed with the organization-defined frequency.

-
-
- - EXAMINE - -

System and communications protection policy

-

configuration management policy and procedures

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system architecture

-

list of operating systems and applications deployed using virtualization techniques

-

change control records

-

configuration management records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibilities for implementing approved virtualization techniques to the information system

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing employment of a diverse set of information technologies

-

automated mechanisms supporting and/or implementing virtualization techniques

-
-
-
-
- - Concealment and Misdirection - - - - - - - - - - SC-30 - -

The organization employs for at to confuse and mislead adversaries.

-
- -

Concealment and misdirection techniques can significantly reduce the targeting capability of adversaries (i.e., window of opportunity and available attack surface) to initiate and complete cyber attacks. For example, virtualization techniques provide organizations with the ability to disguise information systems, potentially reducing the likelihood of successful attacks without the cost of having multiple platforms. Increased use of concealment/misdirection techniques including, for example, randomness, uncertainty, and virtualization, may sufficiently confuse and mislead adversaries and subsequently increase the risk of discovery and/or exposing tradecraft. Concealment/misdirection techniques may also provide organizations additional time to successfully perform core missions and business functions. Because of the time and effort required to support concealment/misdirection techniques, it is anticipated that such techniques would be used by organizations on a very limited basis.

- SC-26 - SC-29 - SI-14 -
- -

Determine if the organization:

- - SC-30[1] -

defines concealment and misdirection techniques to be employed to confuse and mislead adversaries potentially targeting organizational information systems;

-
- - SC-30[2] -

defines information systems for which organization-defined concealment and misdirection techniques are to be employed;

-
- - SC-30[3] -

defines time periods to employ organization-defined concealment and misdirection techniques for organization-defined information systems; and

-
- - SC-30[4] -

employs organization-defined concealment and misdirection techniques for organization-defined information systems at organization-defined time periods to confuse and mislead adversaries.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing concealment and misdirection techniques for the information system

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system architecture

-

list of concealment and misdirection techniques to be employed for organizational information systems

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for implementing concealment and misdirection techniques for information systems

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing concealment and misdirection techniques

-
-
- - Virtualization Techniques - SC-30(1) - Withdrawn - SC-29 (1) - - - Randomness - - - - SC-30(2) - -

The organization employs to introduce randomness into organizational operations and assets.

-
- -

Randomness introduces increased levels of uncertainty for adversaries regarding the actions organizations take in defending against cyber attacks. Such actions may impede the ability of adversaries to correctly target information resources of organizations supporting critical missions/business functions. Uncertainty may also cause adversaries to hesitate before initiating or continuing attacks. Misdirection techniques involving randomness include, for example, performing certain routine actions at different times of day, employing different information technologies (e.g., browsers, search engines), using different suppliers, and rotating roles and responsibilities of organizational personnel.

-
- -

Determine if the organization:

- - SC-30(2)[1] -

defines techniques to be employed to introduce randomness into organizational operations and assets; and

-
- - SC-30(2)[2] -

employs organization-defined techniques to introduce randomness into organizational operations and assets.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing concealment and misdirection techniques for the information system

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system architecture

-

list of techniques to be employed to introduce randomness into organizational operations and assets

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for implementing concealment and misdirection techniques for information systems

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing randomness as a concealment and misdirection technique

-
-
-
- - Change Processing / Storage Locations - - - - - - - - - - SC-30(3) - -

The organization changes the location of - ].

-
- -

Adversaries target critical organizational missions/business functions and the information resources supporting those missions and functions while at the same time, trying to minimize exposure of their existence and tradecraft. The static, homogeneous, and deterministic nature of organizational information systems targeted by adversaries, make such systems more susceptible to cyber attacks with less adversary cost and effort to be successful. Changing organizational processing and storage locations (sometimes referred to as moving target defense) addresses the advanced persistent threat (APT) using techniques such as virtualization, distributed processing, and replication. This enables organizations to relocate the information resources (i.e., processing and/or storage) supporting critical missions and business functions. Changing locations of processing activities and/or storage sites introduces uncertainty into the targeting activities by adversaries. This uncertainty increases the work factor of adversaries making compromises or breaches to organizational information systems much more difficult and time-consuming, and increases the chances that adversaries may inadvertently disclose aspects of tradecraft while attempting to locate critical organizational resources.

-
- -

Determine if the organization:

- - SC-30(3)[1] -

defines processing and/or storage locations to be changed at time intervals specified by the organization;

-
- - SC-30(3)[2] -

defines a frequency to change the location of organization-defined processing and/or storage; and

-
- - SC-30(3)[3] -

changes the location of organization-defined processing and/or storage at one of the following:

- - SC-30(3)[3][a] -

organization-defined time intervals; or

-
- - SC-30(3)[3][b] -

random time intervals.

-
-
-
- - EXAMINE - -

System and communications protection policy

-

configuration management policy and procedures

-

procedures addressing concealment and misdirection techniques for the information system

-

list of processing/storage locations to be changed at organizational time intervals

-

change control records

-

configuration management records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for changing processing and/or storage locations

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing changing processing and/or storage locations

-
-
-
- - Misleading Information - - - - SC-30(4) - -

The organization employs realistic, but misleading information in with regard to its security state or posture.

-
- -

This control enhancement misleads potential adversaries regarding the nature and extent of security safeguards deployed by organizations. As a result, adversaries may employ incorrect (and as a result ineffective) attack techniques. One way of misleading adversaries is for organizations to place misleading information regarding the specific security controls deployed in external information systems that are known to be accessed or targeted by adversaries. Another technique is the use of deception nets (e.g., honeynets, virtualized environments) that mimic actual aspects of organizational information systems but use, for example, out-of-date software configurations.

-
- -

Determine if the organization:

- - SC-30(4)[1] -

defines information system components in which to employ realistic, but misleading information regarding its security state or posture; and

-
- - SC-30(4)[2] -

employs realistic, but misleading information in organization-defined information system components with regard to its security state or posture.

-
-
- - EXAMINE - -

System and communications protection policy

-

configuration management policy and procedures

-

procedures addressing concealment and misdirection techniques for the information system

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for defining and employing realistic, but misleading information about the security posture of information system components

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing employment of realistic, but misleading information about the security posture of information system components

-
-
-
- - Concealment of System Components - - - - - - - SC-30(5) - -

The organization employs to hide or conceal .

-
- -

By hiding, disguising, or otherwise concealing critical information system components, organizations may be able to decrease the probability that adversaries target and successfully compromise those assets. Potential means for organizations to hide and/or conceal information system components include, for example, configuration of routers or the use of honeynets or virtualization techniques.

-
- -

Determine if the organization:

- - SC-30(5)[1] -

defines techniques to be employed to hide or conceal information system components;

-
- - SC-30(5)[2] -

defines information system components to be hidden or concealed using organization-defined techniques; and

-
- - SC-30(5)[3] -

employs organization-defined techniques to hide or conceal organization-defined information system components.

-
-
- - EXAMINE - -

System and communications protection policy

-

configuration management policy and procedures

-

procedures addressing concealment and misdirection techniques for the information system

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of techniques employed to hide or conceal information system components

-

list of information system components to be hidden or concealed

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with responsibility for concealment of system components

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing techniques for concealment of system components

-
-
-
-
- - Covert Channel Analysis - - - - SC-31 - -

The organization:

- - a. -

Performs a covert channel analysis to identify those aspects of communications within the information system that are potential avenues for covert channels; and

-
- - b. -

Estimates the maximum bandwidth of those channels.

-
-
- -

Developers are in the best position to identify potential areas within systems that might lead to covert channels. Covert channel analysis is a meaningful activity when there is the potential for unauthorized information flows across security domains, for example, in the case of information systems containing export-controlled information and having connections to external networks (i.e., networks not controlled by organizations). Covert channel analysis is also meaningful for multilevel secure (MLS) information systems, multiple security level (MSL) systems, and cross-domain systems.

- AC-3 - AC-4 - PL-2 -
- -

Determine if the organization:

- - SC-31(a) -

performs a covert channel analysis to identify those aspects of communications within the information system that are potential avenues for one or more of the following:

- - SC-31(a)[1] -

covert storage channels; and/or

-
- - SC-31(a)[2] -

covert timing channels; and

-
-
- - SC-31(b) -

estimates the maximum bandwidth of those channels.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing covert channel analysis

-

information system design documentation

-

information system configuration settings and associated documentation

-

covert channel analysis documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with covert channel analysis responsibilities

-

information system developers/integrators

-
-
- - TEST - -

Organizational process for conducting covert channel analysis

-

automated mechanisms supporting and/or implementing covert channel analysis

-

automated mechanisms supporting and/or implementing the capability to estimate the bandwidth of covert channels

-
-
- - Test Covert Channels for Exploitability - SC-31(1) - -

The organization tests a subset of the identified covert channels to determine which channels are exploitable.

-
- -

Determine if the organization tests a subset of identified covert channels to determine which channels are exploitable.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing covert channel analysis

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of covert channels

-

covert channel analysis documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with covert channel analysis responsibilities

-
-
- - TEST - -

Organizational process for testing covert channels

-

automated mechanisms supporting and/or implementing testing of covert channels analysis

-
-
-
- - Maximum Bandwidth - - - - - - - SC-31(2) - -

The organization reduces the maximum bandwidth for identified covert channels to .

-
- -

Information system developers are in the best position to reduce the maximum bandwidth for identified covert storage and timing channels.

-
- -

Determine if the organization:

- - SC-31(2)[1] -

defines values to be employed as the maximum bandwidth allowed for identified covert channels; and

-
- - SC-31(2)[2] -

reduces the maximum bandwidth to organization-defined values for one or more of the following identified:

- - SC-31(2)[2][a] -

covert storage channels; and/or

-
- - SC-31(2)[2][b] -

covert timing channels.

-
-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing covert channel analysis

-

acquisition contracts for information systems or services

-

acquisition documentation

-

information system design documentation

-

information system configuration settings and associated documentation

-

covert channel analysis documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with covert channel analysis responsibilities

-

information system developers/integrators

-
-
- - TEST - -

Organizational process for conducting covert channel analysis

-

automated mechanisms supporting and/or implementing covert channel analysis

-

automated mechanisms supporting and/or implementing the capability to reduce the bandwidth of covert channels

-
-
-
- - Measure Bandwidth in Operational Environments - - - - SC-31(3) - -

The organization measures the bandwidth of in the operational environment of the information system.

-
- -

This control enhancement addresses covert channel bandwidth in operational environments versus developmental environments. Measuring covert channel bandwidth in operational environments helps organizations to determine how much information can be covertly leaked before such leakage adversely affects organizational missions/business functions. Covert channel bandwidth may be significantly different when measured in those settings that are independent of the particular environments of operation (e.g., laboratories or development environments).

-
- -

Determine if the organization:

- - SC-31(3)[1] -

defines subset of identified covert channels whose bandwidth is to be measured in the operational environment of the information system; and

-
- - SC-31(3)[2] -

measures the bandwidth of the organization-defined subset of identified covert channels in the operational environment of the information system.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing covert channel analysis

-

information system design documentation

-

information system configuration settings and associated documentation

-

covert channel analysis documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel with covert channel analysis responsibilities

-

information system developers/integrators

-
-
- - TEST - -

Organizational process for conducting covert channel analysis

-

automated mechanisms supporting and/or implementing covert channel analysis

-

automated mechanisms supporting and/or implementing the capability to measure the bandwidth of covert channels

-
-
-
-
- - Information System Partitioning - - - - - - - SC-32 - -

The organization partitions the information system into residing in separate physical domains or environments based on .

-
- -

Information system partitioning is a part of a defense-in-depth protection strategy. Organizations determine the degree of physical separation of system components from physically distinct components in separate racks in the same room, to components in separate rooms for the more critical components, to more significant geographical separation of the most critical components. Security categorization can guide the selection of appropriate candidates for domain partitioning. Managed interfaces restrict or prohibit network access and information flow among partitioned information system components.

- AC-4 - SA-8 - SC-2 - SC-3 - SC-7 -
- -

Determine if the organization:

- - SC-32[1] -

defines circumstances for physical separation of information system components into information system partitions;

-
- - SC-32[2] -

defines information system components to reside in separate physical domains or environments based on organization-defined circumstances for physical separation of components; and

-
- - SC-32[3] -

partitions the information system into organization-defined information system components residing in separate physical domains or environments based on organization-defined circumstances for physical separation of components.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing information system partitioning

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system architecture

-

list of information system physical domains (or environments)

-

information system facility diagrams

-

information system network diagrams

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

information system developers/integrators

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing physical separation of information system components

-
-
- - FIPS Publication 199 - -
- - Transmission Preparation Integrity - SC-33 - Withdrawn - SC-8 - - - Non-modifiable Executable Programs - - - - - - - SC-34 - -

The information system at :

- - a. -

Loads and executes the operating environment from hardware-enforced, read-only media; and

-
- - b. -

Loads and executes from hardware-enforced, read-only media.

-
-
- -

The term operating environment is defined as the specific code that hosts applications, for example, operating systems, executives, or monitors including virtual machine monitors (i.e., hypervisors). It can also include certain applications running directly on hardware platforms. Hardware-enforced, read-only media include, for example, Compact Disk-Recordable (CD-R)/Digital Video Disk-Recordable (DVD-R) disk drives and one-time programmable read-only memory. The use of non-modifiable storage ensures the integrity of software from the point of creation of the read-only image. The use of reprogrammable read-only memory can be accepted as read-only media provided: (i) integrity can be adequately protected from the point of initial writing to the insertion of the memory into the information system; and (ii) there are reliable hardware protections against reprogramming the memory while installed in organizational information systems.

- AC-3 - SI-7 -
- -

Determine if:

- - SC-34[1] -

the organization defines information system components for which the operating environment and organization-defined applications are to be loaded and executed from hardware-enforced, read-only media;

-
- - SC-34[2] -

the organization defines applications to be loaded and executed from hardware-enforced, read-only media;

-
- - SC-34[3] -

the information system, at organization-defined information system components:

- - SC-34[3](a) -

loads and executes the operating environment from hardware-enforced, read-only media; and

-
- - SC-34[3](b) -

loads and executes organization-defined applications from hardware-enforced, read-only media.

-
-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing non-modifiable executable programs

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system architecture

-

list of operating system components to be loaded from hardware-enforced, read-only media

-

list of applications to be loaded from hardware-enforced, read-only media

-

media used to load and execute information system operating environment

-

media used to load and execute information system applications

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel installing, configuring, and/or maintaining the information system

-

information system developers/integrators

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing loading and executing the operating environment from hardware-enforced, read-only media

-

automated mechanisms supporting and/or implementing loading and executing applications from hardware-enforced, read-only media

-
-
- - No Writable Storage - - - - SC-34(1) - -

The organization employs with no writeable storage that is persistent across component restart or power on/off.

-
- -

This control enhancement: (i) eliminates the possibility of malicious code insertion via persistent, writeable storage within the designated information system components; and (ii) applies to both fixed and removable storage, with the latter being addressed directly or as specific restrictions imposed through access controls for mobile devices.

- AC-19 - MP-7 -
- -

Determine if the organization:

- - SC-34(1)[1] -

defines information system components to be employed with no writeable storage; and

-
- - SC-34(1)[2] -

employs organization-defined information system components with no writeable storage that is persistent across component restart or power on/off.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing non-modifiable executable programs

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system architecture

-

list of information system components to be employed without writeable storage capability

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

information system developers/integrators

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing employment of components with no writeable storage

-

automated mechanisms supporting and/or implementing persistent non-writeable storage across component restart and power on/off

-
-
-
- - Integrity Protection / Read-only Media - SC-34(2) - -

The organization protects the integrity of information prior to storage on read-only media and controls the media after such information has been recorded onto the media.

-
- -

Security safeguards prevent the substitution of media into information systems or the reprogramming of programmable read-only media prior to installation into the systems. Security safeguards include, for example, a combination of prevention, detection, and response.

- AC-5 - CM-3 - CM-5 - CM-9 - MP-2 - MP-4 - MP-5 - SA-12 - SC-28 - SI-3 -
- -

Determine if the organization:

- - SC-34(2)[1] -

protects the integrity of the information prior to storage on read-only media; and

-
- - SC-34(2)[2] -

controls the media after such information has been recorded onto the media.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing non-modifiable executable programs

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system architecture

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

information system developers/integrators

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing capability for protecting information integrity on read-only media prior to storage and after information has been recorded onto the media

-
-
-
- - Hardware-based Protection - - - - - - - SC-34(3) - -

The organization:

- - (a) -

Employs hardware-based, write-protect for ; and

-
- - (b) -

Implements specific procedures for to manually disable hardware write-protect for firmware modifications and re-enable the write-protect prior to returning to operational mode.

-
-
- -

Determine if the organization:

- - SC-34(3)(a) - - SC-34(3)(a)[1] -

defines information system firmware components for which hardware-based, write-protection is to be employed;

-
- - SC-34(3)(a)[2] -

employs hardware-based, write-protection for organization-defined information system firmware components;

-
- SC-34(3)(a) -
- - SC-34(3)(b) - - SC-34(3)(b)[1] -

defines individuals authorized to manually disable hardware write-protect for firmware modifications and re-enable the write-protect prior to returning to operational mode; and

-
- - SC-34(3)(b)[2] -

implements specific procedures for organization-defined authorized individuals to manually disable hardware write-protect for firmware modifications and re-enable the write-protect prior to returning to operational mode.

-
- SC-34(3)(b) -
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing firmware modifications

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system architecture

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

information system developers/integrators

-
-
- - TEST - -

Organizational processes for modifying firmware

-

automated mechanisms supporting and/or implementing hardware-based, write-protection for firmware

-
-
-
-
- - Honeyclients - SC-35 - -

The information system includes components that proactively seek to identify malicious websites and/or web-based malicious code.

-
- -

Honeyclients differ from honeypots in that the components actively probe the Internet in search of malicious code (e.g., worms) contained on external websites. As with honeypots, honeyclients require some supporting isolation measures (e.g., virtualization) to ensure that any malicious code discovered during the search and subsequently executed does not infect organizational information systems.

- SC-26 - SC-44 - SI-3 - SI-4 -
- -

Determine if the information system includes components that proactively seek to identify malicious websites and/or web-based malicious code.

-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing honeyclients

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system components deployed to identify malicious websites and/or web-based malicious code

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel installing, configuring, and/or maintaining the information system

-

information system developers/integrators

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing honeyclients

-
-
-
- - Distributed Processing and Storage - - - - SC-36 - -

The organization distributes across multiple physical locations.

-
- -

Distributing processing and storage across multiple physical locations provides some degree of redundancy or overlap for organizations, and therefore increases the work factor of adversaries to adversely impact organizational operations, assets, and individuals. This control does not assume a single primary processing or storage location, and thus allows for parallel processing and storage.

- CP-6 - CP-7 -
- -

Determine if the organization:

- - SC-36[1] -

defines processing and storage to be distributed across multiple physical locations; and

-
- - SC-36[2] -

distributes organization-defined processing and storage across multiple physical locations.

-
-
- - EXAMINE - -

System and communications protection policy

-

contingency planning policy and procedures

-

contingency plan

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system architecture

-

list of information system physical locations (or environments) with distributed processing and storage

-

information system facility diagrams

-

processing site agreements

-

storage site agreements

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with contingency planning and plan implementation responsibilities

-

information system developers/integrators

-
-
- - TEST - -

Organizational processes for distributing processing and storage across multiple physical locations

-

automated mechanisms supporting and/or implementing capability for distributing processing and storage across multiple physical locations

-
-
- - Polling Techniques - - - - SC-36(1) - -

The organization employs polling techniques to identify potential faults, errors, or compromises to .

-
- -

Distributed processing and/or storage may be employed to reduce opportunities for adversaries to successfully compromise the confidentiality, integrity, or availability of information and information systems. However, distribution of processing and/or storage components does not prevent adversaries from compromising one (or more) of the distributed components. Polling compares the processing results and/or storage content from the various distributed components and subsequently voting on the outcomes. Polling identifies potential faults, errors, or compromises in distributed processing and/or storage components.

- SI-4 -
- -

Determine if the organization:

- - SC-36(1)[1] -

defines distributed processing and storage components for which polling techniques are to be employed to identify potential faults, errors, or compromises; and

-
- - SC-36(1)[2] -

employs polling techniques to identify potential faults, errors, or compromises to organization-defined distributed processing and storage components.

-
-
- - EXAMINE - -

System and communications protection policy

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system architecture

-

list of distributed processing and storage components subject to polling

-

information system polling techniques and associated documentation or records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

information system developers/integrators

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing polling techniques

-
-
-
-
- - Out-of-band Channels - - - - - - - - - - SC-37 - -

The organization employs for the physical delivery or electronic transmission of to .

-
- -

Out-of-band channels include, for example, local (nonnetwork) accesses to information systems, network paths physically separate from network paths used for operational traffic, or nonelectronic paths such as the US Postal Service. This is in contrast with using the same channels (i.e., in-band channels) that carry routine operational traffic. Out-of-band channels do not have the same vulnerability/exposure as in-band channels, and hence the confidentiality, integrity, or availability compromises of in-band channels will not compromise the out-of-band channels. Organizations may employ out-of-band channels in the delivery or transmission of many organizational items including, for example, identifiers/authenticators, configuration management changes for hardware, firmware, or software, cryptographic key management information, security updates, system/data backups, maintenance information, and malicious code protection updates.

- AC-2 - CM-3 - CM-5 - CM-7 - IA-4 - IA-5 - MA-4 - SC-12 - SI-3 - SI-4 - SI-7 -
- -

Determine if the organization:

- - SC-37[1] -

defines out-of-band channels to be employed for the physical delivery or electronic transmission of information, information system components, or devices to individuals or information systems;

-
- - SC-37[2] -

defines information, information system components, or devices for which physical delivery or electronic transmission of such information, information system components, or devices to individuals or information systems requires employment of organization-defined out-of-band channels;

-
- - SC-37[3] -

defines individuals or information systems to which physical delivery or electronic transmission of organization-defined information, information system components, or devices is to be achieved via employment of organization-defined out-of-band channels; and

-
- - SC-37[4] -

employs organization-defined out-of-band channels for the physical delivery or electronic transmission of organization-defined information, information system components, or devices to organization-defined individuals or information systems.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing use of out-of-band channels

-

access control policy and procedures

-

identification and authentication policy and procedures

-

information system design documentation

-

information system architecture

-

information system configuration settings and associated documentation

-

list of out-of-band channels

-

types of information, information system components, or devices requiring use of out-of-band channels for physical delivery or electronic transmission to authorized individuals or information systems

-

physical delivery records

-

electronic transmission records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel authorizing, installing, configuring, operating, and/or using out-of-band channels

-

information system developers/integrators

-
-
- - TEST - -

Organizational processes for use of out-of-band channels

-

automated mechanisms supporting and/or implementing use of out-of-band channels

-
-
- - Ensure Delivery / Transmission - - - - - - - - - - SC-37(1) - -

The organization employs to ensure that only receive the .

-
- -

Techniques and/or methods employed by organizations to ensure that only designated information systems or individuals receive particular information, system components, or devices include, for example, sending authenticators via courier service but requiring recipients to show some form of government-issued photographic identification as a condition of receipt.

-
- -

Determine if the organization:

- - SC-37(1)[1] -

defines security safeguards to be employed to ensure that only designated individuals or information systems receive specific information, information system components, or devices;

-
- - SC-37(1)[2] -

defines individuals or information systems designated to receive specific information, information system components, or devices;

-
- - SC-37(1)[3] -

defines information, information system components, or devices that only organization-defined individuals or information systems are designated to receive; and

-
- - SC-37(1)[4] -

employs organization-defined security safeguards to ensure that only organization-defined individuals or information systems receive the organization-defined information, information system components, or devices.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing use of out-of-band channels

-

access control policy and procedures

-

identification and authentication policy and procedures

-

information system design documentation

-

information system architecture

-

information system configuration settings and associated documentation

-

list of security safeguards to be employed to ensure designated individuals or information systems receive organization-defined information, information system components, or devices

-

list of security safeguards for delivering designated information, information system components, or devices to designated individuals or information systems

-

list of information, information system components, or devices to be delivered to designated individuals or information systems

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel authorizing, installing, configuring, operating, and/or using out-of-band channels

-

information system developers/integrators

-
-
- - TEST - -

Organizational processes for use of out-of-band channels

-

automated mechanisms supporting and/or implementing use of out-of-band channels

-

automated mechanisms supporting/implementing safeguards to ensure delivery of designated information, system components, or devices

-
-
-
-
- - Operations Security - - - - SC-38 - -

The organization employs to protect key organizational information throughout the system development life cycle.

-
- -

Operations security (OPSEC) is a systematic process by which potential adversaries can be denied information about the capabilities and intentions of organizations by identifying, controlling, and protecting generally unclassified information that specifically relates to the planning and execution of sensitive organizational activities. The OPSEC process involves five steps: (i) identification of critical information (e.g., the security categorization process); (ii) analysis of threats; (iii) analysis of vulnerabilities; (iv) assessment of risks; and (v) the application of appropriate countermeasures. OPSEC safeguards are applied to both organizational information systems and the environments in which those systems operate. OPSEC safeguards help to protect the confidentiality of key information including, for example, limiting the sharing of information with suppliers and potential suppliers of information system components, information technology products and services, and with other non-organizational elements and individuals. Information critical to mission/business success includes, for example, user identities, element uses, suppliers, supply chain processes, functional and security requirements, system design specifications, testing protocols, and security control implementation details.

- RA-2 - RA-5 - SA-12 -
- -

Determine if the organization:

- - SC-38[1] -

defines operations security safeguards to be employed to protect key organizational information throughout the system development life cycle; and

-
- - SC-38[2] -

employs organization-defined operations security safeguards to protect key organizational information throughout the system development life cycle.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing operations security

-

security plan

-

list of operations security safeguards

-

security control assessments

-

risk assessments

-

threat and vulnerability assessments

-

plans of action and milestones

-

system development life cycle documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

information system developers/integrators

-
-
- - TEST - -

Organizational processes for protecting organizational information throughout the SDLC

-

automated mechanisms supporting and/or implementing safeguards to protect organizational information throughout the SDLC

-
-
-
- - Process Isolation - SC-39 - -

The information system maintains a separate execution domain for each executing process.

-
- -

Information systems can maintain separate execution domains for each executing process by assigning each process a separate address space. Each information system process has a distinct address space so that communication between processes is performed in a manner controlled through the security functions, and one process cannot modify the executing code of another process. Maintaining separate execution domains for executing processes can be achieved, for example, by implementing separate address spaces. This capability is available in most commercial operating systems that employ multi-state processor technologies.

- AC-3 - AC-4 - AC-6 - SA-4 - SA-5 - SA-8 - SC-2 - SC-3 -
- -

Determine if the information system maintains a separate execution domain for each executing process.

-
- - EXAMINE - -

Information system design documentation

-

information system architecture

-

independent verification and validation documentation

-

testing and evaluation documentation, other relevant documents or records

-
-
- - INTERVIEW - -

Information system developers/integrators

-

information system security architect

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing separate execution domains for each executing process

-
-
- - Hardware Separation - SC-39(1) - -

The information system implements underlying hardware separation mechanisms to facilitate process separation.

-
- -

Hardware-based separation of information system processes is generally less susceptible to compromise than software-based separation, thus providing greater assurance that the separation will be enforced. Underlying hardware separation mechanisms include, for example, hardware memory management.

-
- -

Determine if the information system implements underlying hardware separation mechanisms to facilitate process separation.

-
- - EXAMINE - -

System and communications protection policy

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system architecture

-

information system documentation for hardware separation mechanisms

-

information system documentation from vendors, manufacturers or developers

-

independent verification and validation documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel installing, configuring, and/or maintaining the information system

-

information system developers/integrators

-
-
- - TEST - -

Information system capability implementing underlying hardware separation mechanisms for process separation

-
-
-
- - Thread Isolation - - - - SC-39(2) - -

The information system maintains a separate execution domain for each thread in .

-
- -

Determine if the information system:

- - SC-39(2)[1] -

defines multi-threaded processing for which a separate execution domain is to be maintained for each thread in multi-threaded processing; and

-
- - SC-39(2)[2] -

maintains a separate execution domain for each thread in organization-defined multi-threaded processing.

-
-
- - EXAMINE - -

System and communications protection policy

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system architecture

-

list of information system execution domains for each thread in multi-threaded processing

-

information system documentation for multi-threaded processing

-

information system documentation from vendors, manufacturers or developers

-

independent verification and validation documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel installing, configuring, and/or maintaining the information system

-

information system developers/integrators

-
-
- - TEST - -

Information system capability implementing a separate execution domain for each thread in multi-threaded processing

-
-
-
-
- - Wireless Link Protection - - - - - - - SC-40 - -

The information system protects external and internal from .

-
- -

This control applies to internal and external wireless communication links that may be visible to individuals who are not authorized information system users. Adversaries can exploit the signal parameters of wireless links if such links are not adequately protected. There are many ways to exploit the signal parameters of wireless links to gain intelligence, deny service, or to spoof users of organizational information systems. This control reduces the impact of attacks that are unique to wireless systems. If organizations rely on commercial service providers for transmission services as commodity items rather than as fully dedicated services, it may not be possible to implement this control.

- AC-18 - SC-5 -
- -

Determine if:

- - SC-40[1] -

the organization defines:

- - SC-40[1][a] -

internal wireless links to be protected from particular types of signal parameter attacks;

-
- - SC-40[1][b] -

external wireless links to be protected from particular types of signal parameter attacks;

-
-
- - SC-40[2] -

the organization defines types of signal parameter attacks or references to sources for such attacks that are based upon exploiting the signal parameters of organization-defined internal and external wireless links; and

-
- - SC-40[3] -

the information system protects internal and external organization-defined wireless links from organization-defined types of signal parameter attacks or references to sources for such attacks.

-
-
- - EXAMINE - -

System and communications protection policy

-

access control policy and procedures

-

procedures addressing wireless link protection

-

information system design documentation

-

wireless network diagrams

-

information system configuration settings and associated documentation

-

information system architecture

-

list or internal and external wireless links

-

list of signal parameter attacks or references to sources for attacks

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel authorizing, installing, configuring and/or maintaining internal and external wireless links

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing protection of wireless links

-
-
- - Electromagnetic Interference - - - - SC-40(1) - -

The information system implements cryptographic mechanisms that achieve against the effects of intentional electromagnetic interference.

-
- -

This control enhancement protects against intentional jamming that might deny or impair communications by ensuring that wireless spread spectrum waveforms used to provide anti-jam protection are not predictable by unauthorized individuals. The control enhancement may also coincidentally help to mitigate the effects of unintentional jamming due to interference from legitimate transmitters sharing the same spectrum. Mission requirements, projected threats, concept of operations, and applicable legislation, directives, regulations, policies, standards, and guidelines determine levels of wireless link availability and performance/cryptography needed.

- SC-12 - SC-13 -
- -

Determine if:

- - SC-40(1)[1] -

the organization defines level of protection to be employed against the effects of intentional electromagnetic interference; and

-
- - SC-40(1)[2] -

the information system employs cryptographic mechanisms that achieve organization-defined level of protection against the effects of intentional electromagnetic interference.

-
-
- - EXAMINE - -

System and communications protection policy

-

access control policy and procedures

-

procedures addressing wireless link protection

-

information system design documentation

-

wireless network diagrams

-

information system configuration settings and associated documentation

-

information system architecture

-

information system communications hardware and software

-

security categorization results

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel authorizing, installing, configuring and/or maintaining internal and external wireless links

-
-
- - TEST - -

Cryptographic mechanisms enforcing protections against effects of intentional electromagnetic interference

-
-
-
- - Reduce Detection Potential - - - - SC-40(2) - -

The information system implements cryptographic mechanisms to reduce the detection potential of wireless links to .

-
- -

This control enhancement is needed for covert communications and protecting wireless transmitters from being geo-located by their transmissions. The control enhancement ensures that spread spectrum waveforms used to achieve low probability of detection are not predictable by unauthorized individuals. Mission requirements, projected threats, concept of operations, and applicable legislation, directives, regulations, policies, standards, and guidelines determine the levels to which wireless links should be undetectable.

- SC-12 - SC-13 -
- -

Determine if:

- - SC-40(2)[1] -

the organization defines level of reduction to be achieved to reduce the detection potential of wireless links; and

-
- - SC-40(2)[2] -

the information system implements cryptographic mechanisms to reduce the detection potential of wireless links to organization-defined level of reduction.

-
-
- - EXAMINE - -

System and communications protection policy

-

access control policy and procedures

-

procedures addressing wireless link protection

-

information system design documentation

-

wireless network diagrams

-

information system configuration settings and associated documentation

-

information system architecture

-

information system communications hardware and software

-

security categorization results

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel authorizing, installing, configuring and/or maintaining internal and external wireless links

-
-
- - TEST - -

Cryptographic mechanisms enforcing protections to reduce detection of wireless links

-
-
-
- - Imitative or Manipulative Communications Deception - SC-40(3) - -

The information system implements cryptographic mechanisms to identify and reject wireless transmissions that are deliberate attempts to achieve imitative or manipulative communications deception based on signal parameters.

-
- -

This control enhancement ensures that the signal parameters of wireless transmissions are not predictable by unauthorized individuals. Such unpredictability reduces the probability of imitative or manipulative communications deception based upon signal parameters alone.

- SC-12 - SC-13 -
- -

Determine if the information system implements cryptographic mechanisms to:

- - SC-40(3)[1] -

identify wireless transmissions that are deliberate attempts to achieve imitative or manipulative communications deception based on signal parameters; and

-
- - SC-40(3)[2] -

reject wireless transmissions that are deliberate attempts to achieve imitative or manipulative communications deception based on signal parameters.

-
-
- - EXAMINE - -

System and communications protection policy

-

access control policy and procedures

-

procedures addressing information system design documentation

-

wireless network diagrams

-

information system configuration settings and associated documentation

-

information system architecture

-

information system communications hardware and software

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel authorizing, installing, configuring and/or maintaining internal and external wireless links

-
-
- - TEST - -

Cryptographic mechanisms enforcing wireless link protections against imitative or manipulative communications deception

-
-
-
- - Signal Parameter Identification - - - - SC-40(4) - -

The information system implements cryptographic mechanisms to prevent the identification of by using the transmitter signal parameters.

-
- -

Radio fingerprinting techniques identify the unique signal parameters of transmitters to fingerprint such transmitters for purposes of tracking and mission/user identification. This control enhancement protects against the unique identification of wireless transmitters for purposes of intelligence exploitation by ensuring that anti-fingerprinting alterations to signal parameters are not predictable by unauthorized individuals. This control enhancement helps assure mission success when anonymity is required.

- SC-12 - SC-13 -
- -

Determine if:

- - SC-40(4)[1] -

the organization defines wireless transmitters for which cryptographic mechanisms are to be implemented to prevent identification of such transmitters by using the transmitter signal parameters; and

-
- - SC-40(4)[2] -

the information system implements cryptographic mechanisms to prevent the identification of organization-defined wireless transmitters by using the transmitter signal parameters.

-
-
- - EXAMINE - -

System and communications protection policy

-

access control policy and procedures

-

procedures addressing information system design documentation

-

wireless network diagrams

-

information system configuration settings and associated documentation

-

information system architecture

-

information system communications hardware and software

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel authorizing, installing, configuring and/or maintaining internal and external wireless links

-
-
- - TEST - -

Cryptographic mechanisms preventing the identification of wireless transmitters

-
-
-
-
- - Port and I/O Device Access - - - - - - - SC-41 - -

The organization physically disables or removes on .

-
- -

Connection ports include, for example, Universal Serial Bus (USB) and Firewire (IEEE 1394). Input/output (I/O) devices include, for example, Compact Disk (CD) and Digital Video Disk (DVD) drives. Physically disabling or removing such connection ports and I/O devices helps prevent exfiltration of information from information systems and the introduction of malicious code into systems from those ports/devices.

-
- -

Determine if the organization:

- - SC-41[1] -

defines connection ports or input/output devices to be physically disabled or removed on information systems or information system components;

-
- - SC-41[2] -

defines information systems or information system components with organization-defined connection ports or input/output devices that are to be physically disabled or removed; and

-
- - SC-41[3] -

physically disables or removes organization-defined connection ports or input/output devices on organization-defined information systems or information system components.

-
-
- - EXAMINE - -

System and communications protection policy

-

access control policy and procedures

-

procedures addressing port and input/output device access

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system architecture

-

information systems or information system components list of connection ports or input/output devices to be physically disabled or removed on information systems or information system components

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing disabling of connection ports or input/output devices

-
-
-
- - Sensor Capability and Data - - - - - - - SC-42 - -

The information system:

- - a. -

Prohibits the remote activation of environmental sensing capabilities with the following exceptions: ; and

-
- - b. -

Provides an explicit indication of sensor use to .

-
-
- -

This control often applies to types of information systems or system components characterized as mobile devices, for example, smart phones, tablets, and E-readers. These systems often include sensors that can collect and record data regarding the environment where the system is in use. Sensors that are embedded within mobile devices include, for example, cameras, microphones, Global Positioning System (GPS) mechanisms, and accelerometers. While the sensors on mobiles devices provide an important function, if activated covertly, such devices can potentially provide a means for adversaries to learn valuable information about individuals and organizations. For example, remotely activating the GPS function on a mobile device could provide an adversary with the ability to track the specific movements of an individual.

-
- -

Determine if:

- - SC-42(a) - - SC-42(a)[1] -

the organization defines exceptions where remote activation of sensors is to be allowed;

-
- - SC-42(a)[2] -

the information system prohibits the remote activation of sensors, except for organization-defined exceptions where remote activation of sensors is to be allowed;

-
-
- - SC-42(b) - - SC-42(b)[1] -

the organization defines the class of users to whom an explicit indication of sensor use is to be provided; and

-
- - SC-42(b)[2] -

the information system provides an explicit indication of sensor use to the organization-defined class of users.

-
-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing sensor capability and data collection

-

access control policy and procedures

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for sensor capability

-
-
- - TEST - -

Automated mechanisms implementing access controls for remote activation of information system sensor capabilities

-

automated mechanisms implementing capability to indicate sensor use

-
-
- - Reporting to Authorized Individuals or Roles - - - - SC-42(1) - -

The organization ensures that the information system is configured so that data or information collected by the is only reported to authorized individuals or roles.

-
- -

In situations where sensors are activated by authorized individuals (e.g., end users), it is still possible that the data/information collected by the sensors will be sent to unauthorized entities.

-
- -

Determine if the organization:

- - SC-42(1)[1] -

defines sensors to be used to collect data or information only reported to authorized individuals or roles; and

-
- - SC-42(1)[2] -

ensures that the information system is configured so that data or information collected by the organization-defined sensors is only reported to authorized individuals or roles.

-
-
- - EXAMINE - -

System and communications protection policy

-

access control policy and procedures

-

procedures addressing sensor capability and data collection

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system architecture

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for sensor capability

-
-
- - TEST - -

Automated mechanisms restricting reporting of sensor information only to those authorized

-

sensor data collection and reporting capability for the information system

-
-
-
- - Authorized Use - - - - - - - SC-42(2) - -

The organization employs the following measures: , so that data or information collected by is only used for authorized purposes.

-
- -

Information collected by sensors for a specific authorized purpose potentially could be misused for some unauthorized purpose. For example, GPS sensors that are used to support traffic navigation could be misused to track movements of individuals. Measures to mitigate such activities include, for example, additional training to ensure that authorized parties do not abuse their authority, or (in the case where sensor data/information is maintained by external parties) contractual restrictions on the use of the data/information.

-
- -

Determine if the organization:

- - SC-42(2)[1] -

defines measures to be employed so that data or information collected by sensors is only used for authorized purposes;

-
- - SC-42(2)[2] -

defines sensors to be used to collect data or information for authorized purposes only; and

-
- - SC-42(2)[3] -

employs organization-defined measures so that data or information collected by organization-defined sensors is only used for authorized purposes.

-
-
- - EXAMINE - -

System and communications protection policy

-

access control policy and procedures

-

sensor capability and data collection

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system architecture

-

list of measures to be employed to ensure data or information collected by sensors is only used for authorized purposes

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for sensor capability

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing measures to ensure sensor information is only used for authorized purposes

-

sensor information collection capability for the information system

-
-
-
- - Prohibit Use of Devices - - - - - - - SC-42(3) - -

The organization prohibits the use of devices possessing in .

-
- -

For example, organizations may prohibit individuals from bringing cell phones or digital cameras into certain facilities or specific controlled areas within facilities where classified information is stored or sensitive conversations are taking place.

-
- -

Determine if the organization:

- - SC-42(3)[1] -

defines environmental sensing capabilities to be prohibited from use in facilities, areas, or systems;

-
- - SC-42(3)[2] -

defines facilities, areas, or systems where the use of devices possessing organization-defined environmental sensing capabilities is to be prohibited; and

-
- - SC-42(3)[3] -

prohibits the use of devices possessing organization-defined environmental sensing capabilities in organization-defined facilities, areas, or systems.

-
-
- - EXAMINE - -

System and communications protection policy

-

access control policy and procedures

-

procedures addressing sensor capability and data collection

-

information system design documentation

-

wireless network diagrams

-

information system configuration settings and associated documentation

-

information system architecture

-

facilities, areas, or systems where use of devices possessing environmental sensing capabilities is prohibited

-

list of devices possessing environmental sensing capabilities

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for sensor capability

-
-
-
-
- - Usage Restrictions - - - - SC-43 - -

The organization:

- - a. -

Establishes usage restrictions and implementation guidance for based on the potential to cause damage to the information system if used maliciously; and

-
- - b. -

Authorizes, monitors, and controls the use of such components within the information system.

-
-
- -

Information system components include hardware, software, or firmware components (e.g., Voice Over Internet Protocol, mobile code, digital copiers, printers, scanners, optical devices, wireless technologies, mobile devices).

- CM-6 - SC-7 -
- -

Determine if the organization:

- - SC-43(a) - - SC-43(a)[1] -

defines information system components for which usage restrictions and implementation guidance are to be established;

-
- - SC-43(a)[2] -

establishes, for organization-defined information system components:

- - SC-43(a)[2][a] -

usage restrictions based on the potential to cause damage to the information system if used maliciously;

-
- - SC-43(a)[2][b] -

implementation guidance based on the potential to cause damage to the information system if used maliciously;

-
-
-
- - SC-43(b) - - SC-43(b)[1] -

authorizes the use of such components within the information system;

-
- - SC-43(b)[2] -

monitors the use of such components within the information system; and

-
- - SC-43(b)[3] -

controls the use of such components within the information system.

-
-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing usage restrictions

-

usage restrictions

-

implementation policy and procedures

-

authorization records

-

information system monitoring records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-
-
- - TEST - -

Organizational processes for authorizing, monitoring, and controlling use of components with usage restrictions

-

Automated mechanisms supporting and/or implementing authorizing, monitoring, and controlling use of components with usage restrictions

-
-
-
- - Detonation Chambers - - - - SC-44 - -

The organization employs a detonation chamber capability within .

-
- -

Detonation chambers, also known as dynamic execution environments, allow organizations to open email attachments, execute untrusted or suspicious applications, and execute Universal Resource Locator (URL) requests in the safety of an isolated environment or virtualized sandbox. These protected and isolated execution environments provide a means of determining whether the associated attachments/applications contain malicious code. While related to the concept of deception nets, the control is not intended to maintain a long-term environment in which adversaries can operate and their actions can be observed. Rather, it is intended to quickly identify malicious code and reduce the likelihood that the code is propagated to user environments of operation (or prevent such propagation completely).

- SC-7 - SC-25 - SC-26 - SC-30 -
- -

Determine if the organization:

- - SC-44[1] -

defines information system, system component, or location where a detonation chamber capability is to be employed; and

-
- - SC-44[2] -

employs a detonation chamber capability within organization-defined information system, system component, or location.

-
-
- - EXAMINE - -

System and communications protection policy

-

procedures addressing detonation chambers

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing detonation chamber capability

-
-
-
-
- - System and Information Integrity - - System and Information Integrity Policy and Procedures - - - - - - - - - - SI-1 - -

The organization:

- - a. -

Develops, documents, and disseminates to :

- - 1. -

A system and information integrity policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and

-
- - 2. -

Procedures to facilitate the implementation of the system and information integrity policy and associated system and information integrity controls; and

-
-
- - b. -

Reviews and updates the current:

- - 1. -

System and information integrity policy ; and

-
- - 2. -

System and information integrity procedures .

-
-
-
- -

This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the SI family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures.

- PM-9 -
- -

Determine if the organization:

- - SI-1(a) - - SI-1(a)(1) - - SI-1(a)(1)[1] -

develops and documents a system and information integrity policy that addresses:

- - SI-1(a)(1)[1][a] -

purpose;

-
- - SI-1(a)(1)[1][b] -

scope;

-
- - SI-1(a)(1)[1][c] -

roles;

-
- - SI-1(a)(1)[1][d] -

responsibilities;

-
- - SI-1(a)(1)[1][e] -

management commitment;

-
- - SI-1(a)(1)[1][f] -

coordination among organizational entities;

-
- - SI-1(a)(1)[1][g] -

compliance;

-
-
- - SI-1(a)(1)[2] -

defines personnel or roles to whom the system and information integrity policy is to be disseminated;

-
- - SI-1(a)(1)[3] -

disseminates the system and information integrity policy to organization-defined personnel or roles;

-
-
- - SI-1(a)(2) - - SI-1(a)(2)[1] -

develops and documents procedures to facilitate the implementation of the system and information integrity policy and associated system and information integrity controls;

-
- - SI-1(a)(2)[2] -

defines personnel or roles to whom the procedures are to be disseminated;

-
- - SI-1(a)(2)[3] -

disseminates the procedures to organization-defined personnel or roles;

-
-
-
- - SI-1(b) - - SI-1(b)(1) - - SI-1(b)(1)[1] -

defines the frequency to review and update the current system and information integrity policy;

-
- - SI-1(b)(1)[2] -

reviews and updates the current system and information integrity policy with the organization-defined frequency;

-
-
- - SI-1(b)(2) - - SI-1(b)(2)[1] -

defines the frequency to review and update the current system and information integrity procedures; and

-
- - SI-1(b)(2)[2] -

reviews and updates the current system and information integrity procedures with the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

System and information integrity policy and procedures

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with system and information integrity responsibilities

-

organizational personnel with information security responsibilities

-
-
- - NIST Special Publication 800-12 - - NIST Special Publication 800-100 - -
- - Flaw Remediation - - - - SI-2 - -

The organization:

- - a. -

Identifies, reports, and corrects information system flaws;

-
- - b. -

Tests software and firmware updates related to flaw remediation for effectiveness and potential side effects before installation;

-
- - c. -

Installs security-relevant software and firmware updates within of the release of the updates; and

-
- - d. -

Incorporates flaw remediation into the organizational configuration management process.

-
-
- -

Organizations identify information systems affected by announced software flaws including potential vulnerabilities resulting from those flaws, and report this information to designated organizational personnel with information security responsibilities. Security-relevant software updates include, for example, patches, service packs, hot fixes, and anti-virus signatures. Organizations also address flaws discovered during security assessments, continuous monitoring, incident response activities, and system error handling. Organizations take advantage of available resources such as the Common Weakness Enumeration (CWE) or Common Vulnerabilities and Exposures (CVE) databases in remediating flaws discovered in organizational information systems. By incorporating flaw remediation into ongoing configuration management processes, required/anticipated remediation actions can be tracked and verified. Flaw remediation actions that can be tracked and verified include, for example, determining whether organizations follow US-CERT guidance and Information Assurance Vulnerability Alerts. Organization-defined time periods for updating security-relevant software and firmware may vary based on a variety of factors including, for example, the security category of the information system or the criticality of the update (i.e., severity of the vulnerability related to the discovered flaw). Some types of flaw remediation may require more testing than other types. Organizations determine the degree and type of testing needed for the specific type of flaw remediation activity under consideration and also the types of changes that are to be configuration-managed. In some situations, organizations may determine that the testing of software and/or firmware updates is not necessary or practical, for example, when implementing simple anti-virus signature updates. Organizations may also consider in testing decisions, whether security-relevant software or firmware updates are obtained from authorized sources with appropriate digital signatures.

- CA-2 - CA-7 - CM-3 - CM-5 - CM-8 - MA-2 - IR-4 - RA-5 - SA-10 - SA-11 - SI-11 -
- -

Determine if the organization:

- - SI-2(a) - - SI-2(a)[1] -

identifies information system flaws;

-
- - SI-2(a)[2] -

reports information system flaws;

-
- - SI-2(a)[3] -

corrects information system flaws;

-
-
- - SI-2(b) - - SI-2(b)[1] -

tests software updates related to flaw remediation for effectiveness and potential side effects before installation;

-
- - SI-2(b)[2] -

tests firmware updates related to flaw remediation for effectiveness and potential side effects before installation;

-
-
- - SI-2(c) - - SI-2(c)[1] -

defines the time period within which to install security-relevant software updates after the release of the updates;

-
- - SI-2(c)[2] -

defines the time period within which to install security-relevant firmware updates after the release of the updates;

-
- - SI-2(c)[3] -

installs software updates within the organization-defined time period of the release of the updates;

-
- - SI-2(c)[4] -

installs firmware updates within the organization-defined time period of the release of the updates; and

-
-
- - SI-2(d) -

incorporates flaw remediation into the organizational configuration management process.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing flaw remediation

-

procedures addressing configuration management

-

list of flaws and vulnerabilities potentially affecting the information system

-

list of recent security flaw remediation actions performed on the information system (e.g., list of installed patches, service packs, hot fixes, and other software updates to correct information system flaws)

-

test results from the installation of software and firmware updates to correct information system flaws

-

installation/change control records for security-relevant software and firmware updates

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for flaw remediation

-

organizational personnel with configuration management responsibility

-
-
- - TEST - -

Organizational processes for identifying, reporting, and correcting information system flaws

-

organizational process for installing software and firmware updates

-

automated mechanisms supporting and/or implementing reporting, and correcting information system flaws

-

automated mechanisms supporting and/or implementing testing software and firmware updates

-
-
- - Central Management - SI-2(1) - -

The organization centrally manages the flaw remediation process.

-
- -

Central management is the organization-wide management and implementation of flaw remediation processes. Central management includes planning, implementing, assessing, authorizing, and monitoring the organization-defined, centrally managed flaw remediation security controls.

-
- -

Determine if the organization centrally manages the flaw remediation process.

-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing flaw remediation

-

automated mechanisms supporting centralized management of flaw remediation

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for flaw remediation

-
-
- - TEST - -

Organizational processes for central management of the flaw remediation process

-

automated mechanisms supporting and/or implementing central management of the flaw remediation process

-
-
-
- - Automated Flaw Remediation Status - - - - SI-2(2) - -

The organization employs automated mechanisms to determine the state of information system components with regard to flaw remediation.

-
- - CM-6 - SI-4 - - -

Determine if the organization:

- - SI-2(2)[1] -

defines a frequency to employ automated mechanisms to determine the state of information system components with regard to flaw remediation; and

-
- - SI-2(2)[2] -

employs automated mechanisms with the organization-defined frequency to determine the state of information system components with regard to flaw remediation.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing flaw remediation

-

automated mechanisms supporting centralized management of flaw remediation

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for flaw remediation

-
-
- - TEST - -

Automated mechanisms used to determine the state of information system components with regard to flaw remediation

-
-
-
- - Time to Remediate Flaws / Benchmarks for Corrective Actions - - - - SI-2(3) - -

The organization:

- - (a) -

Measures the time between flaw identification and flaw remediation; and

-
- - (b) -

Establishes for taking corrective actions.

-
-
- -

This control enhancement requires organizations to determine the current time it takes on the average to correct information system flaws after such flaws have been identified, and subsequently establish organizational benchmarks (i.e., time frames) for taking corrective actions. Benchmarks can be established by type of flaw and/or severity of the potential vulnerability if the flaw can be exploited.

-
- -

Determine if the organization:

- - SI-2(3)(a) -

measures the time between flaw identification and flaw remediation;

- SI-2(3)(a) -
- - SI-2(3)(b) - - SI-2(3)(b)[1] -

defines benchmarks for taking corrective actions; and

-
- - SI-2(3)(b)[2] -

establishes organization-defined benchmarks for taking corrective actions.

-
- SI-2(3)(b) -
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing flaw remediation

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of benchmarks for taking corrective action on flaws identified

-

records providing time stamps of flaw identification and subsequent flaw remediation activities

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for flaw remediation

-
-
- - TEST - -

Organizational processes for identifying, reporting, and correcting information system flaws

-

automated mechanisms used to measure the time between flaw identification and flaw remediation

-
-
-
- - Automated Patch Management Tools - SI-2(4) - Withdrawn - SI-2 - - - Automatic Software / Firmware Updates - - - - - - - SI-2(5) - -

The organization installs automatically to .

-
- -

Due to information system integrity and availability concerns, organizations give careful consideration to the methodology used to carry out automatic updates. Organizations must balance the need to ensure that the updates are installed as soon as possible with the need to maintain configuration management and with any mission or operational impacts that automatic updates might impose.

-
- -

Determine if the organization:

- - SI-2(5)[1] - - SI-2(5)[1][a] -

defines information system components requiring security-relevant software updates to be automatically installed;

-
- - SI-2(5)[1][b] -

defines information system components requiring security-relevant firmware updates to be automatically installed;

-
-
- - SI-2(5)[2] - - SI-2(5)[2][a] -

defines security-relevant software updates to be automatically installed to organization-defined information system components;

-
- - SI-2(5)[2][b] -

defines security-relevant firmware updates to be automatically installed to organization-defined information system components;

-
-
- - SI-2(5)[3] - - SI-2(5)[3][a] -

installs organization-defined security-relevant software updates automatically to organization-defined information system components; and

-
- - SI-2(5)[3][b] -

installs organization-defined security-relevant firmware updates automatically to organization-defined information system components.

-
-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing flaw remediation

-

automated mechanisms supporting flaw remediation and automatic software/firmware updates

-

information system design documentation

-

information system configuration settings and associated documentation

-

records of recent security-relevant software and firmware updates automatically installed to information system components

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for flaw remediation

-
-
- - TEST - -

Automated mechanisms implementing automatic software/firmware updates

-
-
-
- - Removal of Previous Versions of Software / Firmware - - - - SI-2(6) - -

The organization removes after updated versions have been installed.

-
- -

Previous versions of software and/or firmware components that are not removed from the information system after updates have been installed may be exploited by adversaries. Some information technology products may remove older versions of software and/or firmware automatically from the information system.

-
- -

Determine if the organization:

- - SI-2(6)[1] - - SI-2(6)[1][a] -

defines software components to be removed after updated versions have been installed;

-
- - SI-2(6)[1][b] -

defines firmware components to be removed after updated versions have been installed;

-
-
- - SI-2(6)[2] - - SI-2(6)[2][a] -

removes organization-defined software components after updated versions have been installed; and

-
- - SI-2(6)[2][b] -

removes organization-defined firmware components after updated versions have been installed.

-
-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing flaw remediation

-

automated mechanisms supporting flaw remediation

-

information system design documentation

-

information system configuration settings and associated documentation

-

records of software and firmware component removals after updated versions are installed

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for flaw remediation

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing removal of previous versions of software/firmware

-
-
-
- - NIST Special Publication 800-40 - - NIST Special Publication 800-128 - -
- - Malicious Code Protection - - - - - - - - - - - - - SI-3 - -

The organization:

- - a. -

Employs malicious code protection mechanisms at information system entry and exit points to detect and eradicate malicious code;

-
- - b. -

Updates malicious code protection mechanisms whenever new releases are available in accordance with organizational configuration management policy and procedures;

-
- - c. -

Configures malicious code protection mechanisms to:

- - 1. -

Perform periodic scans of the information system and real-time scans of files from external sources at as the files are downloaded, opened, or executed in accordance with organizational security policy; and

-
- - 2. -

- in response to malicious code detection; and

-
-
- - d. -

Addresses the receipt of false positives during malicious code detection and eradication and the resulting potential impact on the availability of the information system.

-
-
- -

Information system entry and exit points include, for example, firewalls, electronic mail servers, web servers, proxy servers, remote-access servers, workstations, notebook computers, and mobile devices. Malicious code includes, for example, viruses, worms, Trojan horses, and spyware. Malicious code can also be encoded in various formats (e.g., UUENCODE, Unicode), contained within compressed or hidden files, or hidden in files using steganography. Malicious code can be transported by different means including, for example, web accesses, electronic mail, electronic mail attachments, and portable storage devices. Malicious code insertions occur through the exploitation of information system vulnerabilities. Malicious code protection mechanisms include, for example, anti-virus signature definitions and reputation-based technologies. A variety of technologies and methods exist to limit or eliminate the effects of malicious code. Pervasive configuration management and comprehensive software integrity controls may be effective in preventing execution of unauthorized code. In addition to commercial off-the-shelf software, malicious code may also be present in custom-built software. This could include, for example, logic bombs, back doors, and other types of cyber attacks that could affect organizational missions/business functions. Traditional malicious code protection mechanisms cannot always detect such code. In these situations, organizations rely instead on other safeguards including, for example, secure coding practices, configuration management and control, trusted procurement processes, and monitoring practices to help ensure that software does not perform functions other than the functions intended. Organizations may determine that in response to the detection of malicious code, different actions may be warranted. For example, organizations can define actions in response to malicious code detection during periodic scans, actions in response to detection of malicious downloads, and/or actions in response to detection of maliciousness when attempting to open or execute files.

- CM-3 - MP-2 - SA-4 - SA-8 - SA-12 - SA-13 - SC-7 - SC-26 - SC-44 - SI-2 - SI-4 - SI-7 -
- -

Determine if the organization:

- - SI-3(a) -

employs malicious code protection mechanisms to detect and eradicate malicious code at information system:

- - SI-3(a)[1] -

entry points;

-
- - SI-3(a)[2] -

exit points;

-
-
- - SI-3(b) -

updates malicious code protection mechanisms whenever new releases are available in accordance with organizational configuration management policy and procedures (as identified in CM-1);

-
- - SI-3(c) - - SI-3(c)[1] -

defines a frequency for malicious code protection mechanisms to perform periodic scans of the information system;

-
- - SI-3(c)[2] -

defines action to be initiated by malicious protection mechanisms in response to malicious code detection;

-
- - SI-3(c)[3] - - SI-3(c)[3](1) -

configures malicious code protection mechanisms to:

- - SI-3(c)[3](1)[a] -

perform periodic scans of the information system with the organization-defined frequency;

-
- - SI-3(c)[3](1)[b] -

perform real-time scans of files from external sources at endpoint and/or network entry/exit points as the files are downloaded, opened, or executed in accordance with organizational security policy;

-
-
- - SI-3(c)[3](2) -

configures malicious code protection mechanisms to do one or more of the following:

- - SI-3(c)[3](2)[a] -

block malicious code in response to malicious code detection;

-
- - SI-3(c)[3](2)[b] -

quarantine malicious code in response to malicious code detection;

-
- - SI-3(c)[3](2)[c] -

send alert to administrator in response to malicious code detection; and/or

-
- - SI-3(c)[3](2)[d] -

initiate organization-defined action in response to malicious code detection;

-
-
-
-
- - SI-3(d) - - SI-3(d)[1] -

addresses the receipt of false positives during malicious code detection and eradication; and

-
- - SI-3(d)[2] -

addresses the resulting potential impact on the availability of the information system.

-
-
-
- - EXAMINE - -

System and information integrity policy

-

configuration management policy and procedures

-

procedures addressing malicious code protection

-

malicious code protection mechanisms

-

records of malicious code protection updates

-

information system design documentation

-

information system configuration settings and associated documentation

-

scan results from malicious code protection mechanisms

-

record of actions initiated by malicious code protection mechanisms in response to malicious code detection

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for malicious code protection

-

organizational personnel with configuration management responsibility

-
-
- - TEST - -

Organizational processes for employing, updating, and configuring malicious code protection mechanisms

-

organizational process for addressing false positives and resulting potential impact

-

automated mechanisms supporting and/or implementing employing, updating, and configuring malicious code protection mechanisms

-

automated mechanisms supporting and/or implementing malicious code scanning and subsequent actions

-
-
- - Central Management - SI-3(1) - -

The organization centrally manages malicious code protection mechanisms.

-
- -

Central management is the organization-wide management and implementation of malicious code protection mechanisms. Central management includes planning, implementing, assessing, authorizing, and monitoring the organization-defined, centrally managed flaw malicious code protection security controls.

- AU-2 - SI-8 -
- -

Determine if the organization centrally manages malicious code protection mechanisms.

-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing malicious code protection

-

automated mechanisms supporting centralized management of malicious code protection mechanisms

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for malicious code protection

-
-
- - TEST - -

Organizational processes for central management of malicious code protection mechanisms

-

automated mechanisms supporting and/or implementing central management of malicious code protection mechanisms

-
-
-
- - Automatic Updates - SI-3(2) - -

The information system automatically updates malicious code protection mechanisms.

-
- -

Malicious code protection mechanisms include, for example, signature definitions. Due to information system integrity and availability concerns, organizations give careful consideration to the methodology used to carry out automatic updates.

- SI-8 -
- -

Determine if the information system automatically updates malicious code protection mechanisms.

-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing malicious code protection

-

automated mechanisms supporting centralized management of malicious code protection mechanisms

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for malicious code protection

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing automatic updates to malicious code protection capability

-
-
-
- - Non-privileged Users - SI-3(3) - Withdrawn - AC-6 (10) - - - Updates Only by Privileged Users - SI-3(4) - -

The information system updates malicious code protection mechanisms only when directed by a privileged user.

-
- -

This control enhancement may be appropriate for situations where for reasons of security or operational continuity, updates are only applied when selected/approved by designated organizational personnel.

- AC-6 - CM-5 -
- -

Determine if the information system updates malicious code protection mechanisms only when directed by a privileged user.

-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing malicious code protection

-

information system design documentation

-

malicious code protection mechanisms

-

records of malicious code protection updates

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for malicious code protection

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing malicious code protection capability

-
-
-
- - Portable Storage Devices - SI-3(5) - Withdrawn - MP-7 - - - Testing / Verification - - - - SI-3(6) - -

The organization:

- - (a) -

Tests malicious code protection mechanisms by introducing a known benign, non-spreading test case into the information system; and

-
- - (b) -

Verifies that both detection of the test case and associated incident reporting occur.

-
-
- - CA-2 - CA-7 - RA-5 - - -

Determine if the organization:

- - SI-3(6)(a) - - SI-3(6)(a)[1] -

defines a frequency to test malicious code protection mechanisms;

-
- - SI-3(6)(a)[2] -

tests malicious code protection mechanisms with the organization-defined frequency by introducing a known benign, non-spreading test case into the information system;

-
- SI-3(6)(a) -
- - SI-3(6)(b) - - SI-3(6)(b)[1] -

verifies that detection of the test case occurs; and

-
- - SI-3(6)(b)[2] -

verifies that associated incident reporting occurs.

-
- SI-3(6)(b) -
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing malicious code protection

-

information system design documentation

-

information system configuration settings and associated documentation

-

test cases

-

records providing evidence of test cases executed on malicious code protection mechanisms

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for malicious code protection

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing testing and verification of malicious code protection capability

-
-
-
- - Nonsignature-based Detection - SI-3(7) - -

The information system implements nonsignature-based malicious code detection mechanisms.

-
- -

Nonsignature-based detection mechanisms include, for example, the use of heuristics to detect, analyze, and describe the characteristics or behavior of malicious code and to provide safeguards against malicious code for which signatures do not yet exist or for which existing signatures may not be effective. This includes polymorphic malicious code (i.e., code that changes signatures when it replicates). This control enhancement does not preclude the use of signature-based detection mechanisms.

-
- -

Determine if the information system implements non signature-based malicious code detection mechanisms.

-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing malicious code protection

-

information system design documentation

-

malicious code protection mechanisms

-

records of malicious code protection updates

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for malicious code protection

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing nonsignature-based malicious code protection capability

-
-
-
- - Detect Unauthorized Commands - - - - - - - - - - SI-3(8) - -

The information system detects through the kernel application programming interface at and .

-
- -

This control enhancement can also be applied to critical interfaces other than kernel-based interfaces, including for example, interfaces with virtual machines and privileged applications. Unauthorized operating system commands include, for example, commands for kernel functions from information system processes that are not trusted to initiate such commands, or commands for kernel functions that are suspicious even though commands of that type are reasonable for processes to initiate. Organizations can define the malicious commands to be detected by a combination of command types, command classes, or specific instances of commands. Organizations can define hardware components by specific component, component type, location in the network, or combination therein. Organizations may select different actions for different types/classes/specific instances of potentially malicious commands.

- AU-6 -
- -

Determine if:

- - SI-3(8)[1] -

the organization defines unauthorized operating system commands to be detected by the information system;

-
- - SI-3(8)[2] -

the organization defines information system hardware components for which organization-defined unauthorized operating system commands are to be detected through the kernel application programming interface;

-
- - SI-3(8)[3] -

the information system detects organization-defined unauthorized operating system commands through the kernel application programming interface at organization-defined information system hardware components, and does one or more of the following:

- - SI-3(8)[3][a] -

issues a warning;

-
- - SI-3(8)[3][b] -

audits the command execution; and/or

-
- - SI-3(8)[3][c] -

prevents the execution of the command.

-
-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing malicious code protection

-

information system design documentation

-

malicious code protection mechanisms

-

warning messages sent upon detection of unauthorized operating system command execution

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for malicious code protection

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing malicious code protection capability

-

automated mechanisms supporting and/or implementing detection of unauthorized operating system commands through the kernel application programming interface

-
-
-
- - Authenticate Remote Commands - - - - - - - SI-3(9) - -

The information system implements to authenticate .

-
- -

This control enhancement protects against unauthorized commands and replay of authorized commands. This capability is important for those remote information systems whose loss, malfunction, misdirection, or exploitation would have immediate and/or serious consequences (e.g., injury or death, property damage, loss of high-valued assets or sensitive information, or failure of important missions/business functions). Authentication safeguards for remote commands help to ensure that information systems accept and execute in the order intended, only authorized commands, and that unauthorized commands are rejected. Cryptographic mechanisms can be employed, for example, to authenticate remote commands.

- SC-12 - SC-13 - SC-23 -
- -

Determine if:

- - SI-3(9)[1] -

the organization defines security safeguards to be implemented by the information system to authenticate organization-defined remote commands;

-
- - SI-3(9)[2] -

the organization defines remote commands to be authenticated by organization-defined security safeguards; and

-
- - SI-3(9)[3] -

the information system implements organization-defined security safeguards to authenticate organization-defined remote commands.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing malicious code protection

-

information system design documentation

-

malicious code protection mechanisms

-

warning messages sent upon detection of unauthorized operating system command execution

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for malicious code protection

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing malicious code protection capability

-

automated mechanisms implementing authentication of remote commands

-

automated mechanisms supporting and/or implementing security safeguards to authenticate remote commands

-
-
-
- - Malicious Code Analysis - - - - SI-3(10) - -

The organization:

- - (a) -

Employs to analyze the characteristics and behavior of malicious code; and

-
- - (b) -

Incorporates the results from malicious code analysis into organizational incident response and flaw remediation processes.

-
-
- -

The application of selected malicious code analysis tools and techniques provides organizations with a more in-depth understanding of adversary tradecraft (i.e., tactics, techniques, and procedures) and the functionality and purpose of specific instances of malicious code. Understanding the characteristics of malicious code facilitates more effective organizational responses to current and future threats. Organizations can conduct malicious code analyses by using reverse engineering techniques or by monitoring the behavior of executing code.

-
- -

Determine if the organization:

- - SI-3(10)(a) - - SI-3(10)(a)[1] -

defines tools and techniques to be employed to analyze the characteristics and behavior of malicious code;

-
- - SI-3(10)(a)[2] -

employs organization-defined tools and techniques to analyze the characteristics and behavior of malicious code; and

-
- SI-3(10)(a) -
- - SI-3(10)(b) -

incorporates the results from malicious code analysis into incident response and flaw remediate processes.

- SI-3(10)(b) -
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing malicious code protection

-

procedures addressing incident response

-

procedures addressing flaw remediation

-

information system design documentation

-

malicious code protection mechanisms, tools, and techniques

-

information system configuration settings and associated documentation

-

results from malicious code analyses

-

records of flaw remediation events resulting from malicious code analyses

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for malicious code protection

-

organizational personnel responsible for flaw remediation

-

organizational personnel responsible for incident response/management

-
-
- - TEST - -

Organizational process for incident response

-

organizational process for flaw remediation

-

automated mechanisms supporting and/or implementing malicious code protection capability

-

tools and techniques for analysis of malicious code characteristics and behavior

-
-
-
- - NIST Special Publication 800-83 - -
- - Information System Monitoring - - - - - - - - - - - - - - - - - - - SI-4 - -

The organization:

- - a. -

Monitors the information system to detect:

- - 1. -

Attacks and indicators of potential attacks in accordance with ; and

-
- - 2. -

Unauthorized local, network, and remote connections;

-
-
- - b. -

Identifies unauthorized use of the information system through ;

-
- - c. -

Deploys monitoring devices:

- - 1. -

Strategically within the information system to collect organization-determined essential information; and

-
- - 2. -

At ad hoc locations within the system to track specific types of transactions of interest to the organization;

-
-
- - d. -

Protects information obtained from intrusion-monitoring tools from unauthorized access, modification, and deletion;

-
- - e. -

Heightens the level of information system monitoring activity whenever there is an indication of increased risk to organizational operations and assets, individuals, other organizations, or the Nation based on law enforcement information, intelligence information, or other credible sources of information;

-
- - f. -

Obtains legal opinion with regard to information system monitoring activities in accordance with applicable federal laws, Executive Orders, directives, policies, or regulations; and

-
- - g. -

Provides to - .

-
-
- -

Information system monitoring includes external and internal monitoring. External monitoring includes the observation of events occurring at the information system boundary (i.e., part of perimeter defense and boundary protection). Internal monitoring includes the observation of events occurring within the information system. Organizations can monitor information systems, for example, by observing audit activities in real time or by observing other system aspects such as access patterns, characteristics of access, and other actions. The monitoring objectives may guide determination of the events. Information system monitoring capability is achieved through a variety of tools and techniques (e.g., intrusion detection systems, intrusion prevention systems, malicious code protection software, scanning tools, audit record monitoring software, network monitoring software). Strategic locations for monitoring devices include, for example, selected perimeter locations and near server farms supporting critical applications, with such devices typically being employed at the managed interfaces associated with controls SC-7 and AC-17. Einstein network monitoring devices from the Department of Homeland Security can also be included as monitoring devices. The granularity of monitoring information collected is based on organizational monitoring objectives and the capability of information systems to support such objectives. Specific types of transactions of interest include, for example, Hyper Text Transfer Protocol (HTTP) traffic that bypasses HTTP proxies. Information system monitoring is an integral part of organizational continuous monitoring and incident response programs. Output from system monitoring serves as input to continuous monitoring and incident response programs. A network connection is any connection with a device that communicates through a network (e.g., local area network, Internet). A remote connection is any connection with a device communicating through an external network (e.g., the Internet). Local, network, and remote connections can be either wired or wireless.

- AC-3 - AC-4 - AC-8 - AC-17 - AU-2 - AU-6 - AU-7 - AU-9 - AU-12 - CA-7 - IR-4 - PE-3 - RA-5 - SC-7 - SC-26 - SC-35 - SI-3 - SI-7 -
- -

Determine if the organization:

- - SI-4(a) - - SI-4(a)(1) - - SI-4(a)(1)[1] -

defines monitoring objectives to detect attacks and indicators of potential attacks on the information system;

-
- - SI-4(a)(1)[2] -

monitors the information system to detect, in accordance with organization-defined monitoring objectives,:

- - SI-4(a)(1)[2][a] -

attacks;

-
- - SI-4(a)(1)[2][b] -

indicators of potential attacks;

-
-
-
- - SI-4(a)(2) -

monitors the information system to detect unauthorized:

- - SI-4(a)(2)[1] -

local connections;

-
- - SI-4(a)(2)[2] -

network connections;

-
- - SI-4(a)(2)[3] -

remote connections;

-
-
-
- - SI-4(b) - - SI-4(b)(1) -

defines techniques and methods to identify unauthorized use of the information system;

-
- - SI-4(b)(2) -

identifies unauthorized use of the information system through organization-defined techniques and methods;

-
-
- - SI-4(c) -

deploys monitoring devices:

- - SI-4(c)[1] -

strategically within the information system to collect organization-determined essential information;

-
- - SI-4(c)[2] -

at ad hoc locations within the system to track specific types of transactions of interest to the organization;

-
-
- - SI-4(d) -

protects information obtained from intrusion-monitoring tools from unauthorized:

- - SI-4(d)[1] -

access;

-
- - SI-4(d)[2] -

modification;

-
- - SI-4(d)[3] -

deletion;

-
-
- - SI-4(e) -

heightens the level of information system monitoring activity whenever there is an indication of increased risk to organizational operations and assets, individuals, other organizations, or the Nation based on law enforcement information, intelligence information, or other credible sources of information;

-
- - SI-4(f) -

obtains legal opinion with regard to information system monitoring activities in accordance with applicable federal laws, Executive Orders, directives, policies, or regulations;

-
- - SI-4(g) - - SI-4(g)[1] -

defines personnel or roles to whom information system monitoring information is to be provided;

-
- - SI-4(g)[2] -

defines information system monitoring information to be provided to organization-defined personnel or roles;

-
- - SI-4(g)[3] -

defines a frequency to provide organization-defined information system monitoring to organization-defined personnel or roles;

-
- - SI-4(g)[4] -

provides organization-defined information system monitoring information to organization-defined personnel or roles one or more of the following:

- - SI-4(g)[4][a] -

as needed; and/or

-
- - SI-4(g)[4][b] -

with the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

Continuous monitoring strategy

-

system and information integrity policy

-

procedures addressing information system monitoring tools and techniques

-

facility diagram/layout

-

information system design documentation

-

information system monitoring tools and techniques documentation

-

locations within information system where monitoring devices are deployed

-

information system configuration settings and associated documentation

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility monitoring the information system

-
-
- - TEST - -

Organizational processes for information system monitoring

-

automated mechanisms supporting and/or implementing information system monitoring capability

-
-
- - System-wide Intrusion Detection System - SI-4(1) - -

The organization connects and configures individual intrusion detection tools into an information system-wide intrusion detection system.

-
- -

Determine if the organization:

- - SI-4(1)[1] -

connects individual intrusion detection tools into an information system-wide intrusion detection system; and

-
- - SI-4(1)[2] -

configures individual intrusion detection tools into an information system-wide intrusion detection system.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring tools and techniques

-

information system design documentation

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-

organizational personnel with responsibility for the intrusion detection system

-
-
- - TEST - -

Organizational processes for intrusion detection/information system monitoring

-

automated mechanisms supporting and/or implementing intrusion detection capability

-
-
-
- - Automated Tools for Real-time Analysis - SI-4(2) - -

The organization employs automated tools to support near real-time analysis of events.

-
- -

Automated tools include, for example, host-based, network-based, transport-based, or storage-based event monitoring tools or Security Information and Event Management (SIEM) technologies that provide real time analysis of alerts and/or notifications generated by organizational information systems.

-
- -

Determine if the organization employs automated tools to support near real-time analysis of events.

-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring tools and techniques

-

information system design documentation

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-

organizational personnel with responsibility for incident response/management

-
-
- - TEST - -

Organizational processes for near real-time analysis of events

-

organizational processes for information system monitoring

-

automated mechanisms supporting and/or implementing information system monitoring

-

automated mechanisms/tools supporting and/or implementing analysis of events

-
-
-
- - Automated Tool Integration - SI-4(3) - -

The organization employs automated tools to integrate intrusion detection tools into access control and flow control mechanisms for rapid response to attacks by enabling reconfiguration of these mechanisms in support of attack isolation and elimination.

-
- -

Determine if the organization, for rapid response to attacks by enabling reconfiguration of intrusion detection tools in support of attack isolation and elimination, employs automated tools to integrate intrusion detection tools into:

- - SI-4(3)[1] -

access control mechanisms; and

-
- - SI-4(3)[2] -

flow control mechanisms.

-
-
- - EXAMINE - -

System and information integrity policy

-

access control policy and procedures

-

procedures addressing information system monitoring tools and techniques

-

information system design documentation

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-

organizational personnel with responsibility for the intrusion detection system

-
-
- - TEST - -

Organizational processes for intrusion detection/information system monitoring

-

automated mechanisms supporting and/or implementing intrusion detection/information system monitoring capability

-

automated mechanisms/tools supporting and/or implementing access/flow control capability

-

automated mechanisms/tools supporting and/or implementing integration of intrusion detection tools into access/flow control mechanisms

-
-
-
- - Inbound and Outbound Communications Traffic - - - - SI-4(4) - -

The information system monitors inbound and outbound communications traffic for unusual or unauthorized activities or conditions.

-
- -

Unusual/unauthorized activities or conditions related to information system inbound and outbound communications traffic include, for example, internal traffic that indicates the presence of malicious code within organizational information systems or propagating among system components, the unauthorized exporting of information, or signaling to external information systems. Evidence of malicious code is used to identify potentially compromised information systems or information system components.

-
- -

Determine if the organization:

- - SI-4(4)[1] -

defines a frequency to monitor:

- - SI-4(4)[1][a] -

inbound communications traffic for unusual or unauthorized activities or conditions;

-
- - SI-4(4)[1][b] -

outbound communications traffic for unusual or unauthorized activities or conditions;

-
-
- - SI-4(4)[2] -

monitors, with the organization-defined frequency:

- - SI-4(4)[2][a] -

inbound communications traffic for unusual or unauthorized activities or conditions; and

-
- - SI-4(4)[2][b] -

outbound communications traffic for unusual or unauthorized activities or conditions.

-
-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring tools and techniques

-

information system design documentation

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

information system protocols

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-

organizational personnel with responsibility for the intrusion detection system

-
-
- - TEST - -

Organizational processes for intrusion detection/information system monitoring

-

automated mechanisms supporting and/or implementing intrusion detection capability/information system monitoring

-

automated mechanisms supporting and/or implementing monitoring of inbound/outbound communications traffic

-
-
-
- - System-generated Alerts - - - - - - - SI-4(5) - -

The information system alerts when the following indications of compromise or potential compromise occur: .

-
- -

Alerts may be generated from a variety of sources, including, for example, audit records or inputs from malicious code protection mechanisms, intrusion detection or prevention mechanisms, or boundary protection devices such as firewalls, gateways, and routers. Alerts can be transmitted, for example, telephonically, by electronic mail messages, or by text messaging. Organizational personnel on the notification list can include, for example, system administrators, mission/business owners, system owners, or information system security officers.

- AU-5 - PE-6 -
- -

Determine if:

- - SI-4(5)[1] -

the organization defines compromise indicators for the information system;

-
- - SI-4(5)[2] -

the organization defines personnel or roles to be alerted when indications of compromise or potential compromise occur; and

-
- - SI-4(5)[3] -

the information system alerts organization-defined personnel or roles when organization-defined compromise indicators occur.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring tools and techniques

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

alerts/notifications generated based on compromise indicators

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-

organizational personnel with responsibility for the intrusion detection system

-
-
- - TEST - -

Organizational processes for intrusion detection/information system monitoring

-

automated mechanisms supporting and/or implementing intrusion detection/information system monitoring capability

-

automated mechanisms supporting and/or implementing alerts for compromise indicators

-
-
-
- - Restrict Non-privileged Users - SI-4(6) - Withdrawn - AC-6 (10) - - - Automated Response to Suspicious Events - - - - - - - SI-4(7) - -

The information system notifies of detected suspicious events and takes .

-
- -

Least-disruptive actions may include, for example, initiating requests for human responses.

-
- -

Determine if:

- - SI-4(7)[1] -

the organization defines incident response personnel (identified by name and/or by role) to be notified of detected suspicious events;

-
- - SI-4(7)[2] -

the organization defines least-disruptive actions to be taken by the information system to terminate suspicious events;

-
- - SI-4(7)[3] -

the information system notifies organization-defined incident response personnel of detected suspicious events; and

-
- - SI-4(7)[4] -

the information system takes organization-defined least-disruptive actions to terminate suspicious events.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring tools and techniques

-

information system design documentation

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

alerts/notifications generated based on detected suspicious events

-

records of actions taken to terminate suspicious events

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-

organizational personnel with responsibility for the intrusion detection system

-
-
- - TEST - -

Organizational processes for intrusion detection/information system monitoring

-

automated mechanisms supporting and/or implementing intrusion detection/information system monitoring capability

-

automated mechanisms supporting and/or implementing notifications to incident response personnel

-

automated mechanisms supporting and/or implementing actions to terminate suspicious events

-
-
-
- - Protection of Monitoring Information - SI-4(8) - Withdrawn - SI-4 - - - Testing of Monitoring Tools - - - - SI-4(9) - -

The organization tests intrusion-monitoring tools .

-
- -

Testing intrusion-monitoring tools is necessary to ensure that the tools are operating correctly and continue to meet the monitoring objectives of organizations. The frequency of testing depends on the types of tools used by organizations and methods of deployment.

- CP-9 -
- -

Determine if the organization:

- - SI-4(9)[1] -

defines a frequency to test intrusion-monitoring tools; and

-
- - SI-4(9)[2] -

tests intrusion-monitoring tools with the organization-defined frequency.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing testing of information system monitoring tools and techniques

-

documentation providing evidence of testing intrusion-monitoring tools

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-

organizational personnel with responsibility for the intrusion detection system

-
-
- - TEST - -

Organizational processes for intrusion detection/information system monitoring

-

automated mechanisms supporting and/or implementing intrusion detection/information system monitoring capability

-

automated mechanisms supporting and/or implementing testing of intrusion-monitoring tools

-
-
-
- - Visibility of Encrypted Communications - - - - - - - SI-4(10) - -

The organization makes provisions so that is visible to .

-
- -

Organizations balance the potentially conflicting needs for encrypting communications traffic and for having insight into such traffic from a monitoring perspective. For some organizations, the need to ensure the confidentiality of communications traffic is paramount; for others, mission-assurance is of greater concern. Organizations determine whether the visibility requirement applies to internal encrypted traffic, encrypted traffic intended for external destinations, or a subset of the traffic types.

-
- -

Determine if the organization:

- - SI-4(10)[1] -

defines encrypted communications traffic required to be visible to information system monitoring tools;

-
- - SI-4(10)[2] -

defines information system monitoring tools to be provided access to organization-defined encrypted communications traffic; and

-
- - SI-4(10)[3] -

makes provisions so that organization-defined encrypted communications traffic is visible to organization-defined information system monitoring tools.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring tools and techniques

-

information system design documentation

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

information system protocols

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-

organizational personnel with responsibility for the intrusion detection system

-
-
- - TEST - -

Organizational processes for intrusion detection/information system monitoring

-

automated mechanisms supporting and/or implementing intrusion detection/information system monitoring capability

-

automated mechanisms supporting and/or implementing visibility of encrypted communications traffic to monitoring tools

-
-
-
- - Analyze Communications Traffic Anomalies - - - - SI-4(11) - -

The organization analyzes outbound communications traffic at the external boundary of the information system and selected to discover anomalies.

-
- -

Anomalies within organizational information systems include, for example, large file transfers, long-time persistent connections, unusual protocols and ports in use, and attempted communications with suspected malicious external addresses.

-
- -

Determine if the organization:

- - SI-4(11)[1] -

defines interior points within the system (e.g., subnetworks, subsystems) where communications traffic is to be analyzed;

-
- - SI-4(11)[2] -

analyzes outbound communications traffic to discover anomalies at:

- - SI-4(11)[2][a] -

the external boundary of the information system; and

-
- - SI-4(11)[2][b] -

selected organization-defined interior points within the system.

-
-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring tools and techniques

-

information system design documentation

-

network diagram

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

information system monitoring logs or records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-

organizational personnel with responsibility for the intrusion detection system

-
-
- - TEST - -

Organizational processes for intrusion detection/information system monitoring

-

automated mechanisms supporting and/or implementing intrusion detection/information system monitoring capability

-

automated mechanisms supporting and/or implementing analysis of communications traffic

-
-
-
- - Automated Alerts - - - - SI-4(12) - -

The organization employs automated mechanisms to alert security personnel of the following inappropriate or unusual activities with security implications: .

-
- -

This control enhancement focuses on the security alerts generated by organizations and transmitted using automated means. In contrast to the alerts generated by information systems in SI-4 (5), which tend to focus on information sources internal to the systems (e.g., audit records), the sources of information for this enhancement can include other entities as well (e.g., suspicious activity reports, reports on potential insider threats).

- AC-18 - IA-3 -
- -

Determine if the organization:

- - SI-4(12)[1] -

defines activities that trigger alerts to security personnel based on inappropriate or unusual activities with security implications; and

-
- - SI-4(12)[2] -

employs automated mechanisms to alert security personnel of organization-defined activities that trigger alerts based on inappropriate or unusual activities with security implications.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring tools and techniques

-

information system design documentation

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

list of inappropriate or unusual activities (with security implications) that trigger alerts

-

alerts/notifications provided to security personnel

-

information system monitoring logs or records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developers

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-

organizational personnel with responsibility for the intrusion detection system

-
-
- - TEST - -

Organizational processes for intrusion detection/information system monitoring

-

automated mechanisms supporting and/or implementing intrusion detection/information system monitoring capability

-

automated mechanisms supporting and/or implementing automated alerts to security personnel

-
-
-
- - Analyze Traffic / Event Patterns - SI-4(13) - -

The organization:

- - (a) -

Analyzes communications traffic/event patterns for the information system;

-
- - (b) -

Develops profiles representing common traffic patterns and/or events; and

-
- - (c) -

Uses the traffic/event profiles in tuning system-monitoring devices to reduce the number of false positives and the number of false negatives.

-
-
- -

Determine if the organization:

- - SI-4(13)(a) -

analyzes communications traffic/event patterns for the information system;

- SI-4(13)(a) -
- - SI-4(13)(b) -

develops profiles representing common traffic patterns and/or events;

- SI-4(13)(b) -
- - SI-4(13)(c) -

uses the traffic/event profiles in tuning system-monitoring devices to reduce the number of false positives and false negatives.

- SI-4(13)(c) -
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring tools and techniques

-

information system design documentation

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

list of profiles representing common traffic patterns and/or events

-

information system protocols documentation

-

list of acceptable thresholds for false positives and false negatives

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-

organizational personnel with responsibility for the intrusion detection system

-
-
- - TEST - -

Organizational processes for intrusion detection/information system monitoring

-

automated mechanisms supporting and/or implementing intrusion detection/information system monitoring capability

-

automated mechanisms supporting and/or implementing analysis of communications traffic/event patterns

-
-
-
- - Wireless Intrusion Detection - SI-4(14) - -

The organization employs a wireless intrusion detection system to identify rogue wireless devices and to detect attack attempts and potential compromises/breaches to the information system.

-
- -

Wireless signals may radiate beyond the confines of organization-controlled facilities. Organizations proactively search for unauthorized wireless connections including the conduct of thorough scans for unauthorized wireless access points. Scans are not limited to those areas within facilities containing information systems, but also include areas outside of facilities as needed, to verify that unauthorized wireless access points are not connected to the systems.

- AC-18 - IA-3 -
- -

Determine if the organization employs a wireless intrusion detection system to:

- - SI-4(14)[1] -

identify rogue wireless devices;

-
- - SI-4(14)[2] -

detect attack attempts to the information system; and

-
- - SI-4(14)[3] -

detect potential compromises/breaches to the information system.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring tools and techniques

-

information system design documentation

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

information system protocols

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-

organizational personnel with responsibility for the intrusion detection system

-
-
- - TEST - -

Organizational processes for intrusion detection

-

automated mechanisms supporting and/or implementing wireless intrusion detection capability

-
-
-
- - Wireless to Wireline Communications - SI-4(15) - -

The organization employs an intrusion detection system to monitor wireless communications traffic as the traffic passes from wireless to wireline networks.

-
- - AC-18 - - -

Determine if the organization employs an intrusion detection system to monitor wireless communications traffic as the traffic passes from wireless to wireline networks.

-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring tools and techniques

-

information system design documentation

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

information system protocols documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-

organizational personnel with responsibility for the intrusion detection system

-
-
- - TEST - -

Organizational processes for intrusion detection/information system monitoring

-

automated mechanisms supporting and/or implementing intrusion detection/information system monitoring capability

-

automated mechanisms supporting and/or implementing wireless intrusion detection capability

-
-
-
- - Correlate Monitoring Information - SI-4(16) - -

The organization correlates information from monitoring tools employed throughout the information system.

-
- -

Correlating information from different monitoring tools can provide a more comprehensive view of information system activity. The correlation of monitoring tools that usually work in isolation (e.g., host monitoring, network monitoring, anti-virus software) can provide an organization-wide view and in so doing, may reveal otherwise unseen attack patterns. Understanding the capabilities/limitations of diverse monitoring tools and how to maximize the utility of information generated by those tools can help organizations to build, operate, and maintain effective monitoring programs.

- AU-6 -
- -

Determine if the organization correlates information from monitoring tools employed throughout the information system.

-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring tools and techniques

-

information system design documentation

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

event correlation logs or records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-

organizational personnel with responsibility for the intrusion detection system

-
-
- - TEST - -

Organizational processes for intrusion detection/information system monitoring

-

automated mechanisms supporting and/or implementing intrusion detection/information system monitoring capability

-

automated mechanisms supporting and/or implementing correlation of information from monitoring tools

-
-
-
- - Integrated Situational Awareness - SI-4(17) - -

The organization correlates information from monitoring physical, cyber, and supply chain activities to achieve integrated, organization-wide situational awareness.

-
- -

This control enhancement correlates monitoring information from a more diverse set of information sources to achieve integrated situational awareness. Integrated situational awareness from a combination of physical, cyber, and supply chain monitoring activities enhances the capability of organizations to more quickly detect sophisticated cyber attacks and investigate the methods and techniques employed to carry out such attacks. In contrast to SI-4 (16) which correlates the various cyber monitoring information, this control enhancement correlates monitoring beyond just the cyber domain. Such monitoring may help reveal attacks on organizations that are operating across multiple attack vectors.

- SA-12 -
- -

Determine if the organization, to achieve integrated, organization-wide situational awareness, correlates information from monitoring:

- - SI-4(17)[1] -

physical activities;

-
- - SI-4(17)[2] -

cyber activities; and

-
- - SI-4(17)[3] -

supply chain activities.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring tools and techniques

-

information system design documentation

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

event correlation logs or records resulting from physical, cyber, and supply chain activities

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-

organizational personnel with responsibility for the intrusion detection system

-
-
- - TEST - -

Organizational processes for intrusion detection/information system monitoring

-

automated mechanisms supporting and/or implementing intrusion detection/system monitoring capability

-

automated mechanisms supporting and/or implementing correlation of information from monitoring tools

-
-
-
- - Analyze Traffic / Covert Exfiltration - - - - SI-4(18) - -

The organization analyzes outbound communications traffic at the external boundary of the information system (i.e., system perimeter) and at to detect covert exfiltration of information.

-
- -

Covert means that can be used for the unauthorized exfiltration of organizational information include, for example, steganography.

-
- -

Determine if the organization:

- - SI-4(18)[1] -

defines interior points within the system (e.g., subsystems, subnetworks) where communications traffic is to be analyzed;

-
- - SI-4(18)[2] -

to detect covert exfiltration of information, analyzes outbound communications traffic at:

- - SI-4(18)[2][a] -

the external boundary of the information system (i.e., system perimeter); and

-
- - SI-4(18)[2][b] -

organization-defined interior points within the system.

-
-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring tools and techniques

-

information system design documentation

-

network diagram

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

information system monitoring logs or records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-

organizational personnel with responsibility for the intrusion detection system

-
-
- - TEST - -

Organizational processes for intrusion detection/information system monitoring

-

automated mechanisms supporting and/or implementing intrusion detection/system monitoring capability

-

automated mechanisms supporting and/or implementing analysis of outbound communications traffic

-
-
-
- - Individuals Posing Greater Risk - - - - - - - SI-4(19) - -

The organization implements of individuals who have been identified by as posing an increased level of risk.

-
- -

Indications of increased risk from individuals can be obtained from a variety of sources including, for example, human resource records, intelligence agencies, law enforcement organizations, and/or other credible sources. The monitoring of individuals is closely coordinated with management, legal, security, and human resources officials within organizations conducting such monitoring and complies with federal legislation, Executive Orders, policies, directives, regulations, and standards.

-
- -

Determine if the organization:

- - SI-4(19)[1] -

defines sources that identify individuals who pose an increased level of risk;

-
- - SI-4(19)[2] -

defines additional monitoring to be implemented on individuals who have been identified by organization-defined sources as posing an increased level of risk; and

-
- - SI-4(19)[3] -

implements organization-defined additional monitoring of individuals who have been identified by organization-defined sources as posing an increased level of risk.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring

-

information system design documentation

-

list of individuals who have been identified as posing an increased level of risk

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-
-
- - TEST - -

Organizational processes for information system monitoring

-

automated mechanisms supporting and/or implementing system monitoring capability

-
-
-
- - Privileged Users - - - - SI-4(20) - -

The organization implements of privileged users.

-
- -

Determine if the organization:

- - SI-4(20)[1] -

defines additional monitoring to be implemented on privileged users; and

-
- - SI-4(20)[2] -

implements organization-defined additional monitoring of privileged users;

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring tools and techniques

-

information system design documentation

-

list of privileged users

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

information system monitoring logs or records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-
-
- - TEST - -

Organizational processes for information system monitoring

-

automated mechanisms supporting and/or implementing system monitoring capability

-
-
-
- - Probationary Periods - - - - - - - SI-4(21) - -

The organization implements of individuals during .

-
- -

Determine if the organization:

- - SI-4(21)[1] -

defines additional monitoring to be implemented on individuals during probationary periods;

-
- - SI-4(21)[2] -

defines probationary period during which organization-defined additional monitoring of individuals is to be performed; and

-
- - SI-4(21)[3] -

implements organization-defined additional monitoring of individuals during organization-defined probationary period.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring

-

information system design documentation

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

information system monitoring logs or records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-
-
- - TEST - -

Organizational processes for information system monitoring

-

automated mechanisms supporting and/or implementing system monitoring capability

-
-
-
- - Unauthorized Network Services - - - - - - - - - - SI-4(22) - -

The information system detects network services that have not been authorized or approved by and .

-
- -

Unauthorized or unapproved network services include, for example, services in service-oriented architectures that lack organizational verification or validation and therefore may be unreliable or serve as malicious rogues for valid services.

- AC-6 - CM-7 - SA-5 - SA-9 -
- -

Determine if:

- - SI-4(22)[1] -

the organization defines authorization or approval processes for network services;

-
- - SI-4(22)[2] -

the organization defines personnel or roles to be alerted upon detection of network services that have not been authorized or approved by organization-defined authorization or approval processes;

-
- - SI-4(22)[3] -

the information system detects network services that have not been authorized or approved by organization-defined authorization or approval processes and does one or more of the following:

- - SI-4(22)[3][a] -

audits; and/or

-
- - SI-4(22)[3][b] -

alerts organization-defined personnel or roles.

-
-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring tools and techniques

-

information system design documentation

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

documented authorization/approval of network services

-

notifications or alerts of unauthorized network services

-

information system monitoring logs or records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring the information system

-
-
- - TEST - -

Organizational processes for information system monitoring

-

automated mechanisms supporting and/or implementing system monitoring capability

-

automated mechanisms for auditing network services

-

automated mechanisms for providing alerts

-
-
-
- - Host-based Devices - - - - - - - SI-4(23) - -

The organization implements at .

-
- -

Information system components where host-based monitoring can be implemented include, for example, servers, workstations, and mobile devices. Organizations consider employing host-based monitoring mechanisms from multiple information technology product developers.

-
- -

Determine if the organization:

- - SI-4(23)[1] -

defines host-based monitoring mechanisms to be implemented;

-
- - SI-4(23)[2] -

defines information system components where organization-defined host-based monitoring is to be implemented; and

-
- - SI-4(23)[3] -

implements organization-defined host-based monitoring mechanisms at organization-defined information system components.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring tools and techniques

-

information system design documentation

-

host-based monitoring mechanisms

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

list of information system components requiring host-based monitoring

-

information system monitoring logs or records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring information system hosts

-
-
- - TEST - -

Organizational processes for information system monitoring

-

automated mechanisms supporting and/or implementing host-based monitoring capability

-
-
-
- - Indicators of Compromise - SI-4(24) - -

The information system discovers, collects, distributes, and uses indicators of compromise.

-
- -

Indicators of compromise (IOC) are forensic artifacts from intrusions that are identified on organizational information systems (at the host or network level). IOCs provide organizations with valuable information on objects or information systems that have been compromised. IOCs for the discovery of compromised hosts can include for example, the creation of registry key values. IOCs for network traffic include, for example, Universal Resource Locator (URL) or protocol elements that indicate malware command and control servers. The rapid distribution and adoption of IOCs can improve information security by reducing the time that information systems and organizations are vulnerable to the same exploit or attack.

-
- -

Determine if the information system:

- - SI-4(24)[1] -

discovers indicators of compromise;

-
- - SI-4(24)[2] -

collects indicators of compromise;

-
- - SI-4(24)[3] -

distributes indicators of compromise; and

-
- - SI-4(24)[4] -

uses indicators of compromise.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system monitoring

-

information system design documentation

-

information system monitoring tools and techniques documentation

-

information system configuration settings and associated documentation

-

information system monitoring logs or records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

System/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-

organizational personnel installing, configuring, and/or maintaining the information system

-

organizational personnel with responsibility for monitoring information system hosts

-
-
- - TEST - -

Organizational processes for information system monitoring

-

organizational processes for discovery, collection, distribution, and use of indicators of compromise

-

automated mechanisms supporting and/or implementing system monitoring capability

-

automated mechanisms supporting and/or implementing the discovery, collection, distribution, and use of indicators of compromise

-
-
-
- - NIST Special Publication 800-61 - - NIST Special Publication 800-83 - - NIST Special Publication 800-92 - - NIST Special Publication 800-94 - - NIST Special Publication 800-137 - -
- - Security Alerts, Advisories, and Directives - - - - - - - - - - - - - - - - SI-5 - -

The organization:

- - a. -

Receives information system security alerts, advisories, and directives from on an ongoing basis;

-
- - b. -

Generates internal security alerts, advisories, and directives as deemed necessary;

-
- - c. -

Disseminates security alerts, advisories, and directives to: ; and

-
- - d. -

Implements security directives in accordance with established time frames, or notifies the issuing organization of the degree of noncompliance.

-
-
- -

The United States Computer Emergency Readiness Team (US-CERT) generates security alerts and advisories to maintain situational awareness across the federal government. Security directives are issued by OMB or other designated organizations with the responsibility and authority to issue such directives. Compliance to security directives is essential due to the critical nature of many of these directives and the potential immediate adverse effects on organizational operations and assets, individuals, other organizations, and the Nation should the directives not be implemented in a timely manner. External organizations include, for example, external mission/business partners, supply chain partners, external service providers, and other peer/supporting organizations.

- SI-2 -
- -

Determine if the organization:

- - SI-5(a) - - SI-5(a)[1] -

defines external organizations from whom information system security alerts, advisories and directives are to be received;

-
- - SI-5(a)[2] -

receives information system security alerts, advisories, and directives from organization-defined external organizations on an ongoing basis;

-
-
- - SI-5(b) -

generates internal security alerts, advisories, and directives as deemed necessary;

-
- - SI-5(c) - - SI-5(c)[1] -

defines personnel or roles to whom security alerts, advisories, and directives are to be provided;

-
- - SI-5(c)[2] -

defines elements within the organization to whom security alerts, advisories, and directives are to be provided;

-
- - SI-5(c)[3] -

defines external organizations to whom security alerts, advisories, and directives are to be provided;

-
- - SI-5(c)[4] -

disseminates security alerts, advisories, and directives to one or more of the following:

- - SI-5(c)[4][a] -

organization-defined personnel or roles;

-
- - SI-5(c)[4][b] -

organization-defined elements within the organization; and/or

-
- - SI-5(c)[4][c] -

organization-defined external organizations; and

-
-
-
- - SI-5(d) - - SI-5(d)[1] -

implements security directives in accordance with established time frames; or

-
- - SI-5(d)[2] -

notifies the issuing organization of the degree of noncompliance.

-
-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing security alerts, advisories, and directives

-

records of security alerts and advisories

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security alert and advisory responsibilities

-

organizational personnel implementing, operating, maintaining, and using the information system

-

organizational personnel, organizational elements, and/or external organizations to whom alerts, advisories, and directives are to be disseminated

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for defining, receiving, generating, disseminating, and complying with security alerts, advisories, and directives

-

automated mechanisms supporting and/or implementing definition, receipt, generation, and dissemination of security alerts, advisories, and directives

-

automated mechanisms supporting and/or implementing security directives

-
-
- - Automated Alerts and Advisories - SI-5(1) - -

The organization employs automated mechanisms to make security alert and advisory information available throughout the organization.

-
- -

The significant number of changes to organizational information systems and the environments in which those systems operate requires the dissemination of security-related information to a variety of organizational entities that have a direct interest in the success of organizational missions and business functions. Based on the information provided by the security alerts and advisories, changes may be required at one or more of the three tiers related to the management of information security risk including the governance level, mission/business process/enterprise architecture level, and the information system level.

-
- -

Determine if the organization employs automated mechanisms to make security alert and advisory information available throughout the organization.

-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing security alerts, advisories, and directives

-

information system design documentation

-

information system configuration settings and associated documentation

-

automated mechanisms supporting the distribution of security alert and advisory information

-

records of security alerts and advisories

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security alert and advisory responsibilities

-

organizational personnel implementing, operating, maintaining, and using the information system

-

organizational personnel, organizational elements, and/or external organizations to whom alerts and advisories are to be disseminated

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for defining, receiving, generating, and disseminating security alerts and advisories

-

automated mechanisms supporting and/or implementing dissemination of security alerts and advisories

-
-
-
- - NIST Special Publication 800-40 - -
- - Security Function Verification - - - - - - - - - - - - - - - - - - - - - - SI-6 - -

The information system:

- - a. -

Verifies the correct operation of ;

-
- - b. -

Performs this verification ;

-
- - c. -

Notifies of failed security verification tests; and

-
- - d. -

- when anomalies are discovered.

-
-
- -

Transitional states for information systems include, for example, system startup, restart, shutdown, and abort. Notifications provided by information systems include, for example, electronic alerts to system administrators, messages to local computer consoles, and/or hardware indications such as lights.

- CA-7 - CM-6 -
- -

Determine if:

- - SI-6(a) - - SI-6(a)[1] -

the organization defines security functions to be verified for correct operation;

-
- - SI-6(a)[2] -

the information system verifies the correct operation of organization-defined security functions;

-
-
- - SI-6(b) - - SI-6(b)[1] -

the organization defines system transitional states requiring verification of organization-defined security functions;

-
- - SI-6(b)[2] -

the organization defines a frequency to verify the correct operation of organization-defined security functions;

-
- - SI-6(b)[3] -

the information system performs this verification one or more of the following:

- - SI-6(b)[3][a] -

at organization-defined system transitional states;

-
- - SI-6(b)[3][b] -

upon command by user with appropriate privilege; and/or

-
- - SI-6(b)[3][c] -

with the organization-defined frequency;

-
-
-
- - SI-6(c) - - SI-6(c)[1] -

the organization defines personnel or roles to be notified of failed security verification tests;

-
- - SI-6(c)[2] -

the information system notifies organization-defined personnel or roles of failed security verification tests;

-
-
- - SI-6(d) - - SI-6(d)[1] -

the organization defines alternative action(s) to be performed when anomalies are discovered;

-
- - SI-6(d)[2] -

the information system performs one or more of the following actions when anomalies are discovered:

- - SI-6(d)[2][a] -

shuts the information system down;

-
- - SI-6(d)[2][b] -

restarts the information system; and/or

-
- - SI-6(d)[2][c] -

performs organization-defined alternative action(s).

-
-
-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing security function verification

-

information system design documentation

-

information system configuration settings and associated documentation

-

alerts/notifications of failed security verification tests

-

list of system transition states requiring security functionality verification

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security function verification responsibilities

-

organizational personnel implementing, operating, and maintaining the information system

-

system/network administrators

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Organizational processes for security function verification

-

automated mechanisms supporting and/or implementing security function verification capability

-
-
- - Notification of Failed Security Tests - SI-6(1) - Withdrawn - SI-6 - - - Automation Support for Distributed Testing - SI-6(2) - -

The information system implements automated mechanisms to support the management of distributed security testing.

-
- - SI-2 - - -

Determine if the information system implements automated mechanisms to support the management of distributed security testing.

-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing security function verification

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security function verification responsibilities

-

organizational personnel implementing, operating, and maintaining the information system

-

system/network administrators

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for security function verification

-

automated mechanisms supporting and/or implementing the management of distributed security testing

-
-
-
- - Report Verification Results - - - - SI-6(3) - -

The organization reports the results of security function verification to .

-
- -

Organizational personnel with potential interest in security function verification results include, for example, senior information security officers, information system security managers, and information systems security officers.

- SA-12 - SI-4 - SI-5 -
- -

Determine if the organization:

- - SI-6(3)[1] -

defines personnel or roles designated to receive the results of security function verification; and

-
- - SI-6(3)[2] -

reports the results of security function verification to organization-defined personnel or roles.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing security function verification

-

information system design documentation

-

information system configuration settings and associated documentation

-

records of security function verification results

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with security function verification responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for reporting security function verification results

-

automated mechanisms supporting and/or implementing the reporting of security function verification results

-
-
-
-
- - Software, Firmware, and Information Integrity - - - - SI-7 - -

The organization employs integrity verification tools to detect unauthorized changes to .

-
- -

Unauthorized changes to software, firmware, and information can occur due to errors or malicious activity (e.g., tampering). Software includes, for example, operating systems (with key internal components such as kernels, drivers), middleware, and applications. Firmware includes, for example, the Basic Input Output System (BIOS). Information includes metadata such as security attributes associated with information. State-of-the-practice integrity-checking mechanisms (e.g., parity checks, cyclical redundancy checks, cryptographic hashes) and associated tools can automatically monitor the integrity of information systems and hosted applications.

- SA-12 - SC-8 - SC-13 - SI-3 -
- -

Determine if the organization:

- - SI-7[1] - - SI-7[1][a] -

defines software requiring integrity verification tools to be employed to detect unauthorized changes;

-
- - SI-7[1][b] -

defines firmware requiring integrity verification tools to be employed to detect unauthorized changes;

-
- - SI-7[1][c] -

defines information requiring integrity verification tools to be employed to detect unauthorized changes;

-
-
- - SI-7[2] -

employs integrity verification tools to detect unauthorized changes to organization-defined:

- - SI-7[2][a] -

software;

-
- - SI-7[2][b] -

firmware; and

-
- - SI-7[2][c] -

information.

-
-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing software, firmware, and information integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

integrity verification tools and associated documentation

-

records generated/triggered from integrity verification tools regarding unauthorized software, firmware, and information changes

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for software, firmware, and/or information integrity

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Software, firmware, and information integrity verification tools

-
-
- - Integrity Checks - - - - - - - - - - - - - SI-7(1) - -

The information system performs an integrity check of - .

-
- -

Security-relevant events include, for example, the identification of a new threat to which organizational information systems are susceptible, and the installation of new hardware, software, or firmware. Transitional states include, for example, system startup, restart, shutdown, and abort.

-
- -

Determine if:

- - SI-7(1)[1] -

the organization defines:

- - SI-7(1)[1][a] -

software requiring integrity checks to be performed;

-
- - SI-7(1)[1][b] -

firmware requiring integrity checks to be performed;

-
- - SI-7(1)[1][c] -

information requiring integrity checks to be performed;

-
-
- - SI-7(1)[2] -

the organization defines transitional states or security-relevant events requiring integrity checks of organization-defined:

- - SI-7(1)[2][a] -

software;

-
- - SI-7(1)[2][b] -

firmware;

-
- - SI-7(1)[2][c] -

information;

-
-
- - SI-7(1)[3] -

the organization defines a frequency with which to perform an integrity check of organization-defined:

- - SI-7(1)[3][a] -

software;

-
- - SI-7(1)[3][b] -

firmware;

-
- - SI-7(1)[3][c] -

information;

-
-
- - SI-7(1)[4] -

the information system performs an integrity check of organization-defined software, firmware, and information one or more of the following:

- - SI-7(1)[4][a] -

at startup;

-
- - SI-7(1)[4][b] -

at organization-defined transitional states or security-relevant events; and/or

-
- - SI-7(1)[4][c] -

with the organization-defined frequency.

-
-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing software, firmware, and information integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

integrity verification tools and associated documentation

-

records of integrity scans

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for software, firmware, and/or information integrity

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Software, firmware, and information integrity verification tools

-
-
-
- - Automated Notifications of Integrity Violations - - - - SI-7(2) - -

The organization employs automated tools that provide notification to upon discovering discrepancies during integrity verification.

-
- -

The use of automated tools to report integrity violations and to notify organizational personnel in a timely matter is an essential precursor to effective risk response. Personnel having an interest in integrity violations include, for example, mission/business owners, information system owners, systems administrators, software developers, systems integrators, and information security officers.

-
- -

Determine if the organization:

- - SI-7(2)[1] -

defines personnel or roles to whom notification is to be provided upon discovering discrepancies during integrity verification; and

-
- - SI-7(2)[2] -

employs automated tools that provide notification to organization-defined personnel or roles upon discovering discrepancies during integrity verification.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing software, firmware, and information integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

integrity verification tools and associated documentation

-

records of integrity scans

-

automated tools supporting alerts and notifications for integrity discrepancies

-

alerts/notifications provided upon discovering discrepancies during integrity verifications

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for software, firmware, and/or information integrity

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Software, firmware, and information integrity verification tools

-

automated mechanisms providing integrity discrepancy notifications

-
-
-
- - Centrally-managed Integrity Tools - SI-7(3) - -

The organization employs centrally managed integrity verification tools.

-
- - AU-3 - SI-2 - SI-8 - - -

Determine if the organization employs centrally managed integrity verification tools.

-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing software, firmware, and information integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

integrity verification tools and associated documentation

-

records of integrity scans

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for central management of integrity verification tools

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing central management of integrity verification tools

-
-
-
- - Tamper-evident Packaging - SI-7(4) - Withdrawn - SA-12 - - - Automated Response to Integrity Violations - - - - - - - SI-7(5) - -

The information system automatically when integrity violations are discovered.

-
- -

Organizations may define different integrity checking and anomaly responses: (i) by type of information (e.g., firmware, software, user data); (ii) by specific information (e.g., boot firmware, boot firmware for a specific types of machines); or (iii) a combination of both. Automatic implementation of specific safeguards within organizational information systems includes, for example, reversing the changes, halting the information system, or triggering audit alerts when unauthorized modifications to critical security files occur.

-
- -

Determine if:

- - SI-7(5)[1] -

the organization defines security safeguards to be implemented when integrity violations are discovered;

-
- - SI-7(5)[2] -

the information system automatically performs one or more of the following actions when integrity violations are discovered:

- - SI-7(5)[2][a] -

shuts the information system down;

-
- - SI-7(5)[2][b] -

restarts the information system; and/or

-
- - SI-7(5)[2][c] -

implements the organization-defined security safeguards.

-
-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing software, firmware, and information integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

integrity verification tools and associated documentation

-

records of integrity scans

-

records of integrity checks and responses to integrity violations

-

information audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for software, firmware, and/or information integrity

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Software, firmware, and information integrity verification tools

-

automated mechanisms providing an automated response to integrity violations

-

automated mechanisms supporting and/or implementing security safeguards to be implemented when integrity violations are discovered

-
-
-
- - Cryptographic Protection - SI-7(6) - -

The information system implements cryptographic mechanisms to detect unauthorized changes to software, firmware, and information.

-
- -

Cryptographic mechanisms used for the protection of integrity include, for example, digital signatures and the computation and application of signed hashes using asymmetric cryptography, protecting the confidentiality of the key used to generate the hash, and using the public key to verify the hash information.

- SC-13 -
- -

Determine if the information system employs cryptographic mechanism to detect unauthorized changes to:

- - SI-7(6)[1] -

software;

-
- - SI-7(6)[2] -

firmware; and

-
- - SI-7(6)[3] -

information.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing software, firmware, and information integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

cryptographic mechanisms and associated documentation

-

records of detected unauthorized changes to software, firmware, and information

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for software, firmware, and/or information integrity

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Software, firmware, and information integrity verification tools

-

cryptographic mechanisms implementing software, firmware, and information integrity

-
-
-
- - Integration of Detection and Response - - - - SI-7(7) - -

The organization incorporates the detection of unauthorized into the organizational incident response capability.

-
- -

This control enhancement helps to ensure that detected events are tracked, monitored, corrected, and available for historical purposes. Maintaining historical records is important both for being able to identify and discern adversary actions over an extended period of time and for possible legal actions. Security-relevant changes include, for example, unauthorized changes to established configuration settings or unauthorized elevation of information system privileges.

- IR-4 - IR-5 - SI-4 -
- -

Determine if the organization:

- - SI-7(7)[1] -

defines unauthorized security-relevant changes to the information system; and

-
- - SI-7(7)[2] -

incorporates the detection of unauthorized organization-defined security-relevant changes to the information system into the organizational incident response capability.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing software, firmware, and information integrity

-

procedures addressing incident response

-

information system design documentation

-

information system configuration settings and associated documentation

-

incident response records

-

information audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for software, firmware, and/or information integrity

-

organizational personnel with information security responsibilities

-

organizational personnel with incident response responsibilities

-
-
- - TEST - -

Organizational processes for incorporating detection of unauthorized security-relevant changes into the incident response capability

-

software, firmware, and information integrity verification tools

-

automated mechanisms supporting and/or implementing incorporation of detection of unauthorized security-relevant changes into the incident response capability

-
-
-
- - Auditing Capability for Significant Events - - - - - - - - - - SI-7(8) - -

The information system, upon detection of a potential integrity violation, provides the capability to audit the event and initiates the following actions: .

-
- -

Organizations select response actions based on types of software, specific software, or information for which there are potential integrity violations.

- AU-2 - AU-6 - AU-12 -
- -

Determine if:

- - SI-7(8)[1] -

the organization defines personnel or roles to be alerted upon detection of a potential integrity violation;

-
- - SI-7(8)[2] -

the organization defines other actions to be taken upon detection of a potential integrity violation;

-
- - SI-7(8)[3] - - SI-7(8)[3][a] -

the information system, upon detection of a potential integrity violation, provides the capability to audit the event;

-
- - SI-7(8)[3][b] -

the information system, upon detection of a potential integrity violation, initiates one or more of the following actions:

- - SI-7(8)[3][b][1] -

generates an audit record;

-
- - SI-7(8)[3][b][2] -

alerts current user;

-
- - SI-7(8)[3][b][3] -

alerts organization-defined personnel or roles; and/or

-
- - SI-7(8)[3][b][4] -

organization-defined other actions.

-
-
-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing software, firmware, and information integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

integrity verification tools and associated documentation

-

records of integrity scans

-

incident response records, list of security-relevant changes to the information system

-

automated tools supporting alerts and notifications if unauthorized security changes are detected

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for software, firmware, and/or information integrity

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Software, firmware, and information integrity verification tools

-

automated mechanisms supporting and/or implementing the capability to audit potential integrity violations

-

automated mechanisms supporting and/or implementing alerts about potential integrity violations

-
-
-
- - Verify Boot Process - - - - SI-7(9) - -

The information system verifies the integrity of the boot process of .

-
- -

Ensuring the integrity of boot processes is critical to starting devices in known/trustworthy states. Integrity verification mechanisms provide organizational personnel with assurance that only trusted code is executed during boot processes.

-
- -

Determine if:

- - SI-7(9)[1] -

the organization defines devices requiring integrity verification of the boot process; and

-
- - SI-7(9)[2] -

the information system verifies the integrity of the boot process of organization-defined devices.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing software, firmware, and information integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

integrity verification tools and associated documentation

-

documentation

-

records of integrity verification scans

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for software, firmware, and/or information integrity

-

organizational personnel with information security responsibilities

-

system developer

-
-
- - TEST - -

Software, firmware, and information integrity verification tools

-

automated mechanisms supporting and/or implementing integrity verification of the boot process

-
-
-
- - Protection of Boot Firmware - - - - - - - SI-7(10) - -

The information system implements to protect the integrity of boot firmware in .

-
- -

Unauthorized modifications to boot firmware may be indicative of a sophisticated, targeted cyber attack. These types of cyber attacks can result in a permanent denial of service (e.g., if the firmware is corrupted) or a persistent malicious code presence (e.g., if code is embedded within the firmware). Devices can protect the integrity of the boot firmware in organizational information systems by: (i) verifying the integrity and authenticity of all updates to the boot firmware prior to applying changes to the boot devices; and (ii) preventing unauthorized processes from modifying the boot firmware.

-
- -

Determine if:

- - SI-7(10)[1] -

the organization defines security safeguards to be implemented to protect the integrity of boot firmware in devices;

-
- - SI-7(10)[2] -

the organization defines devices requiring organization-defined security safeguards to be implemented to protect the integrity of boot firmware; and

-
- - SI-7(10)[3] -

the information system implements organization-defined security safeguards to protect the integrity of boot firmware in organization-defined devices.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing software, firmware, and information integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

integrity verification tools and associated documentation

-

records of integrity verification scans

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for software, firmware, and/or information integrity

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Software, firmware, and information integrity verification tools

-

automated mechanisms supporting and/or implementing protection of the integrity of boot firmware

-

safeguards implementing protection of the integrity of boot firmware

-
-
-
- - Confined Environments with Limited Privileges - - - - SI-7(11) - -

The organization requires that execute in a confined physical or virtual machine environment with limited privileges.

-
- -

Organizations identify software that may be of greater concern with regard to origin or potential for containing malicious code. For this type of software, user installations occur in confined environments of operation to limit or contain damage from malicious code that may be executed.

-
- -

Determine if the organization:

- - SI-7(11)[1] -

defines user-installed software to be executed in a confined physical or virtual machine environment with limited privileges; and

-
- - SI-7(11)[2] -

requires that organization-defined user-installed software execute in a confined physical or virtual machine environment with limited privileges.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing software, firmware, and information integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for software, firmware, and/or information integrity

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Software, firmware, and information integrity verification tools

-

automated mechanisms supporting and/or implementing execution of software in a confined environment (physical and/or virtual)

-

automated mechanisms supporting and/or implementing limited privileges in the confined environment

-
-
-
- - Integrity Verification - - - - SI-7(12) - -

The organization requires that the integrity of be verified prior to execution.

-
- -

Organizations verify the integrity of user-installed software prior to execution to reduce the likelihood of executing malicious code or code that contains errors from unauthorized modifications. Organizations consider the practicality of approaches to verifying software integrity including, for example, availability of checksums of adequate trustworthiness from software developers or vendors.

-
- -

Determine if the organization:

- - SI-7(12)[1] -

defines user-installed software requiring integrity verification prior to execution; and

-
- - SI-7(12)[2] -

requires that the integrity of organization-defined user-installed software be verified prior to execution.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing software, firmware, and information integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

integrity verification records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for software, firmware, and/or information integrity

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Software, firmware, and information integrity verification tools

-

automated mechanisms supporting and/or implementing verification of the integrity of user-installed software prior to execution

-
-
-
- - Code Execution in Protected Environments - - - - SI-7(13) - -

The organization allows execution of binary or machine-executable code obtained from sources with limited or no warranty and without the provision of source code only in confined physical or virtual machine environments and with the explicit approval of .

-
- -

This control enhancement applies to all sources of binary or machine-executable code including, for example, commercial software/firmware and open source software.

-
- -

Determine if the organization:

- - SI-7(13)[1] -

allows execution of binary or machine-executable code obtained from sources with limited or no warranty;

-
- - SI-7(13)[2] -

allows execution of binary or machine-executable code without the provision of source code only in confined physical or virtual machines;

-
- - SI-7(13)[3] -

defines personnel or roles required to provide explicit approval to allow execution of binary or machine-executable code; and

-
- - SI-7(13)[4] -

allows execution of binary or machine-executable code with the explicit approval of organization-defined personnel or roles.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing software, firmware, and information integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

approval records for execution of binary and machine-executable code

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for software, firmware, and/or information integrity

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Software, firmware, and information integrity verification tools

-

automated mechanisms supporting and/or implementing approvals for execution of binary or machine-executable code

-
-
-
- - Binary or Machine Executable Code - SI-7(14) - -

The organization:

- - (a) -

Prohibits the use of binary or machine-executable code from sources with limited or no warranty and without the provision of source code; and

-
- - (b) -

Provides exceptions to the source code requirement only for compelling mission/operational requirements and with the approval of the authorizing official.

-
-
- -

This control enhancement applies to all sources of binary or machine-executable code including, for example, commercial software/firmware and open source software. Organizations assess software products without accompanying source code from sources with limited or no warranty for potential security impacts. The assessments address the fact that these types of software products may be very difficult to review, repair, or extend, given that organizations, in most cases, do not have access to the original source code, and there may be no owners who could make such repairs on behalf of organizations.

- SA-5 -
- -

Determine if the organization:

- - SI-7(14)(a) - - SI-7(14)(a)[1] -

prohibits the use of binary or machine-executable code from sources with limited or no warranty;

-
- - SI-7(14)(a)[2] -

prohibits the use of binary or machine-executable code without the provision of source code;

-
- SI-7(14)(a) -
- - SI-7(14)(b) - - SI-7(14)(b)[1] -

provides exceptions to the source code requirement only for compelling mission/operational requirements; and

-
- - SI-7(14)(b)[2] -

provides exceptions to the source code requirement only with the approval of the authorizing official.

-
- SI-7(14)(b) -
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing software, firmware, and information integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

approval records for execution of binary and machine-executable code

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for software, firmware, and/or information integrity

-

organizational personnel with information security responsibilities

-

authorizing official

-

system/network administrators

-

system developer

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing prohibition of the execution of binary or machine-executable code

-
-
-
- - Code Authentication - - - - SI-7(15) - -

The information system implements cryptographic mechanisms to authenticate prior to installation.

-
- -

Cryptographic authentication includes, for example, verifying that software or firmware components have been digitally signed using certificates recognized and approved by organizations. Code signing is an effective method to protect against malicious code.

-
- -

Determine if:

- - SI-7(15)[1] - - SI-7(15)[1][a] -

the organization defines software components to be authenticated by cryptographic mechanisms prior to installation;

-
- - SI-7(15)[1][b] -

the organization defines firmware components to be authenticated by cryptographic mechanisms prior to installation;

-
-
- - SI-7(15)[2] - - SI-7(15)[2][a] -

the information system implements cryptographic mechanisms to authenticate organization-defined software components prior to installation; and

-
- - SI-7(15)[2][b] -

the information system implements cryptographic mechanisms to authenticate organization-defined firmware components prior to installation.

-
-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing software, firmware, and information integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

cryptographic mechanisms and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for software, firmware, and/or information integrity

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Cryptographic mechanisms authenticating software/firmware prior to installation

-
-
-
- - Time Limit On Process Execution w/o Supervision - - - - SI-7(16) - -

The organization does not allow processes to execute without supervision for more than .

-
- -

This control enhancement addresses processes for which normal execution periods can be determined and situations in which organizations exceed such periods. Supervision includes, for example, operating system timers, automated responses, or manual oversight and response when information system process anomalies occur.

-
- -

Determine if the organization:

- - SI-7(16)[1] -

defines a time period as the maximum period allowed for processes to execute without supervision; and

-
- - SI-7(16)[2] -

does not allow processes to execute without supervision for more than the organization-defined time period.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing software and information integrity

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for software, firmware, and/or information integrity

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Software, firmware, and information integrity verification tools

-

automated mechanisms supporting and/or implementing time limits on process execution without supervision

-
-
-
- - NIST Special Publication 800-147 - - NIST Special Publication 800-155 - -
- - Spam Protection - SI-8 - -

The organization:

- - a. -

Employs spam protection mechanisms at information system entry and exit points to detect and take action on unsolicited messages; and

-
- - b. -

Updates spam protection mechanisms when new releases are available in accordance with organizational configuration management policy and procedures.

-
-
- -

Information system entry and exit points include, for example, firewalls, electronic mail servers, web servers, proxy servers, remote-access servers, workstations, mobile devices, and notebook/laptop computers. Spam can be transported by different means including, for example, electronic mail, electronic mail attachments, and web accesses. Spam protection mechanisms include, for example, signature definitions.

- AT-2 - AT-3 - SC-5 - SC-7 - SI-3 -
- -

Determine if the organization:

- - SI-8(a) -

employs spam protection mechanisms:

- - SI-8(a)[1] -

at information system entry points to detect unsolicited messages;

-
- - SI-8(a)[2] -

at information system entry points to take action on unsolicited messages;

-
- - SI-8(a)[3] -

at information system exit points to detect unsolicited messages;

-
- - SI-8(a)[4] -

at information system exit points to take action on unsolicited messages; and

-
-
- - SI-8(b) -

updates spam protection mechanisms when new releases are available in accordance with organizational configuration management policy and procedures.

-
-
- - EXAMINE - -

System and information integrity policy

-

configuration management policy and procedures (CM-1)

-

procedures addressing spam protection

-

spam protection mechanisms

-

records of spam protection updates

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for spam protection

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Organizational processes for implementing spam protection

-

automated mechanisms supporting and/or implementing spam protection

-
-
- - Central Management - SI-8(1) - -

The organization centrally manages spam protection mechanisms.

-
- -

Central management is the organization-wide management and implementation of spam protection mechanisms. Central management includes planning, implementing, assessing, authorizing, and monitoring the organization-defined, centrally managed spam protection security controls.

- AU-3 - SI-2 - SI-7 -
- -

Determine if the organization centrally manages spam protection mechanisms.

-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing spam protection

-

spam protection mechanisms

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for spam protection

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for central management of spam protection

-

automated mechanisms supporting and/or implementing central management of spam protection

-
-
-
- - Automatic Updates - SI-8(2) - -

The information system automatically updates spam protection mechanisms.

-
- -

Determine if the information system automatically updates spam protection mechanisms.

-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing spam protection

-

spam protection mechanisms

-

records of spam protection updates

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for spam protection

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Organizational processes for spam protection

-

automated mechanisms supporting and/or implementing automatic updates to spam protection mechanisms

-
-
-
- - Continuous Learning Capability - SI-8(3) - -

The information system implements spam protection mechanisms with a learning capability to more effectively identify legitimate communications traffic.

-
- -

Learning mechanisms include, for example, Bayesian filters that respond to user inputs identifying specific traffic as spam or legitimate by updating algorithm parameters and thereby more accurately separating types of traffic.

-
- -

Determine if the information system implements spam protection mechanisms with a learning capability to more effectively identify legitimate communications traffic.

-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing spam protection

-

spam protection mechanisms

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for spam protection

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Organizational processes for spam protection

-

automated mechanisms supporting and/or implementing spam protection mechanisms with a learning capability

-
-
-
- - NIST Special Publication 800-45 - -
- - Information Input Restrictions - SI-9 - Withdrawn - AC-2 - AC-3 - AC-5 - AC-6 - - - Information Input Validation - - - - SI-10 - -

The information system checks the validity of .

-
- -

Checking the valid syntax and semantics of information system inputs (e.g., character set, length, numerical range, and acceptable values) verifies that inputs match specified definitions for format and content. Software applications typically follow well-defined protocols that use structured messages (i.e., commands or queries) to communicate between software modules or system components. Structured messages can contain raw or unstructured data interspersed with metadata or control information. If software applications use attacker-supplied inputs to construct structured messages without properly encoding such messages, then the attacker could insert malicious commands or special characters that can cause the data to be interpreted as control information or metadata. Consequently, the module or component that receives the tainted output will perform the wrong operations or otherwise interpret the data incorrectly. Prescreening inputs prior to passing to interpreters prevents the content from being unintentionally interpreted as commands. Input validation helps to ensure accurate and correct inputs and prevent attacks such as cross-site scripting and a variety of injection attacks.

-
- -

Determine if:

- - SI-10[1] -

the organization defines information inputs requiring validity checks; and

-
- - SI-10[2] -

the information system checks the validity of organization-defined information inputs.

-
-
- - EXAMINE - -

System and information integrity policy

-

access control policy and procedures

-

separation of duties policy and procedures

-

procedures addressing information input validation

-

documentation for automated tools and applications to verify validity of information

-

list of information inputs requiring validity checks

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for information input validation

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing validity checks on information inputs

-
-
- - Manual Override Capability - - - - - - - SI-10(1) - -

The information system:

- - (a) -

Provides a manual override capability for input validation of ;

-
- - (b) -

Restricts the use of the manual override capability to only ; and

-
- - (c) -

Audits the use of the manual override capability.

-
-
- - CM-3 - CM-5 - - -

Determine if:

- - SI-10(1)(a) - - SI-10(1)(a)[1] -

the organization defines information inputs for which the information system provides a manual override capability for input validation;

-
- - SI-10(1)(a)[2] -

the information system provides a manual override capability for input validation of organization-defined inputs;

-
- SI-10(1)(a) -
- - SI-10(1)(b) - - SI-10(1)(b)[1] -

the organization defines authorized individuals who can use the manual override capability;

-
- - SI-10(1)(b)[2] -

the information system restricts the use of manual override capability to organization-defined authorized individuals; and

-
- SI-10(1)(b) -
- - SI-10(1)(c) -

the information system audits the use of the manual override capability.

- SI-10(1)(c) -
-
- - EXAMINE - -

System and information integrity policy

-

access control policy and procedures

-

separation of duties policy and procedures

-

procedures addressing information input validation

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for information input validation

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Organizational processes for use of manual override capability

-

automated mechanisms supporting and/or implementing manual override capability for input validation

-

automated mechanisms supporting and/or implementing auditing of the use of manual override capability

-
-
-
- - Review / Resolution of Errors - - - - SI-10(2) - -

The organization ensures that input validation errors are reviewed and resolved within .

-
- -

Resolution of input validation errors includes, for example, correcting systemic causes of errors and resubmitting transactions with corrected input.

-
- -

Determine if the organization:

- - SI-10(2)[1] -

defines a time period within which input validation errors are to be reviewed and resolved; and

-
- - SI-10(2)[2] -

ensures that input validation errors are reviewed and resolved within the organization-defined time period.

-
-
- - EXAMINE - -

System and information integrity policy

-

access control policy and procedures

-

separation of duties policy and procedures

-

procedures addressing information input validation

-

information system design documentation

-

information system configuration settings and associated documentation

-

review records of information input validation errors and resulting resolutions

-

information input validation error logs or records

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for information input validation

-

organizational personnel with information security responsibilities

-

system/network administrators

-
-
- - TEST - -

Organizational processes for review and resolution of input validation errors

-

automated mechanisms supporting and/or implementing review and resolution of input validation errors

-
-
-
- - Predictable Behavior - SI-10(3) - -

The information system behaves in a predictable and documented manner that reflects organizational and system objectives when invalid inputs are received.

-
- -

A common vulnerability in organizational information systems is unpredictable behavior when invalid inputs are received. This control enhancement ensures that there is predictable behavior in the face of invalid inputs by specifying information system responses that facilitate transitioning the system to known states without adverse, unintended side effects.

-
- -

Determine if the information system behaves in a predictable and documented manner that reflects organizational and system objectives when invalid inputs are received.

-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information input validation

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for information input validation

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing predictable behavior when invalid inputs are received

-
-
-
- - Review / Timing Interactions - SI-10(4) - -

The organization accounts for timing interactions among information system components in determining appropriate responses for invalid inputs.

-
- -

In addressing invalid information system inputs received across protocol interfaces, timing interactions become relevant, where one protocol needs to consider the impact of the error response on other protocols within the protocol stack. For example, 802.11 standard wireless network protocols do not interact well with Transmission Control Protocols (TCP) when packets are dropped (which could be due to invalid packet input). TCP assumes packet losses are due to congestion, while packets lost over 802.11 links are typically dropped due to collisions or noise on the link. If TCP makes a congestion response, it takes precisely the wrong action in response to a collision event. Adversaries may be able to use apparently acceptable individual behaviors of the protocols in concert to achieve adverse effects through suitable construction of invalid input.

-
- -

Determine if the organization accounts for timing interactions among information system components in determining appropriate responses for invalid inputs.

-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information input validation

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for information input validation

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Organizational processes for determining appropriate responses to invalid inputs

-

automated mechanisms supporting and/or implementing responses to invalid inputs

-
-
-
- - Restrict Inputs to Trusted Sources and Approved Formats - - - - - - - SI-10(5) - -

The organization restricts the use of information inputs to and/or .

-
- -

This control enhancement applies the concept of whitelisting to information inputs. Specifying known trusted sources for information inputs and acceptable formats for such inputs can reduce the probability of malicious activity.

-
- -

Determine if the organization:

- - SI-10(5)[1] -

defines trusted sources to which the use of information inputs is to be restricted;

-
- - SI-10(5)[2] -

defines formats to which the use of information inputs is to be restricted;

-
- - SI-10(5)[3] -

restricts the use of information inputs to:

- - SI-10(5)[3][a] -

organization-defined trust sources; and/or

-
- - SI-10(5)[3][b] -

organization-defined formats.

-
-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information input validation

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of trusted sources for information inputs

-

list of acceptable formats for input restrictions

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for information input validation

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Organizational processes for restricting information inputs

-

automated mechanisms supporting and/or implementing restriction of information inputs

-
-
-
-
- - Error Handling - - - - SI-11 - -

The information system:

- - a. -

Generates error messages that provide information necessary for corrective actions without revealing information that could be exploited by adversaries; and

-
- - b. -

Reveals error messages only to .

-
-
- -

Organizations carefully consider the structure/content of error messages. The extent to which information systems are able to identify and handle error conditions is guided by organizational policy and operational requirements. Information that could be exploited by adversaries includes, for example, erroneous logon attempts with passwords entered by mistake as the username, mission/business information that can be derived from (if not stated explicitly by) information recorded, and personal information such as account numbers, social security numbers, and credit card numbers. In addition, error messages may provide a covert channel for transmitting information.

- AU-2 - AU-3 - SC-31 -
- -

Determine if:

- - SI-11(a) -

the information system generates error messages that provide information necessary for corrective actions without revealing information that could be exploited by adversaries;

-
- - SI-11(b) - - SI-11(b)[1] -

the organization defines personnel or roles to whom error messages are to be revealed; and

-
- - SI-11(b)[2] -

the information system reveals error messages only to organization-defined personnel or roles.

-
-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information system error handling

-

information system design documentation

-

information system configuration settings and associated documentation

-

documentation providing structure/content of error messages

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for information input validation

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Organizational processes for error handling

-

automated mechanisms supporting and/or implementing error handling

-

automated mechanisms supporting and/or implementing management of error messages

-
-
-
- - Information Handling and Retention - SI-12 - -

The organization handles and retains information within the information system and information output from the system in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and operational requirements.

-
- -

Information handling and retention requirements cover the full life cycle of information, in some cases extending beyond the disposal of information systems. The National Archives and Records Administration provides guidance on records retention.

- AC-16 - AU-5 - AU-11 - MP-2 - MP-4 -
- -

Determine if the organization, in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and operational requirements:

- - SI-12[1] -

handles information within the information system;

-
- - SI-12[2] -

handles output from the information system;

-
- - SI-12[3] -

retains information within the information system; and

-
- - SI-12[4] -

retains output from the information system.

-
-
- - EXAMINE - -

System and information integrity policy

-

federal laws, Executive Orders, directives, policies, regulations, standards, and operational requirements applicable to information handling and retention

-

media protection policy and procedures

-

procedures addressing information system output handling and retention

-

information retention records, other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for information handling and retention

-

organizational personnel with information security responsibilities/network administrators

-
-
- - TEST - -

Organizational processes for information handling and retention

-

automated mechanisms supporting and/or implementing information handling and retention

-
-
-
- - Predictable Failure Prevention - - - - - - - SI-13 - -

The organization:

- - a. -

Determines mean time to failure (MTTF) for in specific environments of operation; and

-
- - b. -

Provides substitute information system components and a means to exchange active and standby components at .

-
-
- -

While MTTF is primarily a reliability issue, this control addresses potential failures of specific information system components that provide security capability. Failure rates reflect installation-specific consideration, not industry-average. Organizations define criteria for substitution of information system components based on MTTF value with consideration for resulting potential harm from component failures. Transfer of responsibilities between active and standby components does not compromise safety, operational readiness, or security capability (e.g., preservation of state variables). Standby components remain available at all times except for maintenance issues or recovery failures in progress.

- CP-2 - CP-10 - MA-6 -
- -

Determine if the organization:

- - SI-13(a) - - SI-13(a)[1] -

defines information system components for which mean time to failure (MTTF) should be determined;

-
- - SI-13(a)[2] -

determines MTTF for organization-defined information system components in specific environments of operation;

-
-
- - SI-13(b) - - SI-13(b)[1] -

defines MTTF substitution criteria to be used as a means to exchange active and standby components;

-
- - SI-13(b)[2] -

provides substitute information system components at organization-defined MTTF substitution criteria; and

-
- - SI-13(b)[3] -

provides a means to exchange active and standby components at organization-defined MTTF substitution criteria.

-
-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing predictable failure prevention

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of MTTF substitution criteria

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for MTTF determinations and activities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

organizational personnel with contingency planning responsibilities

-
-
- - TEST - -

Organizational processes for managing MTTF

-
-
- - Transferring Component Responsibilities - - - - SI-13(1) - -

The organization takes information system components out of service by transferring component responsibilities to substitute components no later than of mean time to failure.

-
- -

Determine if the organization:

- - SI-13(1)[1] -

defines maximum fraction or percentage of mean time to failure within which to transfer the responsibilities of an information system component that is out of service to a substitute component; and

-
- - SI-13(1)[2] -

takes the information system component out of service by transferring component responsibilities to substitute components no later than organization-defined fraction or percentage of mean time to failure.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing predictable failure prevention

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for MTTF activities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

organizational personnel with contingency planning responsibilities

-
-
- - TEST - -

Organizational processes for managing MTTF

-

automated mechanisms supporting and/or implementing transfer of component responsibilities to substitute components

-
-
-
- - Time Limit On Process Execution Without Supervision - SI-13(2) - Withdrawn - SI-7 (16) - - - Manual Transfer Between Components - - - - - - - SI-13(3) - -

The organization manually initiates transfers between active and standby information system components if the mean time to failure exceeds .

-
- -

Determine if the organization:

- - SI-13(3)[1] -

defines the minimum frequency with which the organization manually initiates a transfer between active and standby information system components if the mean time to failure exceeds the organization-defined time period;

-
- - SI-13(3)[2] -

defines the time period that the mean time to failure must exceed before the organization manually initiates a transfer between active and standby information system components; and

-
- - SI-13(3)[3] -

manually initiates transfers between active and standby information system components at the organization-defined frequency if the mean time to failure exceeds the organization-defined time period.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing predictable failure prevention

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for MTTF activities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

organizational personnel with contingency planning responsibilities

-
-
- - TEST - -

Organizational processes for managing MTTF and conducting the manual transfer between active and standby components

-
-
-
- - Standby Component Installation / Notification - - - - - - - - - - SI-13(4) - -

The organization, if information system component failures are detected:

- - (a) -

Ensures that the standby components are successfully and transparently installed within ; and

-
- - (b) -

- .

-
-
- -

Automatic or manual transfer of components from standby to active mode can occur, for example, upon detection of component failures.

-
- -

Determine if the organization:

- - SI-13(4)(a) - - SI-13(4)(a)[1] -

defines a time period for standby information system components to be successfully and transparently installed when information system component failures are detected;

-
- - SI-13(4)(a)[2] -

ensures that the standby components are successfully and transparently installed within the organization-defined time period;

-
- SI-13(4)(a) -
- - SI-13(4)(b) - - SI-13(4)(b)[1] -

defines an alarm to be activated when information system component failures are detected;

-
- - SI-13(4)(b)[2] -

if information system component failures are detected, does one or more of the following:

- - SI-13(4)(b)[2][a] -

activates the organization-defined alarm; and/or

-
- - SI-13(4)(b)[2][b] -

automatically shuts down the information system.

-
-
- SI-13(4)(b) -
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing predictable failure prevention

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of actions to be taken once information system component failure is detected

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for MTTF activities

-

organizational personnel with information security responsibilities

-

system/network administrators

-

organizational personnel with contingency planning responsibilities

-
-
- - TEST - -

Organizational processes for managing MTTF

-

automated mechanisms supporting and/or implementing transparent installation of standby components

-

automated mechanisms supporting and/or implementing alarms or system shutdown if component failures are detected

-
-
-
- - Failover Capability - - - - - - - SI-13(5) - -

The organization provides - for the information system.

-
- -

Failover refers to the automatic switchover to an alternate information system upon the failure of the primary information system. Failover capability includes, for example, incorporating mirrored information system operations at alternate processing sites or periodic data mirroring at regular intervals defined by recovery time periods of organizations.

-
- -

Determine if the organization:

- - SI-13(5)[1] -

defines failover capability to be provided for the information system;

-
- - SI-13(5)[2] -

provides one of the following organization-defined failover capabilities for the information system:

- - SI-13(5)[2][a] -

real-time failover capability; and/or

-
- - SI-13(5)[2][b] -

near real-time failover capability.

-
-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing predictable failure prevention

-

information system design documentation

-

information system configuration settings and associated documentation

-

documentation describing failover capability provided for the information system

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for failover capability

-

organizational personnel with information security responsibilities

-

system/network administrators

-

organizational personnel with contingency planning responsibilities

-
-
- - TEST - -

Organizational processes for managing failover capability

-

automated mechanisms supporting and/or implementing failover capability

-
-
-
-
- - Non-persistence - - - - - - - - - - SI-14 - -

The organization implements non-persistent that are initiated in a known state and terminated .

-
- -

This control mitigates risk from advanced persistent threats (APTs) by significantly reducing the targeting capability of adversaries (i.e., window of opportunity and available attack surface) to initiate and complete cyber attacks. By implementing the concept of non-persistence for selected information system components, organizations can provide a known state computing resource for a specific period of time that does not give adversaries sufficient time on target to exploit vulnerabilities in organizational information systems and the environments in which those systems operate. Since the advanced persistent threat is a high-end threat with regard to capability, intent, and targeting, organizations assume that over an extended period of time, a percentage of cyber attacks will be successful. Non-persistent information system components and services are activated as required using protected information and terminated periodically or upon the end of sessions. Non-persistence increases the work factor of adversaries in attempting to compromise or breach organizational information systems. -Non-persistent system components can be implemented, for example, by periodically re-imaging components or by using a variety of common virtualization techniques. Non-persistent services can be implemented using virtualization techniques as part of virtual machines or as new instances of processes on physical machines (either persistent or non-persistent).The benefit of periodic refreshes of information system components/services is that it does not require organizations to first determine whether compromises of components or services have occurred (something that may often be difficult for organizations to determine). The refresh of selected information system components and services occurs with sufficient frequency to prevent the spread or intended impact of attacks, but not with such frequency that it makes the information system unstable. In some instances, refreshes of critical components and services may be done periodically in order to hinder the ability of adversaries to exploit optimum windows of vulnerabilities.

- SC-30 - SC-34 -
- -

Determine if the organization:

- - SI-14[1] -

defines non-persistent information system components and services to be implemented;

-
- - SI-14[2] - - SI-14[2][a] -

defines a frequency to terminate non-persistent organization-defined components and services that are initiated in a known state;

-
- - SI-14[2][b] -

implements non-persistent organization-defined information system components and services that are initiated in a known state and terminated one or more of the following:

- - SI-14[2][b][1] -

upon end of session of use; and/or

-
- - SI-14[2][b][2] -

periodically at the organization-defined frequency.

-
-
-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing non-persistence for information system components

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for non-persistence

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing initiation and termination of non-persistent components

-
-
- - Refresh from Trusted Sources - - - - SI-14(1) - -

The organization ensures that software and data employed during information system component and service refreshes are obtained from .

-
- -

Trusted sources include, for example, software/data from write-once, read-only media or from selected off-line secure storage facilities.

-
- -

Determine if the organization:

- - SI-14(1)[1] -

defines trusted sources from which software and data employed during information system component and service refreshes are to be obtained; and

-
- - SI-14(1)[2] -

ensures that software and data employed during information system component and service refreshes are obtained from organization-defined trusted sources.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing non-persistence for information system components

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for obtaining component and service refreshes from trusted sources

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for defining and obtaining component and service refreshes from trusted sources

-

automated mechanisms supporting and/or implementing component and service refreshes

-
-
-
-
- - Information Output Filtering - - - - SI-15 - -

The information system validates information output from to ensure that the information is consistent with the expected content.

-
- -

Certain types of cyber attacks (e.g., SQL injections) produce output results that are unexpected or inconsistent with the output results that would normally be expected from software programs or applications. This control enhancement focuses on detecting extraneous content, preventing such extraneous content from being displayed, and alerting monitoring tools that anomalous behavior has been discovered.

- SI-3 - SI-4 -
- -

Determine if:

- - SI-15[1] -

the organization defines software programs and/or applications whose information output requires validation to ensure that the information is consistent with the expected content; and

-
- - SI-15[2] -

the information system validates information output from organization-defined software programs and/or applications to ensure that the information is consistent with the expected content.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing information output filtering

-

information system design documentation

-

information system configuration settings and associated documentation

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for validating information output

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Organizational processes for validating information output

-

automated mechanisms supporting and/or implementing information output validation

-
-
-
- - Memory Protection - - - - SI-16 - -

The information system implements to protect its memory from unauthorized code execution.

-
- -

Some adversaries launch attacks with the intent of executing code in non-executable regions of memory or in memory locations that are prohibited. Security safeguards employed to protect memory include, for example, data execution prevention and address space layout randomization. Data execution prevention safeguards can either be hardware-enforced or software-enforced with hardware providing the greater strength of mechanism.

- AC-25 - SC-3 -
- -

Determine if:

- - SI-16[1] -

the organization defines security safeguards to be implemented to protect information system memory from unauthorized code execution; and

-
- - SI-16[2] -

the information system implements organization-defined security safeguards to protect its memory from unauthorized code execution.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing memory protection for the information system

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of security safeguards protecting information system memory from unauthorized code execution

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for memory protection

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Automated mechanisms supporting and/or implementing safeguards to protect information system memory from unauthorized code execution

-
-
-
- - Fail-safe Procedures - - - - - - - SI-17 - -

The information system implements when .

-
- -

Failure conditions include, for example, loss of communications among critical system components or between system components and operational facilities. Fail-safe procedures include, for example, alerting operator personnel and providing specific instructions on subsequent steps to take (e.g., do nothing, reestablish system settings, shut down processes, restart the system, or contact designated organizational personnel).

- CP-12 - CP-13 - SC-24 - SI-13 -
- -

Determine if:

- - SI-17[1] -

the organization defines fail-safe procedures to be implemented when organization-defined failure conditions occur;

-
- - SI-17[2] -

the organization defines failure conditions resulting in organization-defined fail-safe procedures being implemented when such conditions occur; and

-
- - SI-17[3] -

the information system implements organization-defined fail-safe procedures when organization-defined failure conditions occur.

-
-
- - EXAMINE - -

System and information integrity policy

-

procedures addressing memory protection for the information system

-

information system design documentation

-

information system configuration settings and associated documentation

-

list of security safeguards protecting information system memory from unauthorized code execution

-

information system audit records

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for fail-safe procedures

-

organizational personnel with information security responsibilities

-

system/network administrators

-

system developer

-
-
- - TEST - -

Organizational fail-safe procedures

-

automated mechanisms supporting and/or implementing fail-safe procedures

-
-
-
-
- - Program Management - - Information Security Program Plan - - - - PM-1 - -

The organization:

- - a. -

Develops and disseminates an organization-wide information security program plan that:

- - 1. -

Provides an overview of the requirements for the security program and a description of the security program management controls and common controls in place or planned for meeting those requirements;

-
- - 2. -

Includes the identification and assignment of roles, responsibilities, management commitment, coordination among organizational entities, and compliance;

-
- - 3. -

Reflects coordination among organizational entities responsible for the different aspects of information security (i.e., technical, physical, personnel, cyber-physical); and

-
- - 4. -

Is approved by a senior official with responsibility and accountability for the risk being incurred to organizational operations (including mission, functions, image, and reputation), organizational assets, individuals, other organizations, and the Nation;

-
-
- - b. -

Reviews the organization-wide information security program plan ;

-
- - c. -

Updates the plan to address organizational changes and problems identified during plan implementation or security control assessments; and

-
- - d. -

Protects the information security program plan from unauthorized disclosure and modification.

-
-
- -

Information security program plans can be represented in single documents or compilations of documents at the discretion of organizations. The plans document the program management controls and organization-defined common controls. Information security program plans provide sufficient information about the program management controls/common controls (including specification of parameters for any assignment and selection statements either explicitly or by reference) to enable implementations that are unambiguously compliant with the intent of the plans and a determination of the risk to be incurred if the plans are implemented as intended. -The security plans for individual information systems and the organization-wide information security program plan together, provide complete coverage for all security controls employed within the organization. Common controls are documented in an appendix to the organization’s information security program plan unless the controls are included in a separate security plan for an information system (e.g., security controls employed as part of an intrusion detection system providing organization-wide boundary protection inherited by one or more organizational information systems). The organization-wide information security program plan will indicate which separate security plans contain descriptions of common controls. -Organizations have the flexibility to describe common controls in a single document or in multiple documents. In the case of multiple documents, the documents describing common controls are included as attachments to the information security program plan. If the information security program plan contains multiple documents, the organization specifies in each document the organizational official or officials responsible for the development, implementation, assessment, authorization, and monitoring of the respective common controls. For example, the organization may require that the Facilities Management Office develop, implement, assess, authorize, and continuously monitor common physical and environmental protection controls from the PE family when such controls are not associated with a particular information system but instead, support multiple information systems.

- PM-8 -
- -

Determine if the organization:

- - PM-1(a) -

develops and disseminates an organization-wide information security program plan that:

- - PM-1(a)(1) - - PM-1(a)(1)[1] -

provides an overview of the requirements for the security program;

-
- - PM-1(a)(1)[2] -

provides a description of the:

- - PM-1(a)(1)[2][a] -

security program management controls in place or planned for meeting those requirements;

-
- - PM-1(a)(1)[2][b] -

common controls in place or planned for meeting those requirements;

-
-
-
- - PM-1(a)(2) -

includes the identification and assignment of:

- - PM-1(a)(2)[1] -

roles;

-
- - PM-1(a)(2)[2] -

responsibilities;

-
- - PM-1(a)(2)[3] -

management commitment;

-
- - PM-1(a)(2)[4] -

coordination among organizational entities;

-
- - PM-1(a)(2)[5] -

compliance;

-
-
- - PM-1(a)(3) -

reflects coordination among organizational entities responsible for the different aspects of information security (i.e., technical, physical, personnel, cyber-physical);

-
- - PM-1(a)(4) -

is approved by a senior official with responsibility and accountability for the risk being incurred to organizational operations, organizational assets, individuals, other organizations, and the Nation;

-
-
- - PM-1(b) - - PM-1(b)[1] -

defines the frequency to review the security program plan for the information system;

-
- - PM-1(b)[2] -

reviews the organization-wide information security program plan with the organization-defined frequency;

-
-
- - PM-1(c) -

updates the plan to address organizational:

- - PM-1(c)[1] -

changes identified during plan implementation;

-
- - PM-1(c)[2] -

changes identified during security control assessments;

-
- - PM-1(c)[3] -

problems identified during plan implementation;

-
- - PM-1(c)[4] -

problems identified during security control assessments;

-
-
- - PM-1(d) -

protects the information security program plan from unauthorized:

- - PM-1(d)[1] -

disclosure; and

-
- - PM-1(d)[2] -

modification.

-
-
-
- - EXAMINE - -

Information security program plan

-

procedures addressing program plan development and implementation

-

procedures addressing program plan reviews and updates

-

procedures addressing coordination of the program plan with relevant entities

-

procedures for program plan approvals

-

records of program plan reviews and updates

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security program planning and plan implementation responsibilities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for information security program plan development/review/update/approval

-

automated mechanisms supporting and/or implementing the information security program plan

-
-
-
- - Senior Information Security Officer - PM-2 - -

The organization appoints a senior information security officer with the mission and resources to coordinate, develop, implement, and maintain an organization-wide information security program.

-
- -

The security officer described in this control is an organizational official. For a federal agency (as defined in applicable federal laws, Executive Orders, directives, policies, or regulations) this official is the Senior Agency Information Security Officer. Organizations may also refer to this official as the Senior Information Security Officer or Chief Information Security Officer.

-
- -

Determine if the organization appoints a senior information security officer with the mission and resources to:

- - PM-2[1] -

coordinate an organization-wide information security program;

-
- - PM-2[2] -

develop an organization-wide information security program;

-
- - PM-2[3] -

implement an organization-wide information security program; and

-
- - PM-2[4] -

maintain an organization-wide information security program.

-
-
- - EXAMINE - -

Information security program plan

-

procedures addressing program plan development and implementation

-

procedures addressing program plan reviews and updates

-

procedures addressing coordination of the program plan with relevant entities

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security program planning and plan implementation responsibilities

-

senior information security officer

-

organizational personnel with information security responsibilities

-
-
-
- - Information Security Resources - PM-3 - -

The organization:

- - a. -

Ensures that all capital planning and investment requests include the resources needed to implement the information security program and documents all exceptions to this requirement;

-
- - b. -

Employs a business case/Exhibit 300/Exhibit 53 to record the resources required; and

-
- - c. -

Ensures that information security resources are available for expenditure as planned.

-
-
- -

Organizations consider establishing champions for information security efforts and as part of including the necessary resources, assign specialized expertise and resources as needed. Organizations may designate and empower an Investment Review Board (or similar group) to manage and provide oversight for the information security-related aspects of the capital planning and investment control process.

- PM-4 - SA-2 -
- -

Determine if the organization:

- - PM-3(a) - - PM-3(a)[1] -

ensures that all capital planning and investment requests include the resources needed to implement the information security program plan;

-
- - PM-3(a)[2] -

documents all exceptions to the requirement;

-
-
- - PM-3(b) -

employs a business case/Exhibit 300/Exhibit 53 to record the resources required; and

-
- - PM-3(c) -

ensures that information security resources are available for expenditure as planned.

-
-
- - EXAMINE - -

Information security program plan

-

Exhibits 300

-

Exhibits 53

-

business cases for capital planning and investment

-

procedures for capital planning and investment

-

documentation of exceptions to capital planning requirements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security program planning responsibilities

-

organizational personnel responsible for capital planning and investment

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for capital planning and investment

-

organizational processes for business case/Exhibit 300/Exhibit 53 development

-

automated mechanisms supporting the capital planning and investment process

-
-
- - NIST Special Publication 800-65 - -
- - Plan of Action and Milestones Process - PM-4 - -

The organization:

- - a. -

Implements a process for ensuring that plans of action and milestones for the security program and associated organizational information systems:

- - 1. -

Are developed and maintained;

-
- - 2. -

Document the remedial information security actions to adequately respond to risk to organizational operations and assets, individuals, other organizations, and the Nation; and

-
- - 3. -

Are reported in accordance with OMB FISMA reporting requirements.

-
-
- - b. -

Reviews plans of action and milestones for consistency with the organizational risk management strategy and organization-wide priorities for risk response actions.

-
-
- -

The plan of action and milestones is a key document in the information security program and is subject to federal reporting requirements established by OMB. With the increasing emphasis on organization-wide risk management across all three tiers in the risk management hierarchy (i.e., organization, mission/business process, and information system), organizations view plans of action and milestones from an organizational perspective, prioritizing risk response actions and ensuring consistency with the goals and objectives of the organization. Plan of action and milestones updates are based on findings from security control assessments and continuous monitoring activities. OMB FISMA reporting guidance contains instructions regarding organizational plans of action and milestones.

- CA-5 -
- -

Determine if the organization:

- - PM-4(a) -

implements a process for ensuring that plans of action and milestones for the security program and associated organizational information systems:

- - PM-4(a)(1) - - PM-4(a)(1)[1] -

are developed;

-
- - PM-4(a)(1)[2] -

are maintained;

-
-
- - PM-4(a)(2) -

document the remedial information security actions to adequately respond to risk to organizational operations and assets, individuals, other organizations, and the Nation;

-
- - PM-4(a)(3) -

are reported in accordance with OMB FISMA reporting requirements;

-
-
- - PM-4(b) -

reviews plans of action and milestones for consistency with:

- - PM-4(b)[1] -

the organizational risk management strategy; and

-
- - PM-4(b)[2] -

organization-wide priorities for risk response actions.

-
-
-
- - EXAMINE - -

Information security program plan

-

plans of action and milestones

-

procedures addressing plans of action and milestones development and maintenance

-

procedures addressing plans of action and milestones reporting

-

procedures for review of plans of action and milestones for consistency with risk management strategy and risk response priorities

-

results of risk assessments associated with plans of action and milestones

-

OMB FISMA reporting requirements

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for developing, maintaining, reviewing, and reporting plans of action and milestones

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for plan of action and milestones development, review, maintenance, reporting

-

automated mechanisms supporting plans of action and milestones

-
-
- - OMB Memorandum 02-01 - - NIST Special Publication 800-37 - -
- - Information System Inventory - PM-5 - -

The organization develops and maintains an inventory of its information systems.

-
- -

This control addresses the inventory requirements in FISMA. OMB provides guidance on developing information systems inventories and associated reporting requirements. For specific information system inventory reporting requirements, organizations consult OMB annual FISMA reporting guidance.

-
- -

Determine if the organization:

- - PM-5[1] -

develops an inventory of its information systems; and

-
- - PM-5[2] -

maintains the inventory of its information systems.

-
-
- - EXAMINE - -

Information security program plan

-

information system inventory

-

procedures addressing information system inventory development and maintenance

-

OMB FISMA reporting guidance

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security program planning and plan implementation responsibilities

-

organizational personnel responsible for developing and maintaining the information system inventory

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for information system inventory development and maintenance

-

automated mechanisms supporting the information system inventory

-
-
- - http://www.omb.gov - -
- - Information Security Measures of Performance - PM-6 - -

The organization develops, monitors, and reports on the results of information security measures of performance.

-
- -

Measures of performance are outcome-based metrics used by an organization to measure the effectiveness or efficiency of the information security program and the security controls employed in support of the program.

-
- -

Determine if the organization:

- - PM-6[1] -

develops information security measures of performance;

-
- - PM-6[2] -

monitors information security measures of performance; and

-
- - PM-6[3] -

reports information security measures of performance.

-
-
- - EXAMINE - -

Information security program plan

-

information security measures of performance

-

procedures addressing development, monitoring, and reporting of information security measures of performance

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security program planning and plan implementation responsibilities

-

organizational personnel responsible for developing, monitoring, and reporting information security measures of performance

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for developing, monitoring, and reporting information security measures of performance

-

automated mechanisms supporting the development, monitoring, and reporting of information security measures of performance

-
-
- - NIST Special Publication 800-55 - -
- - Enterprise Architecture - PM-7 - -

The organization develops an enterprise architecture with consideration for information security and the resulting risk to organizational operations, organizational assets, individuals, other organizations, and the Nation.

-
- -

The enterprise architecture developed by the organization is aligned with the Federal Enterprise Architecture. The integration of information security requirements and associated security controls into the organization’s enterprise architecture helps to ensure that security considerations are addressed by organizations early in the system development life cycle and are directly and explicitly related to the organization’s mission/business processes. This process of security requirements integration also embeds into the enterprise architecture, an integral information security architecture consistent with organizational risk management and information security strategies. For PM-7, the information security architecture is developed at a system-of-systems level (organization-wide), representing all of the organizational information systems. For PL-8, the information security architecture is developed at a level representing an individual information system but at the same time, is consistent with the information security architecture defined for the organization. Security requirements and security control integration are most effectively accomplished through the application of the Risk Management Framework and supporting security standards and guidelines. The Federal Segment Architecture Methodology provides guidance on integrating information security requirements and security controls into enterprise architectures.

- PL-2 - PL-8 - PM-11 - RA-2 - SA-3 -
- -

Determine if the organization develops an enterprise architecture with consideration for:

- - PM-7[1] -

information security; and

-
- - PM-7[2] -

the resulting risk to organizational operations, organizational assets, individuals, other organizations, and the Nation.

-
-
- - EXAMINE - -

Information security program plan

-

enterprise architecture documentation

-

procedures addressing enterprise architecture development

-

results of risk assessment of enterprise architecture

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security program planning and plan implementation responsibilities

-

organizational personnel responsible for developing enterprise architecture

-

organizational personnel responsible for risk assessment of enterprise architecture

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for enterprise architecture development

-

automated mechanisms supporting the enterprise architecture and its development

-
-
- - NIST Special Publication 800-39 - -
- - Critical Infrastructure Plan - PM-8 - -

The organization addresses information security issues in the development, documentation, and updating of a critical infrastructure and key resources protection plan.

-
- -

Protection strategies are based on the prioritization of critical assets and resources. The requirement and guidance for defining critical infrastructure and key resources and for preparing an associated critical infrastructure protection plan are found in applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance.

- PM-1 - PM-9 - PM-11 - RA-3 -
- -

Determine if the organization addresses information security issues in the:

- - PM-8[1] -

development of a critical infrastructure and key resources protection plan;

-
- - PM-8[2] -

documentation of a critical infrastructure and key resources protection plan; and

-
- - PM-8[3] -

updating of the critical infrastructure and key resources protection plan.

-
-
- - EXAMINE - -

Information security program plan

-

critical infrastructure and key resources protection plan

-

procedures addressing development, documentation, and updating of the critical infrastructure and key resources protection plan

-

HSPD 7

-

National Infrastructure Protection Plan

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security program planning and plan implementation responsibilities

-

organizational personnel responsible for developing, documenting, and updating the critical infrastructure and key resources protection plan

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for developing, documenting, and updating the critical infrastructure and key resources protection plan

-

automated mechanisms supporting the development, documentation, and updating of the critical infrastructure and key resources protection plan

-
-
- - HSPD 7 - - National Infrastructure Protection Plan - -
- - Risk Management Strategy - - - - PM-9 - -

The organization:

- - a. -

Develops a comprehensive strategy to manage risk to organizational operations and assets, individuals, other organizations, and the Nation associated with the operation and use of information systems;

-
- - b. -

Implements the risk management strategy consistently across the organization; and

-
- - c. -

Reviews and updates the risk management strategy or as required, to address organizational changes.

-
-
- -

An organization-wide risk management strategy includes, for example, an unambiguous expression of the risk tolerance for the organization, acceptable risk assessment methodologies, risk mitigation strategies, a process for consistently evaluating risk across the organization with respect to the organization’s risk tolerance, and approaches for monitoring risk over time. The use of a risk executive function can facilitate consistent, organization-wide application of the risk management strategy. The organization-wide risk management strategy can be informed by risk-related inputs from other sources both internal and external to the organization to ensure the strategy is both broad-based and comprehensive.

- RA-3 -
- -

Determine if the organization:

- - PM-9(a) -

develops a comprehensive strategy to manage risk to organizational operations and assets, individuals, other organizations, and the Nation associated with the operation and use of information systems;

-
- - PM-9(b) -

implements the risk management strategy consistently across the organization;

-
- - PM-9(c) - - PM-9(c)[1] -

defines the frequency to review and update the risk management strategy;

-
- - PM-9(c)[2] -

reviews and updates the risk management strategy to address organizational changes:

- - PM-9(c)[2][a] -

with the organization-defined frequency; or

-
- - PM-9(c)[2][b] -

as required.

-
-
-
-
- - EXAMINE - -

Information security program plan

-

risk management strategy

-

procedures addressing development, implementation, review, and update of the risk management strategy

-

risk assessment results relevant to the risk management strategy

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security program planning and plan implementation responsibilities

-

organizational personnel responsible for development, implementation, review, and update of the risk management strategy

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for development, implementation, review, and update of the risk management strategy

-

automated mechanisms supporting the development, implementation, review, and update of the risk management strategy

-
-
- - NIST Special Publication 800-30 - - NIST Special Publication 800-39 - -
- - Security Authorization Process - PM-10 - -

The organization:

- - a. -

Manages (i.e., documents, tracks, and reports) the security state of organizational information systems and the environments in which those systems operate through security authorization processes;

-
- - b. -

Designates individuals to fulfill specific roles and responsibilities within the organizational risk management process; and

-
- - c. -

Fully integrates the security authorization processes into an organization-wide risk management program.

-
-
- -

Security authorization processes for information systems and environments of operation require the implementation of an organization-wide risk management process, a Risk Management Framework, and associated security standards and guidelines. Specific roles within the risk management process include an organizational risk executive (function) and designated authorizing officials for each organizational information system and common control provider. Security authorization processes are integrated with organizational continuous monitoring processes to facilitate ongoing understanding and acceptance of risk to organizational operations and assets, individuals, other organizations, and the Nation.

- CA-6 -
- -

Determine if the organization:

- - PM-10(a) -

manages (i.e., documents, tracks, and reports) the security state of organizational information systems and the environments in which those systems operate through security authorization processes;

-
- - PM-10(b) -

designates individuals to fulfill specific roles and responsibilities within the organizational risk management process; and

-
- - PM-10(c) -

fully integrates the security authorization processes into an organization-wide risk management program.

-
-
- - EXAMINE - -

Information security program plan

-

procedures addressing management (i.e., documentation, tracking, and reporting) of the security authorization process

-

security authorization documents

-

lists or other documentation about security authorization process roles and responsibilities

-

risk assessment results relevant to the security authorization process and the organization-wide risk management program

-

organizational risk management strategy

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security program planning and plan implementation responsibilities

-

organizational personnel responsible for management of the security authorization process

-

authorizing officials

-

system owners, senior information security officer

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for security authorization

-

automated mechanisms supporting the security authorization process

-
-
- - NIST Special Publication 800-37 - - NIST Special Publication 800-39 - -
- - Mission/business Process Definition - PM-11 - -

The organization:

- - a. -

Defines mission/business processes with consideration for information security and the resulting risk to organizational operations, organizational assets, individuals, other organizations, and the Nation; and

-
- - b. -

Determines information protection needs arising from the defined mission/business processes and revises the processes as necessary, until achievable protection needs are obtained.

-
-
- -

Information protection needs are technology-independent, required capabilities to counter threats to organizations, individuals, or the Nation through the compromise of information (i.e., loss of confidentiality, integrity, or availability). Information protection needs are derived from the mission/business needs defined by the organization, the mission/business processes selected to meet the stated needs, and the organizational risk management strategy. Information protection needs determine the required security controls for the organization and the associated information systems supporting the mission/business processes. Inherent in defining an organization’s information protection needs is an understanding of the level of adverse impact that could result if a compromise of information occurs. The security categorization process is used to make such potential impact determinations. Mission/business process definitions and associated information protection requirements are documented by the organization in accordance with organizational policy and procedure.

- PM-7 - PM-8 - RA-2 -
- -

Determine if the organization:

- - PM-11(a) -

defines mission/business processes with consideration for information security and the resulting risk to organizational operations, organizational assets, individuals, other organizations, and the Nation;

-
- - PM-11(b) - - PM-11(b)[1] -

determines information protection needs arising from the defined mission/business process; and

-
- - PM-11(b)[2] -

revises the processes as necessary until achievable protection needs are obtained.

-
-
-
- - EXAMINE - -

Information security program plan

-

risk management strategy

-

procedures for determining mission/business protection needs

-

risk assessment results relevant to determination of mission/business protection needs

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security program planning and plan implementation responsibilities

-

organizational personnel responsible for mission/business processes

-

organizational personnel responsible for determining information protection needs for mission/business processes

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for defining mission/business processes and their information protection needs

-
-
- - FIPS Publication 199 - - NIST Special Publication 800-60 - -
- - Insider Threat Program - PM-12 - -

The organization implements an insider threat program that includes a cross-discipline insider threat incident handling team.

-
- -

Organizations handling classified information are required, under Executive Order 13587 and the National Policy on Insider Threat, to establish insider threat programs. The standards and guidelines that apply to insider threat programs in classified environments can also be employed effectively to improve the security of Controlled Unclassified Information in non-national security systems. Insider threat programs include security controls to detect and prevent malicious insider activity through the centralized integration and analysis of both technical and non-technical information to identify potential insider threat concerns. A senior organizational official is designated by the department/agency head as the responsible individual to implement and provide oversight for the program. In addition to the centralized integration and analysis capability, insider threat programs as a minimum, prepare department/agency insider threat policies and implementation plans, conduct host-based user monitoring of individual employee activities on government-owned classified computers, provide insider threat awareness training to employees, receive access to information from all offices within the department/agency (e.g., human resources, legal, physical security, personnel security, information technology, information system security, and law enforcement) for insider threat analysis, and conduct self-assessments of department/agency insider threat posture. -Insider threat programs can leverage the existence of incident handling teams organizations may already have in place, such as computer security incident response teams. Human resources records are especially important in this effort, as there is compelling evidence to show that some types of insider crimes are often preceded by nontechnical behaviors in the workplace (e.g., ongoing patterns of disgruntled behavior and conflicts with coworkers and other colleagues). These precursors can better inform and guide organizational officials in more focused, targeted monitoring efforts. The participation of a legal team is important to ensure that all monitoring activities are performed in accordance with appropriate legislation, directives, regulations, policies, standards, and guidelines.

- AC-6 - AT-2 - AU-6 - AU-7 - AU-10 - AU-12 - AU-13 - CA-7 - IA-4 - IR-4 - MP-7 - PE-2 - PS-3 - PS-4 - PS-5 - PS-8 - SC-7 - SC-38 - SI-4 - PM-1 - PM-14 -
- -

Determine if the organization implements an insider threat program that includes a cross-discipline insider threat incident handling team.

-
- - EXAMINE - -

Information security program plan

-

insider threat program documentation

-

procedures for the insider threat program

-

risk assessment results relevant to insider threats

-

list or other documentation on the cross-discipline insider threat incident handling team

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security program planning and plan implementation responsibilities

-

organizational personnel responsible for the insider threat program

-

members of the cross-discipline insider threat incident handling team

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for implementing the insider threat program and the cross-discipline insider threat incident handling team

-

automated mechanisms supporting and/or implementing the insider threat program and the cross-discipline insider threat incident handling team

-
-
- - Executive Order 13587 - -
- - Information Security Workforce - PM-13 - -

The organization establishes an information security workforce development and improvement program.

-
- -

Information security workforce development and improvement programs include, for example: (i) defining the knowledge and skill levels needed to perform information security duties and tasks; (ii) developing role-based training programs for individuals assigned information security roles and responsibilities; and (iii) providing standards for measuring and building individual qualifications for incumbents and applicants for information security-related positions. Such workforce programs can also include associated information security career paths to encourage: (i) information security professionals to advance in the field and fill positions with greater responsibility; and (ii) organizations to fill information security-related positions with qualified personnel. Information security workforce development and improvement programs are complementary to organizational security awareness and training programs. Information security workforce development and improvement programs focus on developing and institutionalizing core information security capabilities of selected personnel needed to protect organizational operations, assets, and individuals.

- AT-2 - AT-3 -
- -

Determine if the organization establishes an information security workforce development and improvement program.

-
- - EXAMINE - -

Information security program plan

-

information security workforce development and improvement program documentation

-

procedures for the information security workforce development and improvement program

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security program planning and plan implementation responsibilities

-

organizational personnel responsible for the information security workforce development and improvement program

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for implementing information security workforce development and improvement program

-

automated mechanisms supporting and/or implementing the information security workforce development and improvement program

-
-
-
- - Testing, Training, and Monitoring - PM-14 - -

The organization:

- - a. -

Implements a process for ensuring that organizational plans for conducting security testing, training, and monitoring activities associated with organizational information systems:

- - 1. -

Are developed and maintained; and

-
- - 2. -

Continue to be executed in a timely manner;

-
-
- - b. -

Reviews testing, training, and monitoring plans for consistency with the organizational risk management strategy and organization-wide priorities for risk response actions.

-
-
- -

This control ensures that organizations provide oversight for the security testing, training, and monitoring activities conducted organization-wide and that those activities are coordinated. With the importance of continuous monitoring programs, the implementation of information security across the three tiers of the risk management hierarchy, and the widespread use of common controls, organizations coordinate and consolidate the testing and monitoring activities that are routinely conducted as part of ongoing organizational assessments supporting a variety of security controls. Security training activities, while typically focused on individual information systems and specific roles, also necessitate coordination across all organizational elements. Testing, training, and monitoring plans and activities are informed by current threat and vulnerability assessments.

- AT-3 - CA-7 - CP-4 - IR-3 - SI-4 -
- -

Determine if the organization:

- - PM-14(a) -

implements a process for ensuring that organizational plans for conducting security testing, training, and monitoring activities associated with organizational information systems:

- - PM-14(a)(1) - - PM-14(a)(1)[1] -

are developed;

-
- - PM-14(a)(1)[2] -

are maintained;

-
-
- - PM-14(a)(2) -

continue to be executed in a timely manner;

-
-
- - PM-14(b) -

reviews testing, training, and monitoring plans for consistency with:

- - PM-14(b)[1] -

the organizational risk management strategy; and

-
- - PM-14(b)[2] -

organization-wide priorities for risk response actions.

-
-
-
- - EXAMINE - -

Information security program plan

-

plans for conducting security testing, training, and monitoring activities

-

organizational procedures addressing development and maintenance of plans for conducting security testing, training, and monitoring activities

-

risk management strategy

-

procedures for review of plans for conducting security testing, training, and monitoring activities for consistency with risk management strategy and risk response priorities

-

results of risk assessments associated with conducting security testing, training, and monitoring activities

-

evidence that plans for conducting security testing, training, and monitoring activities are executed in a timely manner

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with responsibility for developing and maintaining plans for conducting security testing, training, and monitoring activities

-

organizational personnel with information security responsibilities

-
-
- - TEST - -

Organizational processes for development and maintenance of plans for conducting security testing, training, and monitoring activities

-

automated mechanisms supporting development and maintenance of plans for conducting security testing, training, and monitoring activities

-
-
- - NIST Special Publication 800-16 - - NIST Special Publication 800-37 - - NIST Special Publication 800-53A - - NIST Special Publication 800-137 - -
- - Contacts with Security Groups and Associations - PM-15 - -

The organization establishes and institutionalizes contact with selected groups and associations within the security community:

- - a. -

To facilitate ongoing security education and training for organizational personnel;

-
- - b. -

To maintain currency with recommended security practices, techniques, and technologies; and

-
- - c. -

To share current security-related information including threats, vulnerabilities, and incidents.

-
-
- -

Ongoing contact with security groups and associations is of paramount importance in an environment of rapidly changing technologies and threats. Security groups and associations include, for example, special interest groups, forums, professional associations, news groups, and/or peer groups of security professionals in similar organizations. Organizations select groups and associations based on organizational missions/business functions. Organizations share threat, vulnerability, and incident information consistent with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance.

- SI-5 -
- -

Determine if the organization establishes and institutionalizes contact with selected groups and associations with the security community to:

- - PM-15(a) -

facilitate ongoing security education and training for organizational personnel;

-
- - PM-15(b) -

maintain currency with recommended security practices, techniques, and technologies; and

-
- - PM-15(c) -

share current security-related information including threats, vulnerabilities, and incidents.

-
-
- - EXAMINE - -

Information security program plan

-

risk management strategy

-

procedures for contacts with security groups and associations

-

evidence of established and institutionalized contact with security groups and associations

-

lists or other documentation about contact with and/or membership in security groups and associations

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security program planning and plan implementation responsibilities

-

organizational personnel responsible for establishing and institutionalizing contact with security groups and associations

-

organizational personnel with information security responsibilities

-

personnel from selected groups and associations with which the organization has established and institutionalized contact

-
-
- - TEST - -

Organizational processes for establishing and institutionalizing contact with security groups and associations

-

automated mechanisms supporting contacts with security groups and associations

-
-
-
- - Threat Awareness Program - PM-16 - -

The organization implements a threat awareness program that includes a cross-organization information-sharing capability.

-
- -

Because of the constantly changing and increasing sophistication of adversaries, especially the advanced persistent threat (APT), it is becoming more likely that adversaries may successfully breach or compromise organizational information systems. One of the best techniques to address this concern is for organizations to share threat information. This can include, for example, sharing threat events (i.e., tactics, techniques, and procedures) that organizations have experienced, mitigations that organizations have found are effective against certain types of threats, threat intelligence (i.e., indications and warnings about threats that are likely to occur). Threat information sharing may be bilateral (e.g., government-commercial cooperatives, government-government cooperatives), or multilateral (e.g., organizations taking part in threat-sharing consortia). Threat information may be highly sensitive requiring special agreements and protection, or less sensitive and freely shared.

- PM-12 - PM-16 -
- -

Determine if the organization implements a threat awareness program that includes a cross-organization information-sharing capability.

-
- - EXAMINE - -

Information security program plan

-

threat awareness program documentation

-

procedures for the threat awareness program

-

risk assessment results relevant to threat awareness

-

list or other documentation on the cross-organization information-sharing capability

-

other relevant documents or records

-
-
- - INTERVIEW - -

Organizational personnel with information security program planning and plan implementation responsibilities

-

organizational personnel responsible for the threat awareness program

-

organizational personnel with responsibility for the cross-organization information-sharing capability

-

organizational personnel with information security responsibilities

-

personnel with whom threat awareness information is shared by the organization

-
-
- - TEST - -

Organizational processes for implementing the threat awareness program

-

Organizational processes for implementing the cross-organization information-sharing capability

-

automated mechanisms supporting and/or implementing the threat awareness program

-

automated mechanisms supporting and/or implementing the cross-organization information-sharing capability

-
-
-
-
-
From c1d0dc151c4d1340c8b7b1c01a0c1e9f774be775 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 16 Jan 2020 11:13:03 +0100 Subject: [PATCH 080/110] Refactor: Extract xmllint manipulation to separate file --- pkg/xml_validation/validate.go | 22 ++++++++++++++++++++++ validator/validator.go | 21 ++++++--------------- 2 files changed, 28 insertions(+), 15 deletions(-) create mode 100644 pkg/xml_validation/validate.go diff --git a/pkg/xml_validation/validate.go b/pkg/xml_validation/validate.go new file mode 100644 index 00000000..0da45eeb --- /dev/null +++ b/pkg/xml_validation/validate.go @@ -0,0 +1,22 @@ +package xml_validation + +import ( + "bytes" + "errors" + "os/exec" +) + +// Validate validates xml file against given schema +func Validate(schemaPath, inputFile string) error { + xmllintCmd := exec.Command("xmllint", "--schema", schemaPath, inputFile, "--noout") + + xmllintCmdOutput := &bytes.Buffer{} + xmllintCmdErr := &bytes.Buffer{} + xmllintCmd.Stdout = xmllintCmdOutput + xmllintCmd.Stderr = xmllintCmdErr + + if err := xmllintCmd.Run(); err != nil { + return errors.New(xmllintCmdErr.String()) + } + return nil +} diff --git a/validator/validator.go b/validator/validator.go index 36872bee..039ef631 100644 --- a/validator/validator.go +++ b/validator/validator.go @@ -1,13 +1,12 @@ package validator import ( - "bytes" "fmt" "io" "os" - "os/exec" "path/filepath" + "github.com/docker/oscalkit/pkg/xml_validation" "github.com/santhosh-tekuri/jsonschema" "github.com/santhosh-tekuri/jsonschema/loader" "github.com/sirupsen/logrus" @@ -86,21 +85,13 @@ func (x xmlValidator) Validate(file ...string) error { } defer rawFile.Close() - xmllintCmd := exec.Command("xmllint", "--schema", x.SchemaFile, f, "--noout") - - xmllintCmdOutput := &bytes.Buffer{} - xmllintCmdErr := &bytes.Buffer{} - xmllintCmd.Stdout = xmllintCmdOutput - xmllintCmd.Stderr = xmllintCmdErr - - if err := xmllintCmd.Run(); err != nil { - logrus.Error(string(xmllintCmdErr.Bytes())) - continue + err = xml_validation.Validate(x.SchemaFile, f) + if err != nil { + logrus.Error(err) + } else { + logrus.Infof("%s is valid against XML schema %s", f, x.SchemaFile) } - - logrus.Infof("%s is valid against XML schema %s", f, x.SchemaFile) } - return nil } From b1a1510d9f101b0e722fba94945cd6f4886c4407 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 16 Jan 2020 11:48:14 +0100 Subject: [PATCH 081/110] Handle the validation errors more diligently This will result in more quality output in cases like xmllint missing. --- pkg/xml_validation/validate.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/xml_validation/validate.go b/pkg/xml_validation/validate.go index 0da45eeb..3659e161 100644 --- a/pkg/xml_validation/validate.go +++ b/pkg/xml_validation/validate.go @@ -16,6 +16,10 @@ func Validate(schemaPath, inputFile string) error { xmllintCmd.Stderr = xmllintCmdErr if err := xmllintCmd.Run(); err != nil { + stderr := xmllintCmdErr.String() + if stderr == "" { + return err + } return errors.New(xmllintCmdErr.String()) } return nil From 32258f36950cd0f58d9849fff20afeb4408aa1c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 16 Jan 2020 12:48:08 +0100 Subject: [PATCH 082/110] Do not check file existence before validation Firstly, with improved error handling, we will get nice error anyway (in case the file does not exist). Secondly, cli/cmd/validate already checks the file existence. --- validator/validator.go | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/validator/validator.go b/validator/validator.go index 039ef631..59e734dd 100644 --- a/validator/validator.go +++ b/validator/validator.go @@ -79,13 +79,7 @@ func (j jsonValidator) Validate(file ...string) error { // XML schema (.xsd). Wrapper around `xmllint` func (x xmlValidator) Validate(file ...string) error { for _, f := range file { - rawFile, err := os.Open(f) - if err != nil { - return err - } - defer rawFile.Close() - - err = xml_validation.Validate(x.SchemaFile, f) + err := xml_validation.Validate(x.SchemaFile, f) if err != nil { logrus.Error(err) } else { From 16caf977b6d06c38455ec78088d25fa775e1f5f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 16 Jan 2020 12:58:47 +0100 Subject: [PATCH 083/110] Drop oscalLoader workaround It is no longer needed, with the latest oscal json schema. --- validator/validator.go | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/validator/validator.go b/validator/validator.go index 59e734dd..b40c5d94 100644 --- a/validator/validator.go +++ b/validator/validator.go @@ -2,19 +2,14 @@ package validator import ( "fmt" - "io" "os" "path/filepath" "github.com/docker/oscalkit/pkg/xml_validation" "github.com/santhosh-tekuri/jsonschema" - "github.com/santhosh-tekuri/jsonschema/loader" "github.com/sirupsen/logrus" ) -// Workaround for unpublished schemas referenced by http://csrc.nist.gov/ns/oscal -var basePath string - // Validator ... type Validator interface { Validate(file ...string) error @@ -28,8 +23,6 @@ type xmlValidator struct { SchemaFile string } -type oscalLoader struct{} - // New creates a Validator based on the specified schema file func New(schemaFile string) Validator { switch filepath.Ext(schemaFile) { @@ -43,14 +36,9 @@ func New(schemaFile string) Validator { return nil } -func (oscalLoader) Load(url string) (io.ReadCloser, error) { - return os.Open(filepath.Join(basePath, filepath.Base(url))) -} - // Validate validates one or more JSON files against a specific // JSON schema. func (j jsonValidator) Validate(file ...string) error { - basePath = filepath.Dir(j.SchemaFile) schema, err := jsonschema.Compile(j.SchemaFile) if err != nil { return fmt.Errorf("Error compiling OSCAL schema: %v", err) @@ -88,7 +76,3 @@ func (x xmlValidator) Validate(file ...string) error { } return nil } - -func init() { - loader.Register("http", oscalLoader{}) -} From 68033c796b4324522f0a098dcdbe8ed8a33f2f13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 16 Jan 2020 13:13:02 +0100 Subject: [PATCH 084/110] Refactor: Extract json schema manipulation to separate module --- pkg/json_validation/validate.go | 27 +++++++++++++++++++++++++++ validator/validator.go | 24 +++++------------------- 2 files changed, 32 insertions(+), 19 deletions(-) create mode 100644 pkg/json_validation/validate.go diff --git a/pkg/json_validation/validate.go b/pkg/json_validation/validate.go new file mode 100644 index 00000000..012f74cb --- /dev/null +++ b/pkg/json_validation/validate.go @@ -0,0 +1,27 @@ +package json_validation + +import ( + "fmt" + "os" + + "github.com/santhosh-tekuri/jsonschema" +) + +// Validate validates JSON file against a specific JSON schema. +func Validate(schemaPath, inputFile string) error { + schema, err := jsonschema.Compile(schemaPath) + if err != nil { + return fmt.Errorf("Error compiling OSCAL schema: %v", err) + } + + rawFile, err := os.Open(inputFile) + if err != nil { + return fmt.Errorf("Error opening file: %s, %v", inputFile, err) + } + defer rawFile.Close() + + if err = schema.Validate(rawFile); err != nil { + return err + } + return nil +} diff --git a/validator/validator.go b/validator/validator.go index b40c5d94..55dd97c3 100644 --- a/validator/validator.go +++ b/validator/validator.go @@ -1,12 +1,10 @@ package validator import ( - "fmt" - "os" "path/filepath" + "github.com/docker/oscalkit/pkg/json_validation" "github.com/docker/oscalkit/pkg/xml_validation" - "github.com/santhosh-tekuri/jsonschema" "github.com/sirupsen/logrus" ) @@ -39,25 +37,13 @@ func New(schemaFile string) Validator { // Validate validates one or more JSON files against a specific // JSON schema. func (j jsonValidator) Validate(file ...string) error { - schema, err := jsonschema.Compile(j.SchemaFile) - if err != nil { - return fmt.Errorf("Error compiling OSCAL schema: %v", err) - } - - logrus.Debugf("Validating %s against OSCAL schema", file) - for _, f := range file { - rawFile, err := os.Open(f) + err := json_validation.Validate(j.SchemaFile, f) if err != nil { - return fmt.Errorf("Error opening file: %s, %v", f, err) - } - defer rawFile.Close() - - if err = schema.Validate(rawFile); err != nil { - return err + logrus.Error(err) + } else { + logrus.Infof("%s is valid against JSON schema %s", f, j.SchemaFile) } - - logrus.Infof("%s is valid against JSON schema %s", f, j.SchemaFile) } return nil From 2391a0eed9ea2cebfcc77003718fe1a5fac75cc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 16 Jan 2020 15:26:09 +0100 Subject: [PATCH 085/110] OscalSource should be able to tell format of the given resource Although, getting the file format out file extension is rather lame, it is what other parts of the code so far do. I envision, we will have to rewrite the format heuristic with look ahead parser one day. However, at this early stage it is good enough. --- pkg/oscal_source/oscal_source.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pkg/oscal_source/oscal_source.go b/pkg/oscal_source/oscal_source.go index 5751fb1a..83f16827 100644 --- a/pkg/oscal_source/oscal_source.go +++ b/pkg/oscal_source/oscal_source.go @@ -5,6 +5,16 @@ import ( "github.com/docker/oscalkit/types/oscal" "os" "path/filepath" + "strings" +) + +type DocumentFormat int + +const ( + UnknownFormat DocumentFormat = iota + XmlFormat + JsonFormat + YamlFormat ) // OSCALSource is intermediary that handles IO and low-level common operations consistently for oscalkit @@ -44,6 +54,17 @@ func (s *OSCALSource) OSCAL() *oscal.OSCAL { return s.oscal } +func (s *OSCALSource) DocumentFormat() DocumentFormat { + if strings.HasSuffix(s.UserPath, ".xml") { + return XmlFormat + } else if strings.HasSuffix(s.UserPath, ".json") { + return JsonFormat + } else { + return UnknownFormat + } + +} + // Close the OSCALSource func (s *OSCALSource) Close() { if s.file != nil { From a9198167b54b7e785c71360a92dc1db4ee34ed2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 16 Jan 2020 16:04:40 +0100 Subject: [PATCH 086/110] Refactor: Extract DocumentFormat to separate constants module --- pkg/oscal/constants/file.go | 11 +++++++++++ pkg/oscal_source/oscal_source.go | 19 +++++-------------- 2 files changed, 16 insertions(+), 14 deletions(-) create mode 100644 pkg/oscal/constants/file.go diff --git a/pkg/oscal/constants/file.go b/pkg/oscal/constants/file.go new file mode 100644 index 00000000..96b8f14e --- /dev/null +++ b/pkg/oscal/constants/file.go @@ -0,0 +1,11 @@ +package constants + +// Representing OSCAL file format. XML, JSON, YAML, ... +type DocumentFormat int + +const ( + UnknownFormat DocumentFormat = iota + XmlFormat + JsonFormat + YamlFormat +) diff --git a/pkg/oscal_source/oscal_source.go b/pkg/oscal_source/oscal_source.go index 83f16827..6071d1a5 100644 --- a/pkg/oscal_source/oscal_source.go +++ b/pkg/oscal_source/oscal_source.go @@ -2,21 +2,13 @@ package oscal_source import ( "fmt" + "github.com/docker/oscalkit/pkg/oscal/constants" "github.com/docker/oscalkit/types/oscal" "os" "path/filepath" "strings" ) -type DocumentFormat int - -const ( - UnknownFormat DocumentFormat = iota - XmlFormat - JsonFormat - YamlFormat -) - // OSCALSource is intermediary that handles IO and low-level common operations consistently for oscalkit type OSCALSource struct { UserPath string @@ -54,15 +46,14 @@ func (s *OSCALSource) OSCAL() *oscal.OSCAL { return s.oscal } -func (s *OSCALSource) DocumentFormat() DocumentFormat { +func (s *OSCALSource) DocumentFormat() constants.DocumentFormat { if strings.HasSuffix(s.UserPath, ".xml") { - return XmlFormat + return constants.XmlFormat } else if strings.HasSuffix(s.UserPath, ".json") { - return JsonFormat + return constants.JsonFormat } else { - return UnknownFormat + return constants.UnknownFormat } - } // Close the OSCALSource From afce7d070eb848fe059aca4d6bbdda7d82af26d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Thu, 16 Jan 2020 16:29:11 +0100 Subject: [PATCH 087/110] Refactor: DocumentType to separate constants module --- cli/cmd/info.go | 8 ++++---- pkg/oscal/constants/file.go | 9 +++++++++ pkg/oscal_source/html.go | 4 ++-- types/oscal/oscal.go | 20 +++++++------------- 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/cli/cmd/info.go b/cli/cmd/info.go index 7ee7b6a9..a885be9c 100644 --- a/cli/cmd/info.go +++ b/cli/cmd/info.go @@ -3,8 +3,8 @@ package cmd import ( "fmt" + "github.com/docker/oscalkit/pkg/oscal/constants" "github.com/docker/oscalkit/pkg/oscal_source" - "github.com/docker/oscalkit/types/oscal" "github.com/docker/oscalkit/types/oscal/catalog" "github.com/urfave/cli" ) @@ -24,17 +24,17 @@ var Info = cli.Command{ o := os.OSCAL() switch o.DocumentType() { - case oscal.SSPDocument: + case constants.SSPDocument: fmt.Println("OSCAL System Security Plan") fmt.Println("ID:\t", o.SystemSecurityPlan.Id) printMetadata(o.SystemSecurityPlan.Metadata) return nil - case oscal.ProfileDocument: + case constants.ProfileDocument: fmt.Println("OSCAL Profile (represents subset of controls from OSCAL catalog(s))") fmt.Println("ID:\t", o.Profile.Id) printMetadata(o.Profile.Metadata) return nil - case oscal.CatalogDocument: + case constants.CatalogDocument: fmt.Println("OSCAL Catalog (represents library of control assessment objectives and activities)") fmt.Println("ID:\t", o.Catalog.Id) printMetadata(o.Catalog.Metadata) diff --git a/pkg/oscal/constants/file.go b/pkg/oscal/constants/file.go index 96b8f14e..7b51cb9a 100644 --- a/pkg/oscal/constants/file.go +++ b/pkg/oscal/constants/file.go @@ -9,3 +9,12 @@ const ( JsonFormat YamlFormat ) + +type DocumentType int + +const ( + UnknownDocument = iota + CatalogDocument + ProfileDocument + SSPDocument +) diff --git a/pkg/oscal_source/html.go b/pkg/oscal_source/html.go index 19af3b6b..56f2d8ee 100644 --- a/pkg/oscal_source/html.go +++ b/pkg/oscal_source/html.go @@ -4,12 +4,12 @@ import ( "bytes" "errors" "github.com/docker/oscalkit/pkg/bundled" + "github.com/docker/oscalkit/pkg/oscal/constants" "github.com/docker/oscalkit/pkg/xslt" - "github.com/docker/oscalkit/types/oscal" ) func (s *OSCALSource) HTML() (*bytes.Buffer, error) { - if s.OSCAL().DocumentType() != oscal.CatalogDocument { + if s.OSCAL().DocumentType() != constants.CatalogDocument { return nil, errors.New("HTML is supported only for OSCAL Catalog") } transformation, err := bundled.HtmlXslt() diff --git a/types/oscal/oscal.go b/types/oscal/oscal.go index d9785ffc..3d8672f8 100644 --- a/types/oscal/oscal.go +++ b/types/oscal/oscal.go @@ -8,20 +8,14 @@ import ( "io" "io/ioutil" + "github.com/docker/oscalkit/pkg/oscal/constants" "github.com/docker/oscalkit/types/oscal/catalog" "github.com/docker/oscalkit/types/oscal/profile" ssp "github.com/docker/oscalkit/types/oscal/system_security_plan" yaml "gopkg.in/yaml.v2" ) -type DocumentType int - const ( - CatalogDocument DocumentType = iota - ProfileDocument - SSPDocument - UnknownDocument = -1 - catalogRootElement = "catalog" profileRootElement = "profile" sspRootElement = "system-security-plan" @@ -34,18 +28,18 @@ type OSCAL struct { // Declarations *Declarations `json:"declarations,omitempty" yaml:"declarations,omitempty"` Profile *profile.Profile `json:"profile,omitempty" yaml:"profile,omitempty"` *ssp.SystemSecurityPlan - documentType DocumentType + documentType constants.DocumentType } -func (o *OSCAL) DocumentType() DocumentType { +func (o *OSCAL) DocumentType() constants.DocumentType { if o.Catalog != nil { - return CatalogDocument + return constants.CatalogDocument } else if o.Profile != nil { - return ProfileDocument + return constants.ProfileDocument } else if o.SystemSecurityPlan != nil { - return SSPDocument + return constants.SSPDocument } else { - return UnknownDocument + return constants.UnknownDocument } } From 436c745df0e10bd14afbf99b3a2385024a7e0398 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Fri, 17 Jan 2020 10:47:35 +0100 Subject: [PATCH 088/110] Improve `oscalkit validate` to automatically select relevant OSCAL schema This will highly improve usability of the tool and thus increase chances that people will validate their own files. Further, validating file automatically shall turn out beneficial to the tool itself, once we start validating file oscalkit itself produces. --- README.md | 5 +- cli/cmd/validate.go | 54 ++++--------- pkg/bundled/oscal.go | 42 +++++++++- pkg/bundled/pkged.go | 2 +- pkg/oscal_source/validate.go | 38 +++++++++ validator/validator.go | 64 --------------- validator/validator_test.go | 153 ----------------------------------- 7 files changed, 96 insertions(+), 262 deletions(-) create mode 100644 pkg/oscal_source/validate.go delete mode 100644 validator/validator.go delete mode 100644 validator/validator_test.go diff --git a/README.md b/README.md index dc046e03..acf738e6 100644 --- a/README.md +++ b/README.md @@ -159,7 +159,7 @@ Convert OpenControl project to OSCAL-formatted JSON: ### Validate against XML and JSON schemas -The tool supports validation of OSCAL-formatted XML and JSON files against the corresponding OSCAL XML schemas (.xsd) and JSON schemas. XML schema validation requires the `xmllint` tool on the local machine (included with macOS and Linux. Windows installation instructions [here](https://stackoverflow.com/a/21227833)) +The tool supports validation of OSCAL-formatted XML and JSON files against the corresponding OSCAL XML schemas (.xsd) and JSON schemas. Schema is included in the tool and found automatically based on the type of OSCAL file. XML schema validation requires the `xmllint` tool on the local machine (included with macOS and Linux. Windows installation instructions [here](https://stackoverflow.com/a/21227833)) ``` NAME: @@ -171,9 +171,6 @@ USAGE: DESCRIPTION: Validate OSCAL-formatted XML files against a specific XML schema (.xsd) or OSCAL-formatted JSON files against a specific JSON schema - -OPTIONS: - --schema value, -s value schema file to validate against ``` #### Examples diff --git a/cli/cmd/validate.go b/cli/cmd/validate.go index 87dd7d95..a9c7e600 100644 --- a/cli/cmd/validate.go +++ b/cli/cmd/validate.go @@ -1,10 +1,8 @@ package cmd import ( - "path/filepath" - - "github.com/docker/oscalkit/validator" - "github.com/sirupsen/logrus" + "fmt" + "github.com/docker/oscalkit/pkg/oscal_source" "github.com/urfave/cli" ) @@ -12,49 +10,29 @@ var schemaFile string // Validate ... var Validate = cli.Command{ - Name: "validate", - Usage: "validate files against OSCAL XML and JSON schemas", - Description: `Validate OSCAL-formatted XML files against a specific XML schema (.xsd) - or OSCAL-formatted JSON files against a specific JSON schema`, - ArgsUsage: "[files...]", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "schema, s", - Usage: "schema file to validate against", - Destination: &schemaFile, - }, - }, + Name: "validate", + Usage: "validate files against OSCAL XML and JSON schemas", + Description: `Validate OSCAL-formatted files against a specific OSCAL schema`, + ArgsUsage: "[files...]", Before: func(c *cli.Context) error { if c.NArg() < 1 { return cli.NewExitError("oscalkit validate requires at least one argument", 1) } - - if schemaFile == "" { - return cli.NewExitError("missing schema file (-s) flag", 1) - } - - for _, f := range c.Args() { - if filepath.Ext(f) == ".xml" && filepath.Ext(schemaFile) != ".xsd" { - return cli.NewExitError("Schema file should be .xsd", 1) - } - - if filepath.Ext(f) == ".json" && filepath.Ext(schemaFile) != ".json" { - return cli.NewExitError("Schema file should be .json", 1) - } - } - return nil }, Action: func(c *cli.Context) error { - schemaValidator := validator.New(schemaFile) + for _, filePath := range c.Args() { + os, err := oscal_source.Open(filePath) + if err != nil { + return cli.NewExitError(fmt.Sprintf("Could not open oscal file: %v", err), 1) + } + defer os.Close() - if err := schemaValidator.Validate(c.Args()...); err != nil { - logrus.Error(err) - return nil + err = os.Validate() + if err != nil { + return cli.NewExitError(err, 1) + } } - - logrus.Debug("Validation complete") - return nil }, } diff --git a/pkg/bundled/oscal.go b/pkg/bundled/oscal.go index 42f0e23a..892af02f 100644 --- a/pkg/bundled/oscal.go +++ b/pkg/bundled/oscal.go @@ -1,24 +1,62 @@ package bundled import ( + "fmt" + "github.com/docker/oscalkit/pkg/oscal/constants" "github.com/markbates/pkger" + "github.com/markbates/pkger/pkging" "io" "io/ioutil" "os" ) +var schemaPaths = map[constants.DocumentFormat]map[constants.DocumentType]string{ + constants.XmlFormat: { + constants.CatalogDocument: "/OSCAL/xml/schema/oscal_catalog_schema.xsd", + constants.ProfileDocument: "/OSCAL/xml/schema/oscal_profile_schema.xsd", + constants.SSPDocument: "/OSCAL/xml/schema/oscal_ssp_schema.xsd", + }, + constants.JsonFormat: { + constants.CatalogDocument: "/OSCAL/json/schema/oscal_catalog_schema.json", + constants.ProfileDocument: "/OSCAL/json/schema/oscal_profile_schema.json", + constants.SSPDocument: "/OSCAL/json/schema/oscal_ssp_schema.json", + }, +} + +func noop() { + // Hint pkger tool to bundle these files + pkger.Include("/OSCAL/xml/schema/") + pkger.Include("/OSCAL/json/schema/") +} + type BundledFile struct { Path string } +func Schema(fileFormat constants.DocumentFormat, oscalComponent constants.DocumentType) (*BundledFile, error) { + schemas, ok := schemaPaths[fileFormat] + if !ok { + fmt.Errorf("Cannot find schema for FileFormat %i", fileFormat) + } + schemaPath, ok := schemas[oscalComponent] + if !ok { + fmt.Errorf("Cannot find schema for document type %i", fileFormat) + } + + return localBundledFile(pkger.Open(schemaPath)) +} + func HtmlXslt() (*BundledFile, error) { - in, err := pkger.Open("/OSCAL/src/utils/util/publish/XSLT/oscal-browser-display.xsl") + return localBundledFile(pkger.Open("/OSCAL/src/utils/util/publish/XSLT/oscal-browser-display.xsl")) +} + +func localBundledFile(in pkging.File, err error) (*BundledFile, error) { if err != nil { return nil, err } defer in.Close() - out, err := ioutil.TempFile("/tmp", "oscal_xslt") + out, err := ioutil.TempFile("/tmp", "oscal") if err != nil { return nil, err } diff --git a/pkg/bundled/pkged.go b/pkg/bundled/pkged.go index 98c72500..ff222387 100644 --- a/pkg/bundled/pkged.go +++ b/pkg/bundled/pkged.go @@ -5,4 +5,4 @@ import ( "github.com/markbates/pkger/pkging/mem" ) -var _ = pkger.Apply(mem.UnmarshalEmbed([]byte(`1f8b08000000000000ffec7c6d73a2c8dbef77f1ed6477789024a4eabc101c11a324624203a74e6dd1e002d23cfc03a2b835dffd5437a080989899ec7d4edd75bf98dda8d87df5f5f0bb1edb7f067ef4779c0e1efe19e07f63ff6df030f8eec5e1fa7b8ab68195fac11f7f33fc77c7caacef6f6bc7b3b2efae9f7df7b6f0bb13dbc1faed7b9cda160afc6c703390c3247ecb9eadcc1b3c0c063703c50ad7838741e389716c971fbd586fee3a2bff56e3b8fa6b6165b6377888b608dd0c569985d68387bf2d94aeab57eada4ae3a87c568a273e5aa7f5d3e5dec797e37572fcfb659d669da7f15b9d6f2c62678bf7fb67501dc0f5336f0bffb4e3b0e7a80bcb8f060fd9db767df3bb5c93e245ecfcf202dfddf8cf3076c83adafa2df5097fe83f6976f0f3e7cf9bc1dfe5b1ff79e7380fdf9f56e268fe3d7db3bf6f331fa5e4bfdf932d447eea7dd757f397f2d93fe05bbc4bd76f7f387e9a20abf8739f22bc34d621fc7f679d593e22bb450dd1f77eed6690fa87f5e081e6f87bfe6610c6ce7af030646fc99f7f653ef93a43d1fc1f34fd07c3bdd0f403c73fb0dc9f147fcb53772c477fa3e8078a1adc0cfcf42f078ba0d294b420148cd7f9e0e1767877c7dc0ce4281e3cf0d4f096e1f99b8182fc28183cd044e6ebc103cb32d4f066f0ea3b83079aa2a89b8174fa53ffebafc472a8c1037533501dbc2675335835491750501e6548f1b7f8656c07e9e081656e06a3cc0f312dabb58d1fbfe3a9bbfbe12d77335052fc0e4bdf7377147bcffdbc192c3a8f0e6fef78eeeef8687de89f3703b1bb284d0d198aa99f1cdeddf314cfd0fc4f42fc36daa66b67f0f0bfa91bea86fa3f4427bcf5dbef5afbc72a73190faa4fff070bfe4bb1e0669090b3fc33780edc8f8e5449eab780e1e7cd00d33c78183c8ff921043bd709b5c266500e3794bf580d77b22f20182ab929a1ad79a07c4d53a5f98beb3f1f868fcf53ef00c7c9c199a2d4d495d8041a254fbd0c4adce129c29f51be3555297b1ce773d6619d8263170597dba19d2f5e02ee69c51bafd42ed7a6330f464a08d95926bbb12b4f4d64474a0299212f6f7e6c17a2fc288bc21082fdd63e7cb8e6d09aaa1924df1935be97e436a3782d9a18e560878b2d0cd1c111b908b2460ea3450e596563805d4ece8fe991b4a1c1ec69537acdec503b38604fcd75a1308199ac25edf0bc9a956b8bf237d11fb9f85fc51bca04f40e4a13ca5c0999a1ab1b6b4cf9f3a27c4e1647f784d6f110d38a5fbbcf92870cb0ac3f2fdf9baa8923edd133a6a57a4f1eef8736b3bb75c249ea80d70c32866b335a6a02857a5ecd0253573626e0020370d4d3a63e7b4259ba9a9a5abad75772de5e6f973b12a2a0f4dad95ba1d6608fe4a9cad9d22b2f472a5a4f97b9c12a0779337c7c167f64f395b034f55966e9ea419634cf6610b27d21c7ba04a50967012e92452aeba3df60f8dd7a45e7a62f1c4cb04706bbe4655fddd8ecc29f1f4e7cc1bc9ab3252d8d75eee74c875fe3bd0f1995932525357405cbe60e4a3c966706c34966aedcfcd1473ca6bdb9f67aaaa44fe164674b7b6eaeab08ea426ae82ab28bfbc6dabbdc08f960fd527d77bccb1bf2bb9fb31d9997cf3d1ed78f4eebca12ed3992121f75679c6c0c5df5a0c447f274e7563a88f9934249db3812caa17fd29b8fe87d16f9523f242db3a5bde75472fd4837eb7d2b5df06b5e3f4b6ed1e069a9472bb9c9f7529ebab083d3203bedab1d8e72c4fc1acb97e9c37b9df4bab0c0c487d2ab4be4f642f9b5ced5723be929b7810c47d9219fcad3d4856052980cda3e6d2608bea4ae2d4d8212bf627701b4eca9107cc8621b916fe5a91a5b60e8da0c9f5a60e91ae1de3398d4fd7b79d4b1adcd6abec1f05b673acba128dc61d9d9a193409fa6203bba95c7a3ad52aebb33801a607d7ff2477b135077b234cbed5045f626761dc94ba02f04905529f3c25ea77d46df6431be354354d8ec3233182f81d2329545eee080d9e9bce3a1fbb849424b9f1d1c91de58124acd5e1a050457027fe4d9a8de538817ab9d6b8de55496dcc35c146245c4af5ff16b06f3d30cf9ad23d2a101e8044e835b79aa78305a6436a31516309a7bf9f86c90a1cef793dc4363ad83a52708f368b11921794af5c8f43e97253571fc1dc6b54aff85133f7d3a3581493df9026549682b4f951c4a2890a5596a00e5ad298b39d823335a36e59419fa2cb2c0308392163ae3d85d8843da04545316f9bc10024b37b6b634291c5168c91286fcd6ecea96d45afb9c0722b733f41985f9d07be6a9820c56c57ecfb5c68beabd739e291d9e35f8132f8af2bd7521845847e6ba92acc3d75b79fc835a88af8df391b39df629dfbb93253387d132b319746bbec4eee265b19bb5e48865d2f9ee15723525c474bfdb43e3be4de3e874467147d6984782678793ac69e7735dcded52865469737dfa38da2e422d6bf18d9c779fc0f035b3242d31198feae32fa1fd1376b6167bedeca84b06a0f0d94f1824d1c894100d57c20132fbc41485c80e350437677c1d2ec4d73b792a78a6a42630b4cb7331ed7375f4cd832b61d7c2457fb4ebe87a83275c6e8409f6c398c61e1b9a114c75246de8887402431541fcbe4815efac995a807b237a22a103c6fbf54bec5a80bc8fe6609642a66db398c67985df4638d9588c534056db9a22bd81cc3ec73668807d62309a0fa71a7a7a9f9ff533a7f3e8b35adebbf9a63cd3499f3a9f35f57f3ada42096dad82f3ed907f33c190c812638ec9ce720770c11c602ce28b275f484d40e73054620b982164866d0c015a60e958763576a99e1d66b91d4eb62683e54c62adcc94b40d64671eb171fc3d8c372b9ab2a6783f276eca9ed847b4741d89c88f31f51965011c9bd21e945004891f22b2c3fadad4a5cc91f85da51badf78d90a71c89cfded39b7988b6d81f38e2ce9d874a0c19b43157429fff3bc9449a6cac430743c5e1beb3c7d6019c67b34a62321c32c577d72c4cb0c49f7b06934576c8d330c4be934f218b7dbd90c0306be2318993b15e1e9f296550da9fdfc2ee04460ac2bc9de3bd993efc0ada5829728c01f674c9870a57599583d2ebad2c218ae8efe1684b8109142c7bca02fcf6c917686c5b7648f0a99fe71516ce010a7a3098235851ed6b8693cc027beec9170e06e00e735d417688c2a7e3191c640127c6bed008f9d41ca7cdf8f8b20d9631cc9d2c1d759eb52444b57c6351fb6a6c4f1a5a8f5b9f15f5bec407eb6e4bf616e00e58874f584627668f9f7a1a5f8a2338d6d2d5d89cce3c871936647676de23ff483e8bf189c4e36873615d1fb2ee451b830005a6b4c798c35a40a52c7cbe8eff99470a6d440a55fadd23ff320ba85b429b34c3b9dd276458e6474fbeb0c5b9b40176c7ef3a4ceddfce3f2b7998ba4fe357cc43f7dc776139d03b0328d45c573d23c4f960ea3a0c0a1cc9c57e7b57ea1a3ec3deb3a70aa601eb486ae838af5b7e7886165f4294d9d2648331ca00b3d45c09149179c7ef55b1dc45ec2d79e814a61e7c8c43459fcf1e9d62bfaecfdd681d9f718c41e85f89fbcb7d2eed27f4ef2575721989cbdb5821d4fc6bc6cd27b9bcc425ee49939dcdb4be975aab3236c2b94785599933453bfc1d9b9dd0863e6bd99b819fbfe4af70acdccd3dc6bbbccc894dcf0e11d129926b8ee26bf3658c9729c604b24fd4a8178c1a79e429bfc4fca30cc6e5e5903f18cc04af4fea2ab22f649051514f5e7b5fd388e38739e0431ca3937c7c4cf973bfaaa11ccf72a217bfff997c9be8af3e3ae5db8d5cc060f69ecd2e783924f8bb937d2131c794bf664bfcb04382a3be09ccdc0e5fe346eda0cc2527e95e5ff1230b2cd359318c1e75ca6fd650aea87ddccfd9233d1fd717c41fd9fca5e4bfc5689c2c711e04afbc1caa889ca5f27176219fcb24547218a905647699cd0ac82864d7d1152c9b11d1bfba6ed590f1a7f7888402b202b223956bd65a6c56f5f0794cc051adf749cc4e2347d20ab9e25b4513cec33786be8c9712a11beb7f3a2b16d1fc875040668f1e31bd7e55fbba48b386e3441c47674614641658fab278d29147948d2ca03ab22fd036f3cacb819098e2391fded5f5135f1b351d928f6da03439d807ca5f33fb1c3f3b0784aeb85f4f94dc9e06dd7a23d6ad56bdaed2f98d01f66953a74e67a63d8b79cdba75a6566d93419425d2750eb3c532785ecd0a07e0586ce1376df128abe92cb727d9a8b219f779358acaba9fe3c87ebb96579dc783d22eebeaf1d535add35913d317285327fca831aa5dabe9d41ccb9cf858534330f43c182a08026deb4c176d9e943538ea3938cad13501171b80db94baa31e9e453e56c6ad3dde3d432fff5ab52e6c3b7c60be50be05b80d9c6a81d95337c6e768d564d98a1f9b331e79f65448d72bfa8485faa2a94735df0a1398c80eb5adc16887063e2730545207a8a82dcbcaa6808163e903394fc8538f526def3364865a61625ee98ba42b076bbcfcf61a6aa1a9631928c83ec4eeb314b895dfe3e5f0620ce53f07c4e7decf99e05b97ff35465ac068ea9d375f516e1d4fc9d33a9e72b0fdbb96a415e66a94cd1b35e6237f2ff899ca9f92754dacff5301e74924e63081e939608ff7290c9df4553c281ed7bfc6cfb675b8e2fbb57eed0a7d3afa988e3d74ebf6c9df7df5e6befe41131fdbd8d5b5f5636d1982c91bc9a9bb75ed93ee923c62ae57f5a71ac7a2190d71ee5bc87d7abcb3437e07a823c6febb58f4495d59321ec271286449dfae2d4b2d1b55b28abab1ff8cc6fa3bc4712d92251ee76f090c27a93c51964fe3d16efef27a90a7d89670fe8a6313c178a576279b93ccdcf685c00e272ce90d4dd5d85c0909d405cf6097ae2395757fbcc76aa22a2f277d253a2bafa84c9e0889c16458cf69bbd475ec27880dcd57d4b76bf5f3a49b7cbb47b612eee5237e28b471f29f79b74782f97f8c7b56c2d201fb14c7f916e0285808d57a9fb2b9a3bdcd9956cc029747fb70883fc4b2f85b147a6df58aefd63efb025deffbea8abf57f9e77931dc3674fede1a2faed2ede61ab3e9c9d66a1cb1236d3b0768dbe70fcc902fe640f30cc6edb3cdf76cbdcf4fe53d3e2e84ac9c9960b2b1c6cd1ed7e24b7a70652e78111fab5e421deb28ad9e661d7f4156e0ba79cb5242411fbf3ee2ffdc3ff1bda9fb9ff3f1f2b6e1cfc919e680a3219821dbefc3ec0ff212464d9ccd97f45f092d4dacc67c3675e540e231d171deb1a7ccd4d51832cba8eaabffd6becd3ca463df67cf5a982fd89f74f215e71403f33386f7ad90f48818e27b6a3d19ef492fe6985f96b5e35f8bf9bf4287c6fbaa5e316aea26d5eab997f31045275fa0cc5f8c7b9bf494f6466f1d40fba62ef7cc1fa8c1efecfbc17af875d1794d66198e782bf2257f3e1d1b9ee787f6749640769638d38097373f76d826fbf1e73eefe0d125f97d4adf3fc480ab6b385867557821ffe3670cf16191ae51be2cd1b9496658889e6730d23223d48a863d5c9c3db000179bfa2c71242d98032e979bf1663821798a23f1c5d326fe0ff8d0efd20e384cdec393ae7fbe9e365d2d2c40672658b6fcaf53ce5811993c8a6a02430fc766940996190cefd359318ae6a21d3d36f2bbe7e9a88b0de73c3be17ed5ebe8c4e251ab46e599918a6cdfa3ec70b2b51922d3f843d9ad76912cdae9acb09379877607eb31a09129067e330eb6bf6626a7d4cddf8ea37ad7f5604f9db1ae859ef20bd5b3430761bb6b60ef9ba907f18c39ab1b45f31f0265e8b3c8d4974933deea891d9afb7f369ffaaa7ce493fce24fb55f5dd934ec76d7385bfbb3b296ba3340a38e5af75d36dc92ac0b34cad4e5db67913fd8d2647be6ffcabadeb7e619f0ebcfc74fc3360655bdbbbaff7d6d4cf62fe97993bf952d9ff4d3164f75c26ae6b01527d8ace0c1462d11e7fd36bbf49f51593b7fdaec72f2cc396e50a6ee51cf7ee30cf8f5a7ebd3a32f8bb90d401d7d9e2969a1a16b69330e6ff2a2e7732c3ba2470d9dc479d9013fa3d6cf8fe3fb394bf4f24ce6a41f3c1e36cf825f5f1367e78d5861f72b7141a33e4366332ec5051d1e1d8cc64c6b57173a9f5fafdb277df9ac7e973616a26d392bd1db0328edef88eda59e3630a52bc3ae4dfcff798e50456638a1e174d9ec25b5f1afe7992ed63d5ec6baffe7ba7d46eb4b2fad2d1adec38556dfeabc7e735697fa4c7de92ca66185c2027c61e92ad7cdedbab542239c601f5ccea75535b84eac7135bee3b52ff8cbf2b3f7eb089fc9e95303cc10ecadbffe0686bb57e7030564470d3f3ba3a14f27cdd9e9335f55d790a6755cf069ac6dc50d1ffab54f63f2d9198f31a83ca6dc637e2fb672fba68ceb99be96bd5b80db39fad22dfbfa946f907a70e643d6f51bdf25afafacf37c81fff9409ee1de33422d7d07a78f7874863dfd77256adbec3b6329b34ddc8f57bf87ed9fad033574ba9a5b38f12056c6dcb8aefb36fa505f4e93c96a8929e17c17e765e7b580c67d01ea192934d691aa3fe94151881c8002d2b37cd9e5d678f97575d2f7ea5defcc77d4349cfb28eeb9b4193571c2d70f625314ca5315d9a416d0ac4b2cfde76871de0f1dff9b679f1c6c463bd80cc90b3f96d1059fba6cd63ec717f4ffa3dc3fbcba5e5a63c6bfa6b79099fd07dbbba59b385fcf1b393da91f3568cb1b7227fc6bd7cae4733b3ce56d1fd027ffe757678d8e78efffdefd9ec79efa6bc76ff5cb32a87859bc3ff3f421aefbf17b38f6199cfe6d1db9140ffd82ff7fcfd75577e446513dcb3a2b84c42e044f9e2a09e10d63e058b3d44fc06fabfea8274fcbd8dec471922f9472a967f42444d98550f7de48cfcf00684bd6955464334a61e942b5de646b8aa318b2e56b03ecd3f52a708d55b5e6e77a93f51cf4b9dee8b3a49a37ac7b811b28f11847a863dffc8837fdf5d339e08bb98ef5deb87df2e3bc33830597120a9e8142db11e9f5c68f2b7e54e5a399055407101d59c68f5ab3765af6bb5fa7b3dc095150f69ccb58cfd255baba3bc358e0874b6617f17a7a397b07439e92a70839a27070709ec7cec80c679d03bc5fbbd3b658a72ce06c4dd0d75769fa0d2e77443730987d8ef1db39ce3d05fe339905c7b88e22186a41cf5c496d0b2719bc5c8c8f2af9a977b369933eb52fee3ff537c5f6fdcc33b976666a8c9510dba1163eafe4cd9a1212734a9dcf33fd5abfb09a01a77d28f11bab389f47325eaebddbd99c2b2279d659cfa75f4e5ea74ed6981538e5d6dd39a3eb6a0abf38b755d7e4ceea8b7a55d768d616c56be7a6caef3eaee46f80e29ee58920bc061345d5d4c9ab2f80e5eb5e5357c274a599931744f5ce7df5c4c9dd1e7a7b4eacd2ed46effee3392ff15c1f2fd02cbcd2ca4ca5b8893ae9a1f78a78fe9375c4f7ebbd977398869e5f9fc7b4fbb11d9e7f5c7f79cf9f5eeb1b72d8a8934266d7a839b5e71faff4abf90777abafa129b51a31169482064dfbe417684aad972f893fbc86fcbdab7beed319327f694ee2c797e41be5ddb7fe5a78e7b3eeb93eea31117fd1c5a97a8ec592f8dc665ebb1856f1d9894d328f76c4840282496ae9099aebcace000a7a148333ff73f5bdff365eb196a46d2ff8b2dc913c64474ed243ebc7f67b2edb162642568d4d7dc65aba82ba3eafd2991832fcc17c69e1a9f7e53519e22b3368b32ace9d0e73dd491cc98d97925798c020f3ef38feba223eac7b95ad5eb5c568dca3e8e0d7a4f63107330ee3e6acd897b51d9c8f85766600933275b9bdefaad9076ec5f5e51dd4737b6fce6d6f21bb8c67d3bae71af4cea51bba4ad921f29dd68c5c959f6d4ef742893d1c6ad94c284cb7116954473e3d33c2976b5a06639cd51b49bcd51bf35c8d210ddbf470cc8d2ee837d1fd662c6487e4cedbadb9a2314d1b73e59ec73dd7d7f55b3c71180fc1f35882c4f22f046b042c2fd78866b9c568dbb3df18b944b7af1ef5ee7398d08a814fba7baa4d26304cb3f23ee7653bee3fd7fe7d1b17afa911103be8c6b00d7ce0294bd20a87412d8c6860db39ce36e3e9dfee37b7ea1fc41e317fd7d3b35cb2878efd8977e7f72c2ecf59f7fdcecb05fe7d3c8722f7cd8076fdc1fd39af39a8eab3a2bc5fcce5b258cd8d1402a1dbd467d47a25e01cb4ba275fe1cf2946edf32bbd32bbe4df6b1e34fa5c01dedb96b44096d056968e798beb4c675ef93b5093f4685357d5ea5bf72c3e3b13f3f19d8f46bc7caa951c31b2fdfd26ce935a748bb6fb39d353fbfcca3b70d7e40838deb9388b4930faebe7ffaf92a3429917e61d6c560dbeba3e76a57e34ef715fee6d473816f1c8dd02d8c3bfaab6af37d6bafd95b99e2feaef77cf889a336126a01ab98a96fd02df117c3f57b9eafe4fe5f32ede1bac638b5fa00febfcbbb674dd1d0e2fb780822ed473313e2606f3fa0b775ebfa01f1d2a89239577512fd2a7ab5ee7f7bdfeabe7bf4e78fa3ec66279fdbb7787afbbb313b4efe7fc68ce51f8cd5978ab559bd3b2f67d5f6dd779ed777b1158f7cbf9ff63ce72d5bdb40b774f8e3d8ccfe715fdf1627f2e296fcff2e88ae7cd3daebacf22b66387cfe866a91bc719d5f76ce9233d3de3db39ee672924bfc14813393d8aa8af9edddfdbf28797ea6617edaa3e477947543b5892869cf1f07f0d6e0689f5b68eb2d3af789e7eab7350ffb4ebfa7f7ec9f9bfdfafb7fefcbf000000ffff010000ffff7f72fea3aa5b0000`))) +var _ = pkger.Apply(mem.UnmarshalEmbed([]byte(`1f8b08000000000000ffecbdd972e248d72e7c2b3b38ddee2e0dc6651cb10f2c6c0964a36a83ade98b2f3a9412250129d05f8841bcd1f7fe470e120234624cd96f73e0b0c11a725cb986673deb3f8dd1f4e76cdeb8fb4f03fd3c8c7e35ee1adfbc993ffc36878b89351f4dfef8c9b5be3956687dfb35743c2bfce68ec26fde027c7366f664f8ebdb6c6e5b70320a1b578dae1fcc7e857f59a1d7b86b34ae1a8ae50f1b778dd4150f339bfcebd5fae50e43f2777f36a37ff5acd0f61a77d30584578d4168c161e3eea705e743faa93fb4e6b329b9569a8923389cc7579377271f1f8641f2f7eb701eee5d8dbedabba3377316e87dff69d00eb8a3d05b803fed999fd1d59e359a36eec25f8be1d57b474d9af566ced10ff8e6cefef4670e7e8e3afc351fe1f161ff64f9c63ffffc73d5f849bafd9f82eedc7dfb3168df3f7f1bcf67d36f73db1bfa16ba01ad0cf4db1986d608e2674cc984d26bae1af3d166d8b8bb665a37570d7fe60c1b771c7bfdfdfaf69a6d7ec7dffc1d8ef01d1cc3317f30ec1feccd2bcbdc35bfdf71dc9fade6758bbb69b59aff9761ef18a671d518cdff76d05892619d47f89d0fc365e3eee6fafb77eeaad19dce1a772da6c9ddb46eaf1a0a1c4d278d3b0ecfddb071c7dedcb6f8abc6dbc869dcb10cc35c35a4ed9ffadf7f0796c334ee98ab46df41cf64ae1a8354fb053899ef7c9cd99379e3eef6aa711f8e7cd492c1d06edcb1cdef2db6d5e4b8ebab863247dfdc5eb30cdbbc6eb1ff5c357a0797dedcde5c73f1a54997ffb96ab4339f9a5ccab37cabc5f337e852fdefbf17d3c57ce834eefe87b962ae98ffc553eb0d7f9d7ad316ae79ba9d7db4f4b3b6724613dcd937309aa61f4237fbd1cda522e27f8a9afabf89f0202b695776ccd1a7ffe30c83e1d4194eede8eefffc5a4cf13a4d0995ff69041377e8fce9ced0d33285cbff34e2fbfef7df2c63ae1a01eecb7f1a7f4ddc8a4b2843e0fc73d5402d89472ab07e0da7e1f6a9db7bf12b6b0933f2bfbf6d2bb4e0ccfd9b7cf9e718af862231977f5b22f9b8db9b562cfaaef99b3d99c7b6fe60b93f58f695bdb9e36fef9afc9fdf5b2daec5b1d707228f9e72f932efbad9baddca3c3696793ccf31d7c7c83cd2f23ca19725f5b826737b9348bd1b8667be7fbf6df11952ef86f97efb9de7e34be34e3355a41e8ba4def5ed874abd8ce597abbc24ffbfa82e5f50ac146cfd44e034daa37b7718dd8fe48e32b6243534065df7c7e87e6475fa8cfd305b3e73c10670d7a1cd29335363bd67bf1599516b62fba2efb4999512b53606e741a03d8ebba3d553b77def76dbdd89a5bd8cba0f33b7eb7b8cd3b9bf798e5a639b97c7cf7e33b0f99785c9b5b867aeb979e6d0fde2fc79f3b8e8b5d9f8590b6baa2cc1a83b47edebb6ef47b2a42c81c64230a5cf9db45e5f18b1d77d549660da8f00b7725f389131b4f5d28c0409f07268e82f37ddc7e0f595b976df68fbb76d9499a12ec0eee8fea6db9697861f40837f193ddfcf5cfc7fbf0f4d1f2e2cbd1f00aeb9c1d7d1ffa1f1b22531323406b785b6d1ed76e66e77da0f1c691d3ff7c5d0650f682a63eaddedb3c9fb27a6ae8c6d1fae1c09a2bee2717fc3cf65a123a9911d092bdb6f7196d6875de9d1059a3ab6247161e94ad895cca53d12184b7a73cd0e5c181a1b1891e0d9bc12985c3334b526d3955a7eb7637aa0a3c2a74e2fe84a70819e6370ad85d39197a07dbdd7a6d4bc8d7a4b53527d4b6b06b87dd3de32eef35e3f8ac7915c83fab1327599b13475672c9371f3e1e4e07b3ad68e041920bdd1798713d4374b3383c331256bc594d48dc1cb81dd4173774dee83eac2d245d61c088129a90b4782bea5a91119a3fecc1c0863c0351943830b4b6b4ebb526b64f9ead869276b30afcf1ba72307c0b747dd0eb37fedc8e0d69ecdf776d709fe11bea3e7587a7f6ed23df742afaddca7095c98121c1b688dfab6eb481eec76fa4d5b7a7301df75c9bb95c0f4e935dcb50b38835c27e17de3a1f945f7024efeff4c4d61b6fb23f533c5cf24ef9c2a8cedc3851975dd9f83fd6bd19a1620f0fb9b67adb5a8369f7d684beac2ecf45cd4afea7d171780efcf4cbdebdaa93d83d6b8e3b77ee139ecf467968e9edb84efecd7dcd06408da789e76ff87d6eea81f999a91bb6f80248e4c6d95b93e76fbd63cdc1b74cc0cadd97ce58c8c7574ef76c5f9e177ed58aecbd0a4b2a51bb526a66606c0878ca5b51676d4626d4e9ca2f577d867fc93f11d59b7a9f5efd953d91b0eb2f609e9a3a5f721d0b3f640fa99dd89edab3e796677fcccedcadf675edd189a03bb23a195b146a8cc660330818ca9b1641c1f50bf04277b5fb61636df8fd07e773ab9fbd30353f8171dbf83b1d0a2bcf129e90b87f61e5a6f6280cfb3c3f6e19fbc39753a7015cb0c439723439f64ed1b3a26a9f1c8b9a6c23a41b211c939242f9853cd81c9ab8129890b837b3bf3f83b2c3a538104175f62ed576b2f9253a1a535654752433bc26316753b8cab0f32e66b4af4823c7953b21e38435bb3d96d9137a6b6c63a40f69c96ed730502099fbb9972d8d29abf68df0ee5b02f2e866f2d3f7bad0b2073fd5792df7061659e0b9f6d9dac03e0cf73e5097a0fd0e062907a576f24b4ba2283f6e8de1a91235317594b97a17970ee09a0db9603f4bdbe3b262343eb4f687b3c200a11e005684ffb8149df67fae2dce6de76c7d25f7b86afce77e7ed503f7adb39e7e37b76df9fad2b3cba36ba9e5367805b4f90ce60faad88e8d4706373e8dc17e89a5eb99676ed9a12dca07b86837a3a727cd617e8c839faa29c9cc5e9b13ed097a0e0d9be189a7a1fda2361df86d89d77bf0f6d4e892c5dc0fb96be5f067e3f30389131f59e6b68cd495752af515f2dadb9a1baf0cad1e515e015d895c485d91658346748773406c22adfa6291e1b47573c937bbbd80f35ec079b5743a089d1709023f37275d8dafb79e3686c68e872b33b129cbd7b3d53ea9379f4c5f95b475eda921a39128444160bbea1ad37e6ee3b7775ac76c9ba9eecea44556ce59781e0633b5f5b617bc7d29ac96753f756b6afa2bdbd042361698e048fd83cc93bf03d8ea46e0ee668d40fe81855d08576e54f5a37cbb1a946f6c1f8edcc05967ba68eeeabb29e77fb94d99f8a63f824a9d7a6a6b08e248e80f41660b9d09121b22163dbd120eb3cafff54b7a8632f221b74956b1fe7ec93fd678d6c5f5d3b1a8c4ced50efd022bca7d1de9c9f6a6d13dd5545fa082c3bb7fa3bd7563caf503bb837d7e6fb1ed2e7b03fa7d39f19fa0bfe9fe3c30996df03213235ea1bf3d1b578bdfb646d7bb0db5151dbc9faefa4cf8e7ae79a59d08713ad7924e337fbe75f551d8d8e57e6da384a27c9d48f0fe756f5c5b9a3bdb97bb2aefe393c10d0f9165abab2b134796e0e627d84cce5deb98b655732a69d7dfbafe41c266d3e4647c9d6ed0ffd9eafe43ab2a62bf93d919ce1f0b98a743124ab67808363732078406be1ef40a70f6dbf89d63887e6ae96ef9253e759ebf2446b7706781b9dd38b82733a3d3e0f862e4f2cade9010932d97641f638a99c07c148d824e3ebdb73a4c76ee51ff691bb36af8eadb6e0d991b0043ef10702ad1599d9efaaeecfd4d68ca9cb0b43ef078e9fa18b7dacbf6a6c49adc020fbfcd3fb4ccada5ad31e3b5207f39696a694cab197e4ba6ae71395216ebcafb05c93c41070cd69b7a340c75723a453d075b8dcfa37779f2f4b546fcff6935119b0b766abe81753c1b3a7a572eac5d0e583fd9e6f438a68bc695f91fda82c818ef697ba70da691d93c4a3b08c46f7d4d32f57596d3a919c0a0e75ffcc7191776c9c2c1d2ffb4c53810fd7685d607f153a637d88ec543436385685634f9288fa8b647a8ebd77d86774b662bb2acbf7e8373da0e5fa1077d6f92bd27f6ac8db41dc8f294cc55804d69e0a583f23f6335c3892ba30257592d2b7707f5367f41ceb5fd4ee886317f15c3eefdbee35e53298568b31e1feebcaca38dceb45f32a742534c6eac696447426af1d4d9c5b9ad98ce32ce64058181a0bdfdb8f7f59bc2cdd9fda3a6f620766f90d0a65c1c7fa4bf1bb33fdb7f8e7f3f84b79640bdc1f793e1fcce5a9ec97c3b94467c8b963543c3d3f3fbf9e45cfcbd3c4a4b0af3f5ffe7c503caad86fff89c61ac75f8e1cebda3e1b40ceead3c418a6e8ba723df88deec38a362bf1d1486a0434c8d891103ada9ab17401d9efd85e3779d9b3256ff3dc16e696ae3076b472897f4ddd74259531a29a189cecf655b1dd4353ef7ba6243246798c8135fc35f64d105d97858e244e0cbdef55d295211a6b3330711fe1c2f45b11d0e2678923c0ab4c1267d0e4b9a529b1dfca03fe8b6be8a667696bcff0e1dcd2fbcd7c1f7b7f69f0c43776a07714ebd8e9b1c8b72dfc1c1ffef470cda5ffbf3f9ef563a0b12e9e15b7257363735e861fbfea59a32239b7b190be9aa94f233de825045a6b82e32419fbb3a25c3b7c4e86cc45b622f1d31fa907a5eecf38979736a778a0cd72a62e6fac025c5289eccb784ed6d8a5d6a40627e7d6bd4ca93546efcd95d179cfdd59f76264fb623353b725631aa43006d9d79ca2ad35cfee8bce7b769df782c7f8303cc6c15847805b9f7f5dfbadf997c048f1f232c7163e66acb14d918935f858ff367eeff04b8c37b20ffbcd93c96e5fddd8526b61737004a4b790fa5af3d77b153d8dcc656869cd9703fcc8c363d6b5253ef6c3f1276b613dcf5d0bb97661dd7ec43fa5fb00dabcb004532530fc357cd6cbe7297f0dc80b9089e32be8c31e06253b9681f45819024d8cf26dedf27e26f71f615bc6fa7915dd37033b09eda99211db44f7d37c167d7b4d57dc5befbe3831691cc1d0d6876b53323dd051e09efd363234e5d7b3c67a4ea70fed51199e46f60c6eee22bb0be3e52ac6380cae35c7f84b29c1cd8c2d9de20aa6142f8663b52dd6f6511b6568fa6a646acdb1a9f716f5e23bb88d615e1b4f14f348b7ffdc38efc091a8ddfb05f47183830cf57b9f4c67317565e9e8f238cb4efe58ff656a8d7e81b147e71fe0d5e877c78b63ddba58b610bdb622462f323513dabeba30b837d7916e5d6320cc01b6a585a53d42ff67978ef4e6a6c7a01ee616b7f943fc38d6565f2b8b99ce900e664ffb70d879417df14d5d86c0af1b67c3631b8fd304700a0b34125fb6473b9f7ddb17a7e4effb99a1298ca389f3e7b6b0001c1ba039c731ea8e10012e8006df87663bd33f9c1367cd6ab3b9b47dd6a358ce91a3cbc1b39e92ffd9f900915980efdbf1bdfaea3c963fd5637a741c3519da1189b992fee0b32b32b53595fdcaccd2efb7d839edc535a6131adbc363bee88a245fcce0c445579231f619fb2f49cc70998e639335e76c52b1e0fdb3ef701d16c7024353eb07c680ddeaf2a5d84f169a12f4680cf35d6306347562698fe9b1dbf6935377cffc77c63c4dddcbc7b6e6c4fc0f64e25486b6ae06b6af1ee2be45bc37d13eccd0cf3c22874fa39311ffb5aecc0ef4cc0cacc99eaffbcdd25868f37d0fe8f79564a98ad72ad26528ee00cda98664aa17d8d18e6ce00dbde7a6fdbc35fde33bfdaa126bd8bbc6a7f9d754fee236878e040fb1175381e8b37e1c3bb89e3d3d7457bd07e1b6377e59f53aabe8c7c3fdea67db5dffd05791b6b90f7fa8ccac27ce991f227bab6dba8c32f61c6d734f3f3f6e9457bba9abf348814cf0349884bd876ed81b4f829f6d77f6f4f0d8fcf920835e9b69ea03487eebf3e827bdeee94100bd01fa6eb526ef626f7b70be7a7ef59ca701bc7d6abbb3de2ba4df41e74925bf871bb9f534c0ed5af7366f3c6a4bef55b8edbd7683e781bbd2368ff859dae631d2e93d3f1f14d07b10ab3e9751c6e89ec775fc1efc0cf43ec8d27eac36bdf62450db2e1ea71e8bde77bf8edff7f43a9ba1ef15955e3f98dc3c89e87faa43c7357812d7f673dc8668f2ed490c6eb5681eeaa9f6fc80e9b6edfbf4e5b9a12bccb3c62e4d821f9a94c5dc5e2571e3b4851070042f64b6d199586f6ff42591c15851ffc525eb0ccb30dc96ae14b725de7bb5737a364e9b4db5af121e6d4fbeec9e9d266e2f8bfb7960d348c41e8afba68fdc596f7c8ff78282f6c243f71aed8fddb58cd6d8cbb5aeaf416ffcc2fd1059d07ba09f5f7bacb2818eb6e972fa60123c0d98556fc4443fcad71dba6ebbd61ec4789d917d2832c193be9a3dedeecd80ee9befbd2913af7db427afd19eea7556ebde6892da67a87db293ec3576beeaa9559ffbc2e17b5e1f0bf6586ff534806f4f649c36f87d0f62b2de7f8c3cf43d5bb04766bab85ad0eb7f3dbddeceb4e91a3c45ac936acf4dba6df27e1c20e52f2839231e53323c1567aa1273c5f1d1ed3ddb9869fa5cc0f1d323e2a5b96da980d11b015e191bda2acc8bf31dea3594dba393e767c99601afacf2f0f2b6728186dabf72b7efabb9df0fdb5b1f7feaf79746c41ee02d33f80f927861f7b128372dd7be4acfef6e6e5a47640d6d1dcbd4d110c9c7d1fe35b82f35fd3649df3e2676be5d5319718e4cbba94ff188e89954a70f03741600ce704da93576282e7e17979a6d6754c79deeced747e730edb6fdc0479cb4fb747899fb529d36d6930fe20d79f62de5a3e9769cc0915c64e312dc681beb81c826611d8ca3ed2fb3311f09be3ac6d3123b577222c0ababba7a2e6aff056b5d0b6b9d1b13db956b69bc70ad7c44bc1e6c5ef00ceecdb575d50312f4871aee03b149312eecbd7b5741ba61c5bec4d7569e9b24b72b858f267280e40de0e721b9b1c5589d348ff840b6000d2e32e259ebbd332634742f2356f6b277b6890be0b7b6bee262192100bfb9dcfac1abc521c81cc73c13c2cad06014cb0cc00bd44e2779be401217d83f339db8b6af86862effb26be2ea0cadb9007c9c3ff931e75a8c67ac20137e18877641e17a8b65487a9fd81d35b2a5d626b68b2c0deb7ed8f7e5e80a4cadb9d5568eaf68ce0af6372ed1598a7e53d9f15e1fd745267e669958c209b38b118dafad2f13131d2dd60552b2cfc21c1f0a63ea7260f3fde0101f5bb74fbf37ce7c620c338de597f3a4389d89fb24b522931317961ec43e47b4a7d13edf00ee3aa89cf7b68bcd70b1ceabf79bcf6d015a3ae560e3e0c2e4d5b9a177dd27ec372f79779c3f27913c56c77f739f2496059d7e602339d041e38174bdde413b0b6d93049772d1e9aaef9164accf9d6342de9b89dbc53f9f09ef54d6d67afc5b9847f5483e415ece9bc7421de483e7b21057fa897258a8cd77221ec1b4de78767cc99e1efef9c7dedbb5052e395b9f3c672b0ba749edab23734f52f79f0ab342f22327a15521064bf0b5c2208549a996eb95c273d811e5d2417a8644d605b2a92cedda059aca181a92078ff57caa546f21f910f57dec689c6c6e3fb7254b378cafabca7940ae7f6e0b3cd2f5e23c68837fd9f26d656236cab8a4b3db712a2e21aa6786853677d95a8dfbae517e81acfdc0794b7bfaf2bef7ec3d233387c9b7dff50ea43314f623e9ebf97396d2effe1258bd2aedad7b86f1f2d4d09ac1d02767e3ef9807b246bec61c94b6b5e6f8237b9cf0059e3de7039d799189fdcb9f7fdc9371cacfbfaa6907a9a1a1c1f9b3264e4cc23578f61c2753630907e1e7d7e520d0c400e4e719d6e480ee4320a92b4b6a2dcc01bb70347684cecd73e73c91f77f091fc08cd412388dcc5155b977eeb5eee8f2fc2bc899c276d61ce74b5ef0d9f38277ecfc738ff95e2ceff38f7d453fce2537fb94637edadc6ca443d87e987b76969c81a9fb33b0eec761d391cd58e60ff9cbf61d0ff8f026db86cf89476ad7eebebd42e2396b6872e2bc4b621fcc70703f43eb1af393529be969b0721d0e32563bc63928cc01474c2d2c1af6a37f4cbc3e6d331fc57f82dac62e482c3f4bff526680979977bd83df7bc6c5b6bcd89617db92ced1c5b6acb1562eb66522732fb6e5316bfd625b5e6ccb8b6df9c9c6fe625b5e6ccb22dbb22c8fdadfb1614e523b67377e562d5e6d682b775094ff92936f7290ef44ea267b09be70743f4bd5caf0c048f8eb6da2c8fdf6c4757405737d1b035c672d30b9a647725348adec43bc6db59877598cff3d75a32a7307c0ba9c0105dce99cb187575cb95b5d7ee5521d7887f79e70af0af83c7f2f67fc01ee237befbf33f7eae5549c0138965f01abb2ef9b39e9fac778dcbde79f7abd6fede8cb5aff97aef5a8129f104c718b48b5b8855680c3b537229c2f8871e7ea35ce9dc7fc37cad2ee4ce2ba753bfc1804cbd45ac5675757f23c9b73495dd08e096d3fcd17502ba730baf0117d6a3ea27f0bcfceccd095d9d971e01cde475fc1df85c7e75cb50ce27d7ba23c20aabbc67a7945cce723891154e25399aa73d0be9f01499d1ada2a20f57f680d60eddab5b4e6c4d2cdc0eca81ea859df6a0f9b7904b742da2629e196d98f539d700c0e6260b5e356711f8ec0fb16e04e0fe4d75e9ca9e2d93a061c1be21a48f81d2b97be937ec6f2df33787909a630ac87752e6c4f955a16a9b846495dbb6d4ca1223f81b0c4bc436d2179474d4e8154dbceaff796e8b3591c79f9fdaca99bda526be348622ade72f67c9889d9e986e82cfd123eff6aedad19f35202a73339325e4defcdac438e39dc8e8d513368ede5e4acd1fdc68e01d7cf5dd765711e80dea1ad42836b4d72f4be31e0d585d3919b47be2375ffc9301a78ef3d6b48c77e2be55148e48a44aeaf28c737e8fc0054c78cf73c28daf715e45bdce62364f718d7f42993db5c465ddc6c99fd40739119c03b1487e240c03991a10b3364c381b610999a837d1cd8be93908dbe26be8ebcf3a1a4063ce9c311e776d63ecaa89fec607eb84afda7d7ae626e53ccb38beb19e2fac2ad29e0d5cd19c66493d9e66ab55a0b6440963e4bce99eea3b2340fecb19cfcadf81eb43ec4407ec3f8a33ea4fe308c13207c2bdbb3ab9e6f373efb32db54695f64cba7acbdd162c1b41f55dd1fc9734fd45723effd95747782c928eb639fe2262ae9e9d4e776e4ba8d710fefe774cc6ef3cad0fbb866369d8fe1f328bc7f1eedc787e404ab50ec2b4be32a2ace7f82b36bb24093a13dc25c708ca9ada12d79cb43395eb6d6b3eed959e339bc04f2eae05c4cff7f0f0f90a137e6d4e86d4e88af4eddec712df9dd0ec555247d7f2f6f54fc9c5c1f5c6e2d8cbdb1884c5d642d5dcea8e326806e5ba69899eea97cb1acedafcace1df56d526dcfa9aadca3f2843735ccffc1509b5006535ca71f3a6d6185f623f5c5d5d993b8adefe61d9eaa91b5af0be23dd22b1b87c7bd3e57b41d895ddbedf4e1b0d367313fd59e3d56679fe17b8bfcc8b9e769da87587296e672ee17f0f9c7351d068267f3cad2e0208d13117e2e5a231b5d87391753fc8b3573a2737da1173e97421995b1c6933e97d980f4de0bd629e39ab3639da2dfc26dc1cbc59c119f08cb67fb27c5da8c0c5d81caf8d87aa7b267736f9c92b94e7f378e07e3d94f82dfb124716395f21a933850f533253e2ffa5eaaf694d7959468a80bccd676edb9a604a726e6757720f0d5c8d0fbd06c0bb80e2cce35d99e69694c0389f748e2dce45a91a5f767a0269e81f6fb43e2ba86b69e021eed092fac169324f1eaddfb2a9f4b8a89facfd11a289c17189c9b1a23b8e94a4887835c66fdb353720a9eacde471e1fa1ec01c959da681f49cce9700ddcba826e856b6756d11d1fe95e473a80d7ede05a9624e6eebfb9842bd6c11c33340e1fd789ac874bc06dbee851d5d76eaaedf5e575b21632ce828d25b522a79d15c3acfcfcbd675cf4c0ff623df08279afb5762f98f70be6fdbdbaf261ddb2589e9f06c39357a7b7dc5f93e6e2a55cbfefa9c5b831755227631fcf624769cede26f6ad1afa8b6b492267123fd00a7d6f69720070beb7e003be8b73bd493e77a2cf6c3179da8b4b6a8a27b5f9d0b3181073964b62846ba1109e3938ec1ce133ca1cd78fe199237a181b989db3f3ada6f802bf809d9ee6683c518df6c258c207e7951672c87ea6712fd6976a624bd2e76a3ee7fd47e5b257e28efd44635f516faa3907e89ccd3f173f68ecbf8c3fb0445faa99c3fe7b6b076c65667f732adf5dda875410ff7aa33a47c5b817bd97c4032716d20b24b1d995c485d91616866e0626770446968fdb541f6763f8e2c67c3598522c45725d053edc7a38a9c497fc217172df0c80a416fa0f76fd85e8fa37f7350b734dde995d538f627d633f8be943a4bb8d4ccd5cdafe9b6be92faec3899b2e6a0bd7227595f59e9b8c2bcecb9161575243c35727a6a44eba125cecf96993dacb5652bf8d60ad1dc9f370be8eb69ed39acc1b9b8353e0efd408f32d6d0dbb1d67666ad7f47ed25ff43c535231d6c76cd789fd5ff24d880cac9c6f426b357d382e2279cf49ec305f09b63a453926b1164fd640185b7a12cf4036ce3676aef7e65d490d687d2538c435909b714dfc8062283cd0be9f19d3099a470f4c7b34ffb089f14486b6720d5e5eda7c2f4ce7773dd58c6b18f9fd3a91acdacff3ce5bf745f52f0bd63d5417962eb2e6603fd7f5a435d50eeb2d225b955399b3f3acd0f77e057dacb4aded7a7c2b99fa4b657d2cd627cee72b4f615fa81e7756bd7d02b85ea1cdfd89f2f14adb7af10f9c7e7fbec73ff03b31085bb952f9cc76b7f754a97d212e52f8689a172e43741e98ba89cf698a4f08f26a5b96d8369eed3bf0102b500ddf9769971eda7183ad1fbc529f53b1f0956b70ad10e7734b62341c085887d9f5d1a27dcfd4f6cfc66d3f06236fe87d9cd3503eef226368ebe521663b2fcf7d5b8b0ee73c7206892977e425e8f46ae6762a9e238973c01de0532ffa54813e95aa9d73e439cc42471227688d649ff1a446f4d939207979e9e85fa236dad4f65bece9fcc571adeef5b9cf5fbc3e6dbff525f808133973b271973d839b87401319cc8d725c0c756468caaf678df51c649b8e8eb2d503f35026eceef3d3e0b192755b8c494c6ac7bb7dba272bdaf1f4f9f8cc4fd6961d519e1fce70c91e173658464adb755f33b732eec7c770c7147007a5cfce429ea9827152b56660eb2aec4a3be70e1e1fe29323b5c3d0da07beede6c45d0ffb5cec771a0349dce4caf45d7de8815e5bb94fdbdca26dade5d89766a3b540fc9129aea02f8b495b19baeca1bdf93b787af1bbbf42ce3e2f78b62f8617fed82f8ba5c3988df3d7b81323e76b8cb5674f4fe68321e7d9b9b1311cd1f3bf82ee57661bd41cef946e72668c68b90efb79d63897e881478e7b6d3df8b4d8413fd5fe62ffcfc3d60eaae2ff797491eee1680ae3e0be080188639e54b7a13a8c6bfb6a9cdbcb101fc0a36b73ead8d1e5c0e94cb05e6c77e4c0f1c5f170b0d5999f47826868caacdb51a0c1ab11e6d1a0bc80966e7a063fd9fa5d284fa315c7741f13bf4a1cd7456b10b573341c085e57ea0736df0f80af305b1d7ce55a5a73e348e202c799ebf9719271bef871aafb710c6eed15703fedf9e9c8b527e166e5bb2e79b7826c9771ecf7fd60fb23dd9f43795b1a1fa3f39cc9a7254686c64264c3ff0e7dc5d098afe0b32ab31d6a62be8aede80fc6f416eab99f69cc0be35bedbaf5915238c9e9d939e32ae58a7ca2b1af8683ad3907bf25cfbc2467e4138d7931feb5e658135ce7efc817f81238006c9f9f4cb66c6378675edbe536c6271af3f27849f1b81fc5319fefdb3c1e23901aeb7cdf1ad69bb631da031baad4d64d62cbd816ec7698ffd7b86a04d6afe1346cdcfda7f1d7c46ddc351a570dc5f287e8af7ffeb96ab8a3d05b803fed99ffcd99d993e1af6fb3b96dc1c928bcfbf663d0be7ffe369ecfa6dfe6b637f42df2bfbfed991fcca6c369f837f9fa4f74097ac368fa73867e3bc3d01ac139fa734ade5574e355633eda0c1b77d73cc734af1afeccc11f6ef09f7f8723fc008e615b7fb0dc1f2cfbcadedcf1b7774dfecf5b86e15a1cdbfcbf0c7bc7308dabc668feb733fad5b8fb69c1f9f0aa318f70131e86cbc6ddcdf5f7efdc55a33b9d35ee5acc75b375dbba6a2870349d34eed8ab460fbf94e739e6faaaf136721a772cc330570d69fba7fef7df81e5308d3be6aad177d03399abc620dd72014e684f98d60dfa38b327f3c6ddeded55e33e1cf9a82d83a1ddb8639bdf5b5c93b9bdb9be6a2873f4cd0dff9df9fefd9abdf9e7aad1dbbbf486f97efb9de7e34be34e33ff5c35dafb4f655b4d8ee3e24b79966db578fefaf61fdcfac574311f3a8dbbff61ae982be67fff41d3ef0d7fe12142a3d6f8e6cdfce1b7395c4cacf968f2c74faef5cdb142ebdbafa1e359e13777147ef316607f9d1c2e93c655a3eb07b35fe15f56e8ed2cb9e4ff0f339bfce3d5fae50e43f2777f36a37ff5acd0f61a77d30584578d4168c16132a9f8537f68e12587ae9566e2080ee7f1d5e4cdc9c7876190fcfd3a9c877b57a3aff6eee8cd9c057adf7f1ab4f9f95b04b774346ddc85bf16c3ab778d22ee486fe61c3f0deeec4f7fe6e0e7a8c35ff3111e1ff64f96c7fb3cc07d8985406197e85cd5dcfeff5c35502b1b770d24b4887027055a0c7a68589d3e633fcc96cf5c8089d66d4e99991aeb3d63e2f4d6c4f645df69332b256a6d0cce83407b1c6f8de01458d8f718a7737ff31cb5c6362f8f9ffd6660f32f0b936b71cf84c47c6370e2fc79f3b8e8b5d9f8590b0b93d3274e84918c0c6f0282a4467cebf585117bdd4718dad21a52901125685796401796c0c74525244ae876d37d0c5e5f996bf78df665dbde12678cbf7b30a70f4a5ce4370f7472e84c7b7134799e0af485a6def74871974a20a317db6f71968649b8f71d6b9ee1b758a74d01561d1529e48903c3d09a93ae24728606e7c636d9362fd0982aca51b3604f6a2c3e88dcf1c38297786e74b4368e246fe205d6f0d781cd79d8899b450060e80af3acb14b9338d2729d7765c6c4e173328973a03d5512c757fdfea4eecf2c0aad8c0d6d153abe1ad95c12f0aeedc0ca7a4ec6d8a5d6e46f4896e6fa4b236283ec79c53f9f283851dad68b43ebf406d0491d5a1767ca199d297e6b7efe758d09babec25853d2af133aae7e075085929c7c81f18e89d94e96809e41665224c72be8695446697071e848b95f675d5b16a43e187fb216e6e0316f2de483c56af62369632921d096ac666e0ed8f2792a5803c06f3145eba4bc2063a6d3ecf7131f4d3313ee7374dfc30460539737198930a4e829a778a0cda6ae394d2290e18b632b624342b2df2db3e1da86a6fcea4a09a8f91dc921704b8442880ed2c4d829a225b52e08781f78fd3184a3e9f69f199cbf4d8afe0afa783ac1eb543a4b4c7c70f6c4c4d41afd0263bf43007f9ac0c471802baa5b17cb961ed16b2b02add205593149c6a30ba416b2a50978ca5743c0f761014143097829b390ee89804b5ea2af95017c2ca483e93263ea1eb34304578384e46520109b818e532aa91a8f55fab339953d93237f3f49e2d8c1052a572ef05b48ef8a0916501f31f8c7d45e821a00a0ac3667149d60d3447bd9e01e5f9d57027f411982ec04d3a2332b2e60313263429554016bf4ee58f65b125ce1a2bcbc19107216b949c16178cc9f47c29b8509a1150f8c849139c0c5c302e0f70383139938018600acf09a9bda91b0727479057805beb7a82025300953ba7c599287420857681198f78c99b443c4b2d7cf10ee9ef9ef259350af9d7c12e55391a7907d78a89fcd881c3e8d4e46fdd71b4bdad73333082df77cddaa0443535718436357956429c46b75820b0c123d8cb13416adf71901896e6503262aeaa4fdbcf5fce3bbfdaa424ab5d77e4c8a2932743de0363fa37e1f16413d281af5d476a3dec3fdeae74397e93d08b7bdb1bbea7556b3de2bbcedc1f9eaf9153a4f0f02501e3ce7a7388f9407e35a57e72bfa79dddbbcf13f5416f4c6a6f3349804cfaff7d1f36bb7f9a4af664f6d77fd435f45dae63efca13201f9cd7eef4d1972ddc05d699b47f4dd6d4f25effaf920835e9bb9d60793e067db9d3d3d3c36e9774d7d00c96f7d1efd1c4c42d4aede6b8f55369ef3f3e171f5f3e1317a1a30b39e385fe367a1f64196deb3da689bfb75d5e72a0f06ba67dd8bdf3340ff5f83deabecd07edcf636f7c193fa3223e3a4a0f7ad7a2a7ddf6072f324a2ef5527eeff8f9187fec7eab4af4f03cfd6db4d7afd3cf82bf2ac9fe2fcd773fc0cd49ed720ddb67d9ffe0848e2c669b321e04862ddfefe3c04fdae3d9b7f7181d69a60e02f267fafb93726b8d820891f75f03a2344afb82d42dc9678efd50447e3f685a9f6bdbf60938fdb1be27e1e149713883de4c7fbfe7af6f4d05d91bdf082f642f403ed8fddb58cd618f343646fb54d9751c61e9a63faf971a3bcda4d5d9d470a6482a7c124ec3d74c3deb87cdda1ebb66b6db54ed6195e5f9ef33480b74f6d77776fd2b534dcc8ad78ede33d29b2b7bd57e1b6f7da0dd2fb4cdb3c467ab2d714d07b10ab3e9751c6e89ec775d11eebb52781da76f138f558f4befb75b2de5f6733f4bd52b0479ec4b5fd1cb7219a7c7b12835b2d9a877aaa3d3f60ba6dfbe0b3b4bfa0a418605a866fe34c556cf7379cb099dc9322b24b3d93c44febc74b73db52ad8839899deb3971be43bde6af3746115edb429e9f254706d058bbc4a2f6cfbb9de47d750b961fb4f708028f2dc94f4901b66dbc50282a1a916b5fa5e777af68c4dad1c4792c538de98416b4dfb906f7a5a6df26e9db67298cf8a6ab1e20e3161746fc65612c41cbef4afda5c1ab21257249279864db19d5132276934df26c9c53157ef14b9263e2769f866880c609cb745aaa27572766a7a48624e109fb0268d17da407229bc421458e12a2f43dccc736c1aa4d8ac33c133b97120ad4d5737162f08584a0fa9acf2fcab12bd77e181a0b6d5ef00e0b2e16cb33bc1e74656568684d8aaca1ad03730ab749508430f5bd7bf7bf9a4ce1b0683b1b0078b8667b7b3e43a089d719b13266bf98fb6e62460941d52e3978c538049ee3a5e38b7347c3445c813d8a65466b15dbe95d49bdb6a5b5077c9101bcdcec7612d2ad9a67fe6e72ccc7f812719f2ac984bae4c5890c49ef938ec0da53616973d42e9220d6fdb0efaba36ed224b9f6568ecfbb1d9c4041085ff8fe8cc814223bdeebe3bac8c44f2d13cb888dd37dd1e8b547c8c444478b758194ecf33cdb17c78ea44696ae309676b08febf6e93717d8a17bfe443a591ccb2f2e9c4e0bc1b4bda5ed3b1ef0e14d92204c8bd6d85c6bf15499f47e179bd1253a2f331cac5c53838c25a951b7a304c07758208951b7ed79e83c2b7e373d07b9f51ced3f4b3761b7ed858eb6662c5d989b836d319e837616db26d905032f3a5dd11ed9163e3a33191279ef9748462d6d6b4d0293a5eddb47923fb6a2bc79bc10015f0a057de6b1bf140aba140a2a2a14745c81c17481b8127f15c1d7ba6f694c4aa5d86b0acfa1f752858905ba2ee2622f5b62de9a3ed56d81bda388b2d1382907b92d19ba617c5d45dd2fbe7ee53a1c64ac764ca4a330a8bf719cb73e29784e3b4ea4a7c57ae6b356647397e674d03616141e9e2a33c0cbccfbdeb3f78ccc1c2679faae77609da1a81f495f7f4781c7edbbbf42de52b5f6d63cc35a91c9890b4b0fe8d9f83b72c7f01af91a7350ded6ba7a1c2d80a09c3de7039d79b6af625ff4e71ff7a450c4a9ec20a40f04a0cd7aa6d48f4c5dd99c3dc789534343835f8240ddd458cfd28e25733c247433b535b4256f09fcb7104c71e1badf40c086dfff257c0096d45a14e0c9ebc91ca80e5ecf7ed6aad197202e2d6ee7252ff803d6f685e8ee4274f7feb1ffb7e666aba1a1cbbf72cfceb23330757f06d6fd286c3ab219cbfc21afbc3c35b46630f4b36df8fc8261fbf60a8ee7cc4dcdf1405bc0b10fa733719fa4e6d2690bded68f3099773b4ee0486e8c73183b07e4cbb5fc26d88ffe31f1fab4cd7c54ec10b52d24f8a64c7ffdc6925a91d37ed73bf69e71b12d2fb6e5c5b6a47374b12d6bac958b6db995b917dbf288b57eb12d2fb6e5c5b6fc6c637fb12d2fb665916d599647bd63c39ca4a8cf74377e56295eed8bf3ee6351fe4b4ebec961be938f8ba724f8c26bf7a9a3b006e7ba86dec3f951afacfc30787b09ba1d751317fc4176b0a5390b83e4a650fed79a457676e3861f12f7aec11df0569333408e7910f09810fc2e39bb718ed5cedccc5305c5e75d89eac0522bea4a2d82179530f7aa8bcff3c13ede9e8c65e5429145c5854e987b752ace0012cb2fc7aa1cf8664eb9feb56b17ec3fffd4eb7d6b475fd6fabf74addbd5f88406293eb1792d6e21a91580691fe7b18208f3b5c021ce9dc7fc3763c00b4d32678f7bfc1818cbb424cfc3d7ce0c5d99752573698f70de719a2fa05e4ea17fe123facc7c44ff169e1d4b12379674761c38d9475fc0df85c7e7483f407d994af7ed89f280a8ee9ae8e5d5309fc20f1223a8225b4d16482bf7495a439313e74f0381c417b02c151718fb2941ced2faaca1ed178d2c918f7bd8cc23b815766c92626e998338d509c760ffd9b5e356711f8ec0fb16e04e0fe5d75e8ca8dad96a70ad10205946720be7dd0e7927fd4c8a506a4a04b86613d4cbd12a6c4f055d68948e6b14cfff36a650919f6005788531b495bb7d47bdf33fd5b6f3ebbd25fa6c16475e7e3f6beaa6536169f37d2f1d6f39773e0c7aefb386ced22fe1f3afd4deba85b171a1e1e362c9f4de4c9c3b8379e78e8c513b92c8e4d533a1fb2d34b8d6e4d8e2b2b684df317fd694a5995364d6e05a2c98f6a3fdfcd9aaef48df7f2a8c06de7b2316e9d8b09c4721dea702bdbea28dc4c185c9ada98e19eff9ebf7c9b7a4cd47c86e0e96e7304f94a032a70c4772911da9c5531ccad4d45a53db1757960431cfacedab532c0f897d876d74e2ebc83b1f4ac680f4e198733b631f65e429e1f8c6816e94cd7d44ae9dc7dca638a709fb1fc4052edec7b5583bfaf831b1b3db5c459f2b940119fa2c3d678407c0f52be66f25f7a0be5a03f5de25ef22fe308c13205c2da9b3ab966f373efbc6596daab62fb2e553c6de583a5a93b1a755f747fcdc13f595cb7d7f95b9a6988cb23ec6b8892a322ef6b91db76e63dcc3fb391db3db6c4b22e3486a14cf873ebafef5d2bede8f0f8d12ac42b12eff96c255549dff1867b770347664ea5dcc05e748eadcd48519e00ee578c95acfbc27bdc6737809f20b95a6e46032ee197a4649a17c68ef712d992381e22a92bebf974f247e4eae0f2ebf1646bdc2b13166e654be584797e765e78eaacabd6af2541dbcb6893c713875d4ed288123119b70a035319fafa9bfb836e67427beb85a7c93b8adefe61d666d7fbf960ed92365e3d0dfeb7345db91dab502f6b93a9a38ef4afbf6581d398bee3db05babc8d89dda07c567693ee77e019f3fade9f0e61abab2019c12d03811e1e722f19215ba8e702e6ef9176be644e7fb422f7c2e45322a638d6ffb5c62abd17b2f58a7ac6bce8d75b27f0fb74554c219f189b07cf249b136862f6ecc5723b3e65585711b19ba0295f13eff7372deff4e1c0f96b327c1eff89e67736e999eda2571a0ca674a725e247c619ce11a03616c4f914cdddaae5da91f989cba71dac8a66d42db1719537b71016f427b24783b756452980612ef113c20394b1bcd99c4d43c8f49bf3f26ae2bce4dae15a1f313548b4992f19576eeab7c2ebd6a2a63492d5a03c599599a324b8d516047c2c4d4e5c0f1b3ea9f9d9453f054f53eb81c3ec291a1ada780970347f2c2d3e11a5af30aba15ae9d594577ecd3bd8e74006320905a9638e62ec32ee18a9d628e191a878feb44d6c325e0365ff4a8ea6b37ddf6daf23a590b596701e72dede94b660cb3f279b0f78c8b1ef8dfab075e30efb5c6fe8279bf60dedfab2b67d42da3f2fc34189edc3abda5fe9a3417af48b97edf518bd1e65486605af6f02cd3de0e672ff1ad8a4c57f23cc77fc37e205b6a2d6c0e8e2c6d8df3bd4dbf15e15c6f92cf9de833a91ab1936e07eb45496d3ef42c47ba8d39cb3d749d4379e64cdd3bc6679435ae1fc43387f5b0d0d2fa67e75b4df1057e013b3dcdd178221951184bf8e0bcd2620ed9cf34ee85fa524d6cc9ceb97afe5cf64adcb19f67ec2bea4d35e7009fb3e71efb2fe30f2cd1976a8ef56fae51bf959968be4f937b97f22115c501a9ce5131ee45ef25f14053821b5b5a7bc381e001ffc505bec8599a730c46366ed31135e764cfe6de38a51467905c57810f773fe7aa042394f8923f244eee5bda1a16fa0f76fd8512babefb9885b926efccd61929d637f1b39801d2dd0c5ff5012fc3ae04996ec7f1ec48403ae592d4551637ddc7785c715ecec81c0810683234251c270cc09e9f765b7b19c6b5410836b8d39f193aced7998336a9c96cf34a6072cd9d1a61a60fe7b8a698a42ee8fd787cf0f3a43ec4581feda54eecff926f42fa5cbdae33a9d5f4e1b888e43da7b1c3c696bed5294a3189d9f5c90b30f4308967201b671b3b5737cf6d015a3aa9af84ec1c539717714d7c8b6228d0e727496ea27934b4e686e61f2e309e08d7bf5222c02b9b673d9ddf35a919d7c8efd78964d5419e77ceba2faa7f59b4ee55e0c3b5a3bdede7ba9eb4a65a46bd45cff61de89c9d6785bef74bd81fa56dadc9b792a5bf54d6c7121de76cbe723f857da17adc39f576536a8d0b6dee4f948f57dad6f6c53f70fafdf91effc06fc4204cb772a5f299dd49eea954fb02e9a8093e9a60e4235347e781cae1739ae21352fa432ddbc6d0e5a9a957ab259f8561dcb3c30ac6a01883985f577ae77bd7e6d5952db5a2744d535b12235a579931b5ba788ae27655c1cce7c509b2fce671dd996abc19a935897dd16c48b02948176bc536c6cad06552773b93dba12c1e9fb4fd08fbb6b5009d4948722e686debd29c12011ab8e66ccf7ddbb9afca7aa073a5c9d08e909d05c7565bd8d8923ab63433302281e478612e80fea68bd6c560bb7f92fae303219111a4e6f90a7f4f791c683dcb5b745dfad97bf7a4df45b91c70ed9d47a2e775e425a859071a70cdf970c0a69ffb41389f0c5973a4be915eb3975a70c7e91ca7ad0577a943f6afae43e6c385c1b5227446925c14169d1b2bc035b13c29c14bcac05796b85eb34ff2b45fb856684bad4565190dfbedfebe6e53ac83047bef0c8d82779ec81750a8bb545d4b07fd3fc28f74f08cd3f89332c6545c199a1c00a94adeebfe1a121e0c5df00c1fce496ef6b9d6c14e9b3f24769ed5f6dafbf840873c869be5e01927c188a6f7d2b3966ef775992c7848c90db79f5efbd5eaf6bdbd4cf67593b27ce6fcb67e8c1eb4ad9378a40e149a7adf33259131b2fd3901d0058c8fccefdbd9ebb55668d397c0d7bdab1f75f92cb67b211f6353e16ca2fd6703000f65532f4b272993ff87fe22e2f395d6b93edf5c9f52dd7e6ce57a196745ea3ccff7abe5fb8fe405e0b3b0dd7be775018e3fdb5784c657f16c4924d8b1221f5d95f386ac15a43f1eced3c363d6b52532fd70ee885c58cf73e542ae4fbf6e3fb632bbf8ec4b8d5f673fcf75e727bf4d7e73b9ef432b5b977bdc92d97c6824976a6c456c68e87d263f5fbaac8fb26770f310682487feb8f33d7dd69ce66cb7347645f8b794259285006316d91d3959e68f19d067741fd3cf101e779f51c537b35e1a5a7f43fd1fdbfd2eedc863d79cca4b80311994977427fe5e535fac20ff7f37ffe580f05f12fb583c0dff653af7d9913ccf6927f59f37bb58dad49c767aaea13527cf5c2bea4afb320f6318e2f1c4715f8269801bfc0c690d0d1e8fe739b00bb56d288bea09a7c92b4cef83720e94d4b595fcf9f17ec0bec8f43ea1181383131738dfaa2378682e629e24bcd7a9af14dd6bf370e3486a5873cfecf8023e666f14d587dee3924af7bf2e260862df77ba3f533b8ab90f56aed5514343bb0e6d5f45faf908486f2ec129bd97fb7847d616f284e4af15a12e17b480f6ac23a953c0cbcd84cf4193a9af1a63d6596c3b736fbbf968c93bdfcbabf7b131ef0ff0c55c62b199cf3c2b56fb82133e274e3823e7a428ee72b1577363a2494e1190dec238cff9d3d936499c9145badb9cc63d7f537e26ce7d8e00b70ad3baca17cad7c4b95eb6df9a3f6b30b4a53589f39e387ff337e71466711deff9b75e628c706eee6106beec837cd7756216bb7e888a390353db6fb136c1922ccd91b0447a933d1276fd7d92b830dbad25fa3e15074172b02ec6b5a88dbf41ff4e8f6f262779cefc12ff3ec1b4a69fe16cba92c7024d5c3ceb3234b4be87f3430957f77b39ef2e7ae267d25d2e7ae257d5130be3ac177d31e3a7ac8687d61c035e5e015e4636fae659fbdc3ef18cf6a6fd845572670a7317d05acc8865acb3ae2df3d11d8c1be5a9028f79f2203f365ab31f491b4be39085f8954f17ef2ad0d3cf1e8b3e4ee7fe4478b2421b2c3f3ffc53e1cc4a3980b3eac364f9654f940b57bc264aea1324f321c819f351c547ffb88da5784b274a72b75231adbd184a67b2c5a5777a18376cead4771fb7a753db5628b4a7bf382e786c68d721d054e8b4d93d5c35bb31f5b3f39894b427934b335786ff2effc5b17d38717ecdc1fc9f282ee781111b9a9aca20db92c6da494e9bae54c9c1f1c04850d0fd55730d709c4eefb90e8763ac645dc67155bc37d7718ec1c6d1051c478f730ccae32f65583871f1acb1d0d45fc2ad7cc63901218eef7e0c2e368e2b57f21fbcc5fca6628aebf4f818773a0e4cf22f701d64e5e1e56de51a9cc8e03a225152bf91e4d6d37a23663a1f28c52f65520e27749e60b9dd515863ab03b93be33eaa1323cbb26530df9447d7e2c8d1e5603727fae2d7f8f4b6f6c5aff175fd1a5b7d0f9afb67e0b9f3e3b9b4eeaa4ef6cfacaf60dbec614ef6cfa1ff127ea35cde9103bd20a30e76e11c9f8c2fa9e43dd56d221673c39b6d61b0ab1f7e0c9ebf6cfd7c880d33ddd30d0f6adc6fd7d501a7657a4c77ebdcbb6f69ceca3ab89d9d9ad7a43e38c63ca6df95c28401eeda35b4661c873ac839457625c5fc6d2ca9c502e9c535fc3717fbf43aea043dc392d4e8fd38a78ae336d919a71af82d7561e9226b0e8460876f05e9d79d18dbd5640c0d2e08777e21e6ba323f50da5f53910fe621d11f3f724d485b9d74973fe6bdf37898a37dc1b8efff949de55979ee9fcdaf7bc9e9fe4cbad325a7fb92d3fdbe9cee54db72f358b14cd9c1eeecfa330e7d62e5f198fc67fd24f1c4ffd7b86a04d6afe1346cdcfda7f1d7c46ddc351a570dc5f287e8af7ffeb96ab8a3d05b803fed99ffcd99d993e1af6fb3b96dc1c928bcfbf663d0be7ffe369ecfa6dfe6b637f42df2bfbf835fb39f2338fc9b7cf927ba003d7f34fd3943bf9d61688de01cfd39256fcabfedaa311f6d868dbb6693bdfe7ed5f067ceb07177cddfe03fff0e47f8768e615b7fb0dc1f2cfbcadedcf1b7774dfecf5b86e15a1cdbfcbf0c7bc7308dabc668feb733fad5b8fb69c1f9f0aa318f70031e86cbc6ddcdf5f7efdc55a33b9d35ee5acc75b3d562ae1a0a1c4d278d3bf6aad1c32fe5798eb9be6abc8d9cc61dcb30cc5543dafea9fffd7760394ce38eb96af41df44ce6aa3148b75c8013d2936ba675833eceecc9bc71c7b2dc55e33e1cf9a83183a1ddb8639bdf5b5c93b9bdb9be6a2873f4cdcd7796f97ed3e26fffb96af4f62ebd61bedf7ee7f9f8d2b8d7cc3f578df6fe53d95693e3b8f8529ee55b2d9ebf69fe839bbf982ee643a771f73fcc1573c5fcef3f68eebde12f3c4668d81adfbc993ffc36878b89351f4dfef8c9b5be3956687dfb35743c2bfce68ec26fde02ec2f92c335d2b86a74fd60f62bfccb0abd9df596fcff6166937fbc5abfdc6148feeecf66f4af9e15da5ee36eba80f0aa31082d384c66157fea0f2dbce2d0b5d24c1cc1e13cbe9abc39f9f8300c92bf5f87f370ef6af4d5de1dbd99b340effb4f83363f7f7fe0968ea68dbbf0d76278f5ae51c41de9cd9ce3a7c19dfde9cf1cfc1c75f86b3ec2e3c3fec9f2789307b82fb10428ec129dab5a7bff9fab066a63e3ae81641d915dcad892d4d0a07aafd5e933f6c36cf9cc051bc05d8736a7cc4c8df59efd566446ad89ed8bbed366564ad4da189c0781f638de9e4529dbd5f718a7737ff31cb5c6362f8f9ffd6660f32f0b936b71cf44ffdb189c387fde3c2e7a6d367ed6c29a2ae998e248463a7cec1bc1b651ebf585117b5d24e739c259fbaaa98ca1d37ebccedc0154fe7a1d09aff4995b5dbf58871ded9d81fb67c24e5e7a491d6bd6f0d781c1d1f8aa94ce53acc2f310fbdfd54d57828bb8f62979963802bccac43c558e26cf2d4da1b158c2cb6ce8a66769eb2db744aefd7774fdcef4587c0887447a3cebeb0bb1ad9959e308cf8dcd7919b1b6aa7aa83a0212dc58929acd69e8af3d9b7f0981d69a60bb36b78656a92ff7f03999fcbc6a6473c7c739d2f767d8264b9b533cd06639539737efb083329e73e1d5bcf06a5e62599758d67972b900b73effbaa6f5243ffd58f3a4a6e589c6ba344fee636b277d85f18eeb7b9d2c07ea30bfeec2bd92f153ee6b4ad7617bd6cbe7e9b7f8a67f337e353f6fed50673d6cbb09eda99213ffa576a1bebde64418d891a129bf9e35d6733a7d6897722b637e1a77cb4f53b52e446b0e24754cedb1a5394af1484f095fc86e1deb54dcaa76eedb3e87ce87e0d7d2ed3f77fe6bf0b570ebf0d435c1b6355cce5e8f37b546bfc0d8a7f87b4e85c93d2abf36d6ad8b650bd16b2be6d31e623807c21c605b5a20dcf51abb7408463319835a1cd9a4cd1f533f7cabaf956102664807b3a77d38ecbcecd633adc5e982c7361ea709e01496e23cd058a53ffbb62f4ec9dff7334353184713e7cf6d6101383620357870cdd308700134f83e34db9978f38fc6b246a6b6aa861da6755733cfd56afcef18eb4bfa83cfaec8d4d654f62b334bbf77d179e1f870b28bc9c663bee88afd99a5f7b67c4b12fa0d17a604c786de5fa6ebf69035e76c521c3befcd650e496dad3afc413b35b4de3566b416587aecb6fd24b57153f2f45dfdc4b573abe493eee52ed6c4f0e17d98a19f519eb6d3e864c47fad2bb3033df3503ebcecf9badf2c8d8536dff7807e5f4996aa78ad225de68dea61fd006898ef2db0a31dd9c01b7acf4dfb796bfac777fa55a50ec8de35bb9c6e3e6e73e848f030676c2a107dd68f6307d7b3a787eeaaf720dcf6c62fab5e6715fd78b85ffd6cbbeb1ffa2ad236f7e10f9599f5c439f343646fb54d9751c69ea36deee9e7c78df26a3775751e2990099e0693b0f7d00d7be349f0b3edce9e1e1e9b3f1f64d06b334d7d00c96f7d1efda4d73d3d08a03740dfadd6e45dec6d0fce57cfaf9ef33480b74f6d77d67b85f43be83ca9e4f77023b79e06b85debdee68d476de9bd0ab7bdd76ef03c7057dae6113f4bdb3c463abde7e783027a0f62d5e732ca18ddf3b88edf839f81de0759da8fd5a6d79e046adbc5e3d463d1fbeed7f1fb9e5e6733f4bda2d2eb07939b2711fd4f75e8b8064fe2da7e8edb104dbe3d89c1ad16cd433dd59e1f30ddb67d9fbe3c37748579d6d8a549f07b93322ceaab246e9cb610028ee0dbcc363a13ebed8dbe243226adeb49d6199661b82d5d296e4bbcf76ad6e0c0ed6353edab5417654fbeec9e9d266e2f8bfb7960d348c41e8afba68fdc596f7c8ff78282f6c243f71aed8fddb58cd6d8cbb5aeaf416ffcc2fd1059d07ba09f5f7bacb2818eb6e972fa60123c0d98556fc4443fcad71dba6ebbd61ec4789d917d2832c193be9a3dedeecd80ee9befbd2913af7db427afd19eea7556ebde6892da67a87db293ec3576beeaa9559ffbc2e17b5e1f0bf6586ff534806f4f649c36f87d0f62b2de7f8c3cf43d5bb04766bab85ad0eb7f3dbddeceb4e91a3c45ac936acf4dba6df27e1c20e52f2839231e53323c1567aac4ad3f3307a97bb631d3f4b9406ad7d78f97e6b6a54a2d24c02b63435b857971be43bd86c6c83b797e966c1910e785010db57fe56edf5773bf1fb6f7883a48fda5111de289336a6025f1c23d2c7155fb2a3dbfbbb8e98ec81ada3a96a9235cf778b47f0dee4bddfa5871df3e26765e548f36db6eea23db878c5b5c5f360c708d67ce704da93576684da6d3e2a877e7ab0247c6bbeacbeeb63d838b8bb6fb3475ec689cb044a78df5e48378432ece1de9d12aec769cc0915c64e362feb1e736d603914dc23a12b237facb6ccc4782899f533e5c62e74a4e0478755557cf25d8e14b6dd9ea6b3e9f0f6457ae353da0a91b5b12ebe6fce2f560f38267706faeadab1e90a03fd4b6b9bc27e2ec45ba61c5bec4d7569e1b19f87d8a9f6a4ee93a267280f044e0e7e11a7209c6eaa4392e07b2a51aff0eb2d9bc8c58d9cbded9262e80dfdafa8a8b658400fce6b26e7d6a32c72dced0d62cae67a8c12896198017a89dbe724ddd5b01495c60ffcc74e26eb9106be6d66bcd05e07338414e74aed5a8895f97772f9121e97d6277d4c8965a9bd82ec2b5bbb526f67d39ba02536b6eb595e32b5c3b93fa1be39cb35876bcd7c77591899f59264ee9d95c293732beb6be4c4c74b4581748c93e4b12234353185397039bef07c6c13eaedba74fc193742a9d8cc6f24beaa9126e62f7496a4526272e2c3d887d8e982703d97280bb0eaacae23d6c868b755ebddf7c6e0bd0d2fb3353efba36071726afce0dbdeb3e61bf79c9bbc93998d49170fc37f7496259d0e907b684393c90ed8764f3413b0b6d93049772d1e9aaef9164accf1ca3a5efcde744fb4c78a7b2b6d6ccdf6b45e6917ccf8097f3e6b1842bf143e7b21057fa8938b18af345dbf5706b3b7ae3d9f1257b7af8e71f7b6fd71638cd1ce01865eef9fe51635f8cedfd44635e9cb35b73ac3f98abfe28cc0aadc5105a1562b0045f2b0cd2f5a5aaf859d3bc0e36e6eba07a468aa7c3d2ae5da0a98ca12179f058cfa74af516920f51dfc78ec6c9e6cab930df92eb2aea7ef4fae7b6c0235d8ffadf3c83c7f6248df36661368aed6d3ba71d27d2d3623d332cb4b9cbd66adc778df2e767ed07cec3f5e6def59ebd6764e630f9f6bbde817486c27e247d3d7fce52fadd5f02ab57a5bd75cf305e9e1a5a3318fae46cfc1df340d6c8d79883d2b6d61c7f648f633b973b7bce073af32213fb973fffb827e3742a6e0da40f6870feac8913b323439b57ce9ee3646aac6769abafa0cb41a08901381587ccb40f81a4ae2ca9b53007ecc2d1d8113a37cf9df344deff257c0033c035f3f1e435658eaacabd73af754797e75f41ce14b6b3e6385ff282cf9e17bc63e79f7bccf762799f7fec2bfa712eb9d9a71cf313d7d9fc48bedae3b0e9c8662cf387fc65fb8e077c78935343223b1ea95dbbfbf60a89e7aca1c989f32e897d30c3c1fd0cad6b5c7f9cda4c4f8395eb7090b1da31ce41610e38626a61d1b01ffd63e2f5699bf928fe13d43696d657ccd2bf9419a9d5ff8e77f07bcfb8d89617dbf2625bd239bad89635d6cac5b64c64eec5b63c66ad5f6ccb8b6d79b12d3fd9d85f6ccb8b6df99e5a28fe8e0d73921aeebbf1b36af16a435bb983a2fc979c7c93837c27c95cda231cbfa778aefb99cdab63ab2d787684f3a3fe7a9b2872bf3d711d5d09806f631e06535702936b7a24378570b51ee26dabc5bccb62fcef887b57e70e80753903121e043c2604bf8b9f8173ac76f18a2b77abcbaf5caa03bb80efba80277851c2bd2ae0f3fc206787acadcaf53b0e701fd97bff9db9572fa7e20cc0b1fc0a58957ddfcc49d73fc6e3ee3dffd4eb7d6b475fd6fabf74ad4795f884608a5b44aac52db4021c5c60eeb04e7f49f85ad46b9c3b8ff96f94a5dd99909abbbb79b214cbd45ac5675757f23c9b735dd36f4538efd84ff305d4ca298c2e7c449f9a8fe8dfc2b33333746576761c3887f7d157f077e1f139d20f505fa6d2b69c280f88eaaeb15e5e11f3f948620495f854a6ea1cb4ef674052a786b60aba12be97c852eddab5b4e6c4d2cdc0eca81ed897632539d77bd8cc23b815d2364909b7cc7e9cea8463701003ab1db78afb7004deb700777a20bff6e24c15cfd631e0d810e985e41d2b97be937ec6f2df33787909a630ac87752e6c4f055d484ec5354aea5c6e630a15f9098425e61d6a0bc93b6a720aa4da767ebdb7449fcde2c8cbef674dddd4965a1b471253f196b3e7c34ccc4e374467e997f0f9576b6fcd989712389dc991f16a7a6fd6dc629fe7d1316a06adbd9c9c35badfd831e0fab9ebba2cce03d03bb4556870ad498ede3706bcba703a72f3c877a4ee3f194603efbd670de9d86fa53c0a895c91c8f515e5f8069d1f80ea98f19e0745fbbe827c8bdb7c84ec1ee39a3e65729b835539651e682e32037887e2501c083827327461866c38d016225373b08f03db7712b2d1d7c4d791773e148f01edc311e776d63e3a9ceb5707f3c355ea3fbd7615739b629e5dc0775d039daf526b0a7875738631d964b6b98a3e572803b2f45972ce741f95a579608fe5e46fc5f7a0f52106f21bc61ff521f587619c00e15bd99e5df57cbbf1d997d9a64afb225b3e65d6ee66c1b41f55dd1fc9734fd45723effd95747782c928eb639fe2262ae9e9d4e776e4ba8d710fefe774cc6ef3cad0fb8ca9cbf17c0c9f47e1fdf3683f3e24275885625f591a575171fe139c5d93059a0ced11e682634c6d0d6dc95b1ecaf1b2b59e75cfa96ab56fc73d436fcc9cff01b245b1af4eddec712df9dd0ec555247d7f2f6f54fc9c5c1f5c6e2d8cbdb148eab81f724a08a0db962966a67b2a5f2c6bfbabb273477d9b54db73aa2af7a83ce14d0df37f30d42694c1b40f6dbf099db6b042fb91fae2eaec49dcd677f30e4fd5c8dad705f11ee9958dc3e35e9f2bda8ec4aeed76fa70d8e9b3989f6acf1eabb3cff0bd457ee4dcf334ed432c394b7339f70bf8fce39a0e03c1b37965697090c689083f178997e0eb30e7628a7fb1664e74ae2ff4c2e75228a332d678d2e7321b90de7bc13a655c7376ac53f45bb82d78f9cbd479b7fd93626d4686ae40657c6cbd53d9b3b9374ec95ca7bf1bc783f1ec27c1ef5892b8b14a798d491ca8fa99129f177d2f557bcaeb4a4a34d405666bbbf65c53825313f3ba3b10f86a64e87d68b6055c0716e79a6ccfb434a681c47b24716e72adc8d2fb335013cf40fbfd21715d435b4f018ff68417568b499278f5ee7d95cf25c544fde7680d14ce0b0cce4d8d11dc7425a4c3412eb3fed92939054f56ef238f8f50f680e42c6db48f24e674b8066e5d41b7c2b533abe88e8f74af231dc0eb76702d4b1273f7df5cc215eb608e191a878feb44d6c325e0365ff4a8ea6b37d5f6faf23a590b1967c1c6925a91d3ce8a61567efede332e7ae07fb11e78c1bcd75abb17ccfb05f3fe5e5df9b06e592ccf4f83e1c9abd35beeaf4973f152aedff7d462dc983aa993b18f67b1a334676f13fb560dfdc5b5249133891f6885beb734390038df5bf001dfc5b9de249f3bd167b6983cedc52535c593da7ce8590c8839cb2531c2b55008cf1c1c768ef019658eebc7f0cc113d8c0dccced9f956537c815fc04e4f73349ea8467b612ce183f34a0b39643fd3b817eb4b35b125e973359ff3fea372d92b71c77ea2b1afa837d59c0374cee69f8b1f34f65fc61f58a22fd5cc61ffbdb503b632b3bf3995ef2eed432a887fbd519da362dc8bde4be281130be90592d8ec4ae2c26c0b0b433703933b0223cbc76daa8fb3317c7163be1a4c299622b9ae021f6e3d9c54e24bfe9038b96f0640520bfd07bbfe4274fd9bfb9a85b926efccaea947b1beb19fc5f421d2dd46a6662e6dffcdb5f417d7e1c44d17b5856b91baca7acf4dc615e7e5c8b02ba9a1e1ab135352275d092ef6fcb449ed652ba9df46b0d68ee479385f475bcf694de68dcdc129f0776a84f996b686dd8e3333b56b7a3fe92f7a9e29a918eb63b6ebc4fe2ff926440656ce37a1b59a3e1c1791bce7247698af045b9da21c93588b276b208c2d3d8967201b671b3bd77bf3aea406b4be121ce21ac8cdb8267e4031141e68dfcf8ce904cda307a63d9a7fd8c47822435bb9062f2f6dbe17a6f3bb9e6ac6358cfc7e9d4856ede779e7adfba2fa9705eb1eaa0b4b175973b09feb7ad29a6a87f51691adcaa9ccd97956e87bbf823e56dad6763dbe954cfda5b23e16eb13e7f395a7b02f548f3babde3e015cafd0e6fe44f978a56dbdf8074ebf3fdfe31ff89d1884ad5ca97c66bbdb7baad4be1017297c34cd0b97213a0f4cddc4e734c5270479b52d4b6c1bcff61d788815a886efcbb44b0fedb8c1d60f5ea9cfa958f8ca35b85688f3b925311a0e04acc3ecfa68d1be676afb67e3b61f81915f19baec81528cb4e0d9c86ed1fb5579325ef0733595c11c751da43b9a8129bdb9c640084d4d99195a33b03986ae0352577d88f317e1786b93901ad34847737c71ee686f333b9ae0ba3006d5416cbf35af5ba398f6f963f8040af824d2fba8907b84cc4d364e188d9baec2aeb4a3db9131c2761aa927836412f06d37c7175f7d6f90b68c019a933cbd6c778f3cd06b2bf7698b37dfd6df8ced2b7b2490777369fe8833e03d257561767ae1413dde9cf9ec4beacad49a133b120ef1cd057d7fd19a714dd8d576cf74914dc2012e8cf95202fcdc831c81bafd5a7b86afce8f8c01ce0d4d86d97c967b7d3b7bdd437563684e3ed7e327d20f1c5df14c2e93573899cf1a3a19928148b6a3fd7e76bb09ed3db4de901de87c050c0987642392736200a627d38ba78e062706f5579d950b9757917d3eb7b4029ed34fb4f62bb5b75dd37e257ac191f66b8c71cce4128740c23a40f69c96d62053e7e4dcbdc49cea8edd7b624ebfd38602923832b5d29cb097f4391fdf53999f4b12c7a6e62d81847471820f413ab58531adcd695c03fcb92d0420153baaa923c767fd11b6547c1697d7d436341662ae3169df86a8625bed7070e07afca6eea1be06601ad74317587b2a2c6deecd35b4e6a4db513771be3eae379967d394e5d271e2b4302ffb623f1ce0731d8d0d0d3d9f2be274b8758505c8469f4e4e854ddfd1b12ae492a775a26af15e89c4c19258859f7c864392f7b7a13541fcaef4e8eeea5df81e06e76fd4e24bdad5853e28f718da7cb5f5bc3b6e99fda93886f73353f7a0c1ab8ca1c9737330c17281d48bd8c98329e83fd52d6ad88bd806cdc7ec9f2a563731f53ea97f709ab58d7557b31a5f4a277d6dd5f3caf65b48e6122e0be2b78f63d0e87f9ca5f569fd5f19c6fe3133f6ff11fc03f107e80a8cd7bf9d3a3b6a9e6bd3823e9c68cd2319bf9f275c5947a3e375ba5ace99faf1e1dc6a24062cecc9bafae730e681f6d9c0e6095e34d647523cd1a97397e061e331ad997f13c7ad8fd051b275fb43bf27bdae7acefa0bcdcf67485c14c96a6f696968ed8a21e03047c89cf2a932966ec2ba9c30a6b6ce5a97278a2b7b4b276243647f548b2f2b9eedf7311769067f4fd138e996a42eba9d647c1766b4427a6c22ff2807eac6d1708ee1a68bf939f07a09012fbf175be1018a0fc078e9b3737a2a33c0c11c7c0bfef94c3e93b2b6d6b3c78ed4c12ca915185ca91c7b88afab783e511922d07d45e25a86c62e91ee6b732a67225b2d5987adc4bf590f0f4265c05175e8c5a85c4e099e7da8c3e59ec9868e752fdc576c3f72add046fb0bc7a0b63aa6d391975427c5f7d4afbfff5172eabf13ff52588f7e779dffc8e0392d92b7499ee850dbc658ec8e1ad912d6cfb0fd8c71505a13630e137d8bf4377546af5cb226f1ba886317f15ceedbee75e5727e2e5e46ff6d5ef00ef77a91aef248b856756565a0fdd81159435b07e6146e79e9094ef2bdfdf877c5cb3e2eaff7823939774ecac9ec97c3b94467c8d9f39be9f9f9e9f52c7a5e5e726b3f7b6e6d7ddeb993d67a42d795ebc12f741f56b459b10e80e46c68e9fd4d576259d0e907367a1eb1d7a7b62faeac4e6fde95d681cdf737cf6d81f8d7f49e6beafd715d0c4e66fbaa719b4680c3b90855c680e43154f263a89ec1b9ee2bab3cbcbc11ee579a9b11d89140dbaf4eba92dc44faf1dbf6ffc8860dcd0c7f49897e9cf4e3a223d7d091359531b4bee7488f47628b59e848e2c4d0fb5eb62f17225b2872ce9d7fccd1f77e85b3aabcad3573305968fbfb31c3ed7a2dd139425397a779b94280eb07e6f458fe767669229b29fbd92343537e3d6bace774faf9fca565181a5f1c5b111b124edbeed1f5a5b2c634b5ce4fc353a6b12bccc75912031bc4d7e5e742e563841fe3b59592ab383e0ca7c0171974de1803618cfa05a4d6f499c411b09c7fdeb549d3bc9a0c8884119255c057e68ed68766fb7e96cef131dbc406b6a51643e4a138079d890bb4d604cb46ed25c0b2bf43f2eab6e7434dceb3640c3f843f6196ace732b9ef7b4df22cf5da69eff058d4b3a7b1ce87c7d7eb4afda5c1c773d68a763f9b91a139e4efb6e7193ce6739d77a5e612e95a06adf186fa88cf09499d3c65e75556e0ada56dc69c192243af656d7f12eed6edca94ff0b835bb3e6b139315ceafeacfc15dd1b838e3ac9f5f39461a852f71fa18bd2f57122bc8ba64666b92eaa10f9bcc56b57ae1df348cf05499dc7b143f24e7543710a11e0d61b9cff4a64cddc217ecd9ab583e2f3e743f6e41870ec8860de8eac9391dc9fc921b179d6e0b1bc3e9e1db1819de3c3727485011c73e43e50589bef2fc109639906d70a0d1f9673ba4f9425d0905ca071e48ecc66e8d979fef18764bc53eb8eee436847026f492a6361dc12cec79f01de26dc3f49fb84d0d1d68ca50b7373703f23fe7515c7049f060267eaf226e6038afd723687f3c2933d521bcb81fbfb51b604d225bc65454ec278fc62df6348b9316b9c2bded289881fd3223ece94ec103696d46281f482b91c2d3407d21ac9bbf79d155a93ddcf8349eb588eaec067cd0cec690e2e25250fb371adf22f53535748f666e978c7e55a67edfd0c6c0de101a8b6feb56bf745ef8538cf5f5bc771d800f8fdc0e088fe45f11b5b7f72475e824e0fd73373b4f504f30a7414c69eaa63a7a322bd15e7ec607e026ecdd275e1919c7ab5d995c40863443a328bf4028cedc232bd3f333518753b891e97e87d7674ed0e74cc858ef6e402f02f5bdff648f0c074b26d7fa747e25c7a9fb17d38723056a1664e371993a2fd35025c6b6e6ae23e97cec8e0d58d23b5c2d2798aaf939c08f0ea2a833721570fdbde9b9259538c33dd60cc0cdf8f1c4d611c5d8eb118106832447218c73a7d35ae2dc060ce89d4bc1ece5dcdb14bfaff21e7ebd4f65bac7d767b9dccd157880f98bcbc74f493716706669b8de3e54bfbdcb93e9ce20169f515f2afc786b69e9f2acfc1964406e38646bf73ec59cf910a6abc7ea2358fec3ea3a06e6e4d1fff51fa6ab2ef4a302b89ce27c532a592af84d83d92e2399238079cb3796e231b9c3e436af9ddb617af1568b6273b321dd753e70c97b451d810dc47caa6aaa57f66b7fbc2855d841956e6c641bdd594bcdab567e8b5d5f11eb1be467242766a38455d893ccfd24c7a0dc5967f28b7cb07f18c4c5378d2b3e79d92777f05794830d3cc850be4ebe2323c7b7a76be1b8afbfb02635d8cf3a8198f22e7d9b9f113657afa27d26d89cd75b2f18693673dc682b7a2f3e7b18bf36c5e03fcf389e2aec5b64f5d191ed7d1fc9d635fa6a77fa2351f1a7a7f6c9d8adbe9381c7c763c3b23e642af4bebfcd5eafa722ab393a333a5be338d85c02ff30bd5c200257df9983c2c053ac85ef29d7c1dbbdc3ea173c506001efa647b59eba06c5e0ff70ed14fa575ae7e9abbbfeaf6633b2f65dc0585fc82f9f24b5e80cc7ccf3d9950900f996d7fe371c57953bf8d2b9d623c3eff1941c6e948bfd389e2123931f40c9b3dc66314f91eb2f167cacad41462abe3981c1c5bed9d381103a22ddea32b9911e018ca0b90c2a5b4bda4b61db2850d6dbd34a3896bf82af68bc7788dc3ba6d65388f661ca7ffa8fa76c7f238e5e910234b7b0963de12c0cbe7de63c5fed24f646b94e88bb5ed3a8c1ff3af7fe7d897e9369f48be95f8a0cf22dfc8fc1763101219e892755d2d977ae79e1d8c4b4a7e49142327edf18db7bd243e7a809d2ad6c5b04cf8183d0cd7b00e0dce0b80f412a6f5d16a3c27b11cddfa25f7e3930e0799b4ecaf9d87bc9bef18d8511a27b8721dce83145318389d9e4bfbe23e499427505217ce9e7fddc07156b4766edde42cd06ae5c765f95b2198aa99f54c29beab691ec4a8937b1720ea9e3427f7f00ccae2f5c07ba50adeeb81acf99db9180d0764cc076ff5ce5f23ebbda73a7b93f6b1556313db18cf237cacb13e635e8624162173702247820f2471da955a78ed263cbc89bcd8dfcb44e654cfe7bbecd94fbf674b79cd92b54038c04fc31793e809c5671f3da377ce2fb9b9c73955d51f4178f4f69fd5f6225373582089515752af6dcc2bada0b334e84af1fb5b8b8cfd568605a5fac547d5b7233eb74a713f98e886b530d9b6af4e1d6ded913a1869fe28d2b7544c50ee77480d0cc035696c90c5756876f62aad9b1ceba7efae61edb72213dba855629ff1b575b8a0b6f9025bde2c8c29f4529c23715e74da66c4d831cc57cd6debddc4fd073c5aa3f209eadea80b47cbc2d5c67b3784a67e9f27133c9b5320c0bc2b9958c6642f99384f1ccf4136772696c1ecd892e0dc6cb3697c76a578fb9eedee595a139abb36386fe9fd59d9b9946ddf93da43699e6f52473dd691d5c9733b8dc5858c1d09b42ff73393f2312379f3b4833d173cbcbeb5f506ec9c191f3ca75378c8f593dcdb5c9e1617aa5e57f4bf8843e958ff8b33b3b43d198f6b5325ef76cda9bc04038a6fded6a6729f32f09c4fb80616c65704401796f6b47f88e92db66160d2970fc3a15c706f17dcdbe7f64d7d06dc9b5da18ec80effab18c76af6cfb3420ea3844317bd2fe6104b7415dc56716ae8488e605ff00a709060c149cdaf0dd177ebd619518a6b8cbccbae5c7b766e6dcc7dbb9a5c5b5d2f4c78fab65c37a41e1ee58042cfc3fef4715cdfe583396127a62e203d66f37c502b2e25bf7674c1a42e837b585bada8efe202f0fd195e2b3bbcc370e1f8ad5fb13e8c743dac07bfaf5f499d8463f2fb120ee9ccda57e9be9d3d0616f31e7f7e1f71593d889a67d00edfeed9f30caad52cf84ce7ff2e87e869e680d40e1017071c801f3efe0e8b71c112c93bfcf46bbf5a7b6bc6a8e23a0947c51b93faa259bce0319fe971b8e02d8feb8503a9ee3a392907d271f9bcda9a705e14dba802e16acdae0997cf23417110a97c389b17a08179f170fef8ccd09a5333eddfd1c409e58af0c028ed1b48f9203a895f22e19dc07e8938ffdc572735b990626cc92556919ad7eab10a19020dcb9873eb4391a9b14bc7ffffd9fbd2e654b16effaff22fdf769e3e0c3127a6eabe08262246499c986eddea62b04105e51e47bcd5dffd5f7b00360808c6e424cfe38bd31d95610f6baf79fd567e2fa72f24934f8eb562ee687cde3fdd166fcdb56f91a75038cecfc8158df7fc744fcbade5b5cae52824f3ae228c1e9c6f35d5861c7eaf340f731612bd1a515f1a88cd63b4a533ec6f74de3f2aaf0a61f0d2918c3f65878f493c1914974276345387357718d3b73cb62ba23d28934c4f5a1bace676511c9c782eb7c9c5ffad8c51fb8eb9f2d5ebd210bde3deed883e57e4b3ba538e13da83adce4851bcea489ea2f197ae3d83796d657191dc8eab7952a0c17e6e70dd3b83ecdab72afb17e327c87d5b5dcca15f4557047b381e64af5ff97d847ec32eec9d9a6b1be5eea319e01c0b5e5a63ec63e80fd21869a3291d5f0d52f87e97d86b147b44341cd71dc23174d81ec632de158ea3dbe4dcae676e8436e6657c23407d6633e366e5fb0b9dc76b1d8def9fd463239959ae97c4c8e4a5198a95f7700d2ac2b208f555551ecc11b6461dac3111e3dabd37371fcee783faa36c4dc68de7793a064e5c5f2947240875798def87d8deae85d709e290b5619e0b5c2713da91f07a84a78df554b0be310ecae352f5a4830ee3652ec638733726e3ce21fd3633f5b80bc685016f6a04d9f204d2ae67e5c5ca9bf0dd0e907d0571e328ae5c80fd70bebca8664f8c55a5b3d094be6df08d0c9f747c4edf2b1faeb5c9099e75ad4dbed62657acdf6c6d0caf41fdb6da1cafbeb5c29e61df60ed55b9be31d88113ea8d97d9836b4fd98fea297badc5afcecfcfadc57f873e4ebc2f5f0680758eb17b8ff3584bf0778c290fc76affddffafffaaddd47cfdd764b1ae3dfc5fed6d6ed71e6ab59b9aa87b13f0d73fffdcd4ece9dad9187f9a4bef87b534e7935f3f962b5377e7d3f5c38fd761f3b1fb63b65a2e7eac4c67e2e9e8b7bf562bff2ff4c59fe047f0ece9e2ef25f8bf3559eb537705fe5ca0b764df72535b4d0f93dac37dbd51afdfd4bca535a93ddcb277f0cfbfd653782b43d18d7fd1ccbf687a44df3db0f70f75f6cf7b8a621a0c5dff83a21f28aa76539baefeb2a6bf6a0f7febee6a72535b05f0e54f936dede1eef6e74fe6a6262c96b58706755b6f34e89b9ae84e17f3da037d53ebc197b22c43ddded4c653abf64053147553e3e33f95bffef2758baa3d5037b581059e49ddd486e4c839778e66724b35eec0c7a5395fd51ee8bbfb9bdae37aea81c10c2766ed81aeff6c3075eafeeef6a626aec0373fa95beae7ddedcfdb7f6e6abdd4a577d4cffb9f2c1b5e1ace9afae7a6d64c3f956ed41986092f6569b6d160d9bbfa3f70f89bc56635b16a0fff4ddd5037d4fffc03f6dc99fc826b0496adf6c3597a931f2b7733d757d3f9bffe661a3f2c7dadfff835b11c7dfdc39eae7f381b234d1cc7b451bba9099ebffcb57ed3d74e82cea2df9f9626fa61a4ffb2276bf4f760b9c47ff5f4b5e9d41e161bd7bda90dd7ba3b8976157e1a4c74486de05a7ed99aba935578357a73f4f169e2477f8f26ab75ea6af055ea8eded2da80f7fd5f0d0f3fff5cc0914e17b587f5afcde4e65dab0827d25b5ae76f83bdfcd35b5af039d2e4d76a0ad787fe9366e1e1f6e15cc2935f3825bc57a5cffc3f373530beda430df044c49fc499ce4b6b15db587a7b40994fcb6d97f10f0673bb361971a9c9b4d3057662d0989bc0266c523b31681c54c6710df97916f37fa286c67328abfd78d70d1a3393edccba5edd37d9fe46631a4c17fab3c1fdad55f7f0bce935e9f0591b7d2192be85698717b7068ab785f9dba33ed5ea092db16eb203d71872234d1669d373a9c990eb1b7c6b23349dd1987ef48567d4c3d77a5ada43577c1b4db9117e4f6caf16fb79a7295944c860686b015bccd1f816a59ec21076395af5f6043e1689a75fc64fce0506abf9e0378177372116397a566b6ab01215f656b3e4ce8ae8d50571e85545737479efa89e8b7a6be6e273c518eb15e38ee45a7c882ffd03ed6ab83726e364e09c97b57fa4a9c1bb079d97e6d9350a7bc764fb6b02ffffbc793019cfc9f241785280fa539f371ff2fe0c9b786b32a26334e9087bfacc5c8e8ce764f6c38e695276e79f8ea3c43766e0bddf41573e39d666c57ce9c23cf60feeb556ec53f83ab15916c509aebdd6be7a9ed1d15a0706b3ff7cbaf61a39fd29bfd85ab39dad91dd77e49cb5467d827f830f5545bde0bfc17a433f50fd62bc1bc6a11a1b9371a7063f5e433f4a111f2fa3a7a1bd5ceb72fdd877f2f49c75ed895cbee3f50ff168726921378e51751ee1bf93e7c035596e6b2c445ff5f66e5739bd4ff934f08198563077ad15e8b9351fa7e719dd7f46dfb0503f2fa3fb66e404bbe602d65b67dc8f6d4525bee642f5e7853dd78eeb453a8ecaac6c607765c44573eba755a6b14ad708eb0af6d72f7ab62ad793b82b6d226744e955ec3d04c7b8ce1be3a57a1011e3ffecfa05ff5bc5661817c7b16e2fa6b3447de832e5cd47c680c9fe7b5f7fed891ae1df9a971eead6c5bc05e9b525eb15c9fe7a287f67c8ad0c684bc39e85283f2a59275d09ef068ff943fc387aacaf9dca1d5f021dcc5c0cdc49bb6f277bed55c16f806b1baed3dc60441af721026b457ef64cafb58872736491b2e4d6aadbe4360643fb60cfa3bc30c60ffb20bc334707fb28b15fcd523a7e5721730633fd2f01ace92b9733b30af94ff9fa46bc8e72c735c3fc25381f28bb024dde63de2f2e75e511d6c65a9e3b277311f19a6f8416aa835499d606f671e2c1ffa3dad12dd91701d19c7510da1c6dc2bcae7115ac9ccc7ead9a3cf0d5211debf2276b426957e35d07d7b2be6bcd0c599aebf233b976f13c9914d6dafbe649698a4395c1a52dcc553c850184ce61867ee6203e7c199d0cf9af157179a46766f4e44ef9bac7ba4cbb263b708c23bc936c5e2a415a05bacc18eb6103df90014f75609f6e8237b02aecd31afb79abf62827e755900b99d357aee3196c67ad2a617c058e796df1ee713e788c01896307b7cb972761d77be2ee7bb3feaed7de05af4f8fbbbf9bf6fe55d905f2e171fd2a51cb5e6b45bdb6e87bf92050e2ccb1e4c323fefc7c1047665d915681e852fecb70beee3d09ebde6ceeffddb4972f4fcff5bf9f3a46af49d595a18bfeafac82bff1752f4f9cd11b82ef767bf42efabee7ae76dd9163bd0cddfb97a6bdec8d5cfc9d6bbd48e8ff9343a7f13284e3daf70e63168ca537e2ee7b23c1ef0eed9d7c7886cf920fcf8182eff9fb49347a4fadb2cfa5c419b8e7791fbe073e03bccfa5f13c76875e73ee4b4d1bae538f06ef7bdc87ef7b192d97e07b51c2d70fe7772f2df09b64e175f55f5a7bb31b8e2198ff7869f9f772b05a2bc4785e5d726c699f7e67a52a22d59551ff685d4e9fcf63be3fe25b07abc9214c6ccf85980555cfc6806f51da10c58f109d411e06c722f0e158c2b357ad879b01c74713e32bd5bb3fc55f92b25383e3a5e13c8f6c9a08f7035dab4ced656ff608cf8208cec293700bce479296018df56f15656ff4667de6b5451bbd27fc79d4a3c5836bc90781518673ff6548ed7a532a783d4d77e0ba98d69e5a219da173d8a2fc1765b77c499e4d1f9f9b9fbd0515d23e3893b7e04cf5dabb7d6f3a27ce19185fc78ace1abddaf5a4b2cfed33f09ed173c119ebed5e86eef805add301beefa915d1fbebd401dfd3056764a9b4761b7cfdaf97d1fd525eec8d9780b688f1dc9163eba4e30084bfe0848c7826783811672a137385f1d1f89e38664aca8528ffbba23cc81d4b895ac5a9c18a3355deadf3e27c19b867286edecef3b364f380112d3ef5c73bd8b75c937776fcbe8ae7fd78bc65ce7b0a876ab05583e3bad30c5c8fb84ff873758cc07e727f93f52aed16adcafb90a7c23a2a639abe06cea5a2df269adbc7c4ce639aca887364da4d0360fb84f52248a75ffb4016c03e6f7c6366e13ae8649fb32ab867d9bd5bc8fdcab3717272f12bfb2c93633ff21147e3562e81a3b6c071c2133a6da8271fc51bf2ecdb36c653c0f5272aae85ea36a11e086c121a613b0fb6d9391f51edf40af6ea58f4919d8b7bff55d57351cefab5775f799acfcf714ff2b53aecbf6bf2ad59951ad03ea60793e51c9519dba6223906ef7a13848f876c525857fadeb3fb6fdd83f088b718b2bbc98867ed533266ad2a4e46acac9fc680276a1e4eea345cb246a15c1c02ed71889fc2ed54d80b1bf10c83e5b09dbeb335c5d9197c6b03fd338b39ac3b5595ceafca3dae9375091f585f5d8a27bce6d638e7d05bc843c87362b6a5c0e41b87d02ed2617feb3af47d598a48d69fee623ebeb3510e3bf4376e318e74c83bdeebe3baf2c4afcc134f601d257344c36babf3c448470b750182f7e9b01e4ea434a5e39becc0578fce71d539fdde387378e62fa493e158fe697c49ab3db75ff846a031ad8daef8a1cf119c6970ce0f102bbc242f4ee566d850e75506f56e93737505630b32ee4663a595aa08f60bf49b9f783792835b8387b8a6bee58ded179ea68df6c037011f6883f500ba5eef689cc51819e11a5d75baf267245aebcfaed345effd0ebdc54e8fb562cd6223d0f2729b4ee53fb29dbc7d2cd4413e782f0bf34abf101e54719d72b3223e26a9377e3e1e54520ffffa6b5fae5eb9e21ec018653e76f007ad7d716eef175af3e23ae58a6b1ddb5767d69e10f75f0c731be93b6bbd440c16e5d772432227a55c2f96246e90837c4f83bac023ba405834b7b6214b942a037ef05c11db0b3d0fd54354f7b183753299746d4b966e185e5752f7c3d7c37e13713f0b4765a13d89e3bc59391bc5f6b699338e4bf59ac17ae6bad0e63e59cb8de71ee24b659d07c6d99a8bfefbde937a46660d9367beeb1d4067289c4734d7cfaf5922dffd2d72f5ca8cb7aa0c633b0b55aefb138cf5fa3bf601d1c8f7d8839363adb8fec01e87762ef3e9351f40e6c13e55df61dda375ba149e08d0076477d5955b730df531fbf41a274da61d3dbbef00fcf7857439d7905bfee5faef0e5c8397763adfd868437a63c9f414c8cdcfae7942efff163e8025ea9171199e23499dde67d3baa574be459fe9c271565ce76b5df0a7d70527ecfccf5ef39218635f67ed4bfa71aeb5d9975cf3cbd666031dc22cc0a02b81518fefbf182e2fb0194ff943de4ccf720ccfbdcbb6e173e291f2ad9db657503c67ef6a4c6b25a0d80735193e2e015d0b7cec477819ee12fd8f55d8df3685115329170dfad13f265e4fdacc67e19f80b1d118af3c4bff129706dba1def50e36f58cab6d79b52dafb625dea3ab6d598156aeb665c473afb6e539b47eb52dafb6e5d5b6fc626b7fb52dafb665916d79aa8eda4bd830d665e2f564fcac5cbc5a9577f6b0a8fe25a7dee4a8de89d7b6e614c6ef713ed7e3d264a599dee41c13f53e7c1bcfc5cea039b72d45843d9fd52107ec605f63ea0eaa4d4138b4c7f9b6e562dea762fcef887b97c70e70ab620614f4d0863dc5c9bdd9d9b12ebfb3b10e0c7b1a85bda811f62aea7b74811e579f507bd5bf1466008ce597c85549fb662e4aff301f37f5fc4bd37b6c475f69fd3f94d6835278422e812dc257c216da198cbb81d861edc116e1b548b7b0761ee2df885bb33d877b96c2d2c1b94c8d5d28bb04de714cc6b635af11c0ba638fc40ba85453185cf188be341ed17f0acece5255c4e5a7e78133f01c7d077f175c9f33fd00d5792a1ecb85ea80b0ee1aeae525733e9f518ca0149eca425a19cdc7a5c14b0b55def9517f4cc04be55b5b97eb735dd17cad2d39469a8f9da8b94ee5669e81ad40da2427b065d271aa0baec1510cac72dc8aceea655b2edfb720eff4887fa5e24c2565ebcc60e835ec3b08dfb1b3f13bf167c8ff1d95ed6c8d85bbae96eb5c389e12ba5087886b14ef7f3f8e2994c427e0b61077a8c945efa8dad33e1edbe7ebbd27f4d92c8cbcfc7956d44d4dbe71b0f816116ff90dfdd1dbc21ac8d26fe1f32f37de8a312fd1b7daf333e3d5f8deacbd853ecfb363d414a0bd9c9a357cdee899c10c72e9fa549cc700ef90776b9569cc73f4be99c14a1babdda99ff90ee2fe4bf64e1e045d19e8d8277bd573115fe1d1f525f9f801c80f03eb98e199378ace7d09fe168ef90cde3d833d7d4ef16dc62d8b29f3846b912983b5701e8ae51a8c15a80ab704369cd1e4024db6a08f03da773cb0d1f7c8d791271f8ad700cfe10cb99d758e8ef77a64417cb872bdb2d1b5bb10db14e2ec1aac60ab40bef28d85c14a874f589343e698cbe873853c204b9f4572467816b7da913d9653bf15de03e8a3e577c630ff68e0627f18cc1340782bb1ecaae6db0d655fe6984a9d8b6cfe9475361ab4b1180465cf47f4dc0bcd55cd7b7f29dd1de5649c9ae300e74d94d2d3b1cfed4cba0df31ede8fe9983de69daa0c284de984fb31e94ed78fdd693a3ed48972158a7d65645e45c9fd8ff2eceab421775c730ab1e0284ddebb26ef6c8ff9f8295acfbae7523df2e375cfd01b33f77f086c51e8ab930e29ac254f68e3bc8a68eeefc58d0a9f93eb83cbed85915a8b40535ab4ae7432fab87186d0ece09c19e152be58daf476a7e48e349e973b7392d4e9617ec26a32c4ffa0b04dd8311603d7f4eaaed5e476e03c625f5c953309c7fa6edce18514e8695d109e91dea975784ecdb9a4ed88ec5aa13d7027ed010df1a952f658957306ef2df223e7ca53d287784296e662ee17e0f9873d1d869c63b2e256655c1c2742f85c285e02af83988b04fe62c59ae85c5fe815cfa5904765d07834e7533620bef79aeb9471cda7e73a05bf05db82ed7c9bdef6a677d15c9ba9aa88ae383bb7df69c73199312366d2e9efcee381f9ec17c9dfd1f9d6413f896b8ce240e5654a282f060ed17bca11783198281c15dbae3d5be3dd850671dd2dd7f0a4405506aed6e4601f58586b12cb3432a701c57bf8d64a631a81ae0c9646c57c063cef0f89ebaaf27e61b0e04c38eb72314914af4ede575a2e891a983f837ba0308eaf3236b146ee41e0810ee73299fdcf2e892978b17e1f7978841dc7e0adad09ce114f5d2eaf81d997d0ad60efcc32bae3333eeb4007708436ec658962eeded84658b116c498c171f8b04f64b5bc0438e6ab1e559e7689b157e7d7112d64c88283ce3702ab9915c32cfdfcd433ae7ae0bfb11e78cd79af44bbd79cf76bcefb7b75e5e3be65213fbf4c0e4f5e9fded3fe1a128b1763fdbea717e34153509f8c743e8b199098bd75e85b5595beadf32d46437ea01df85e973bbe01ebbd39cf600558eb8deab9237d26cec993fb36ea291ef5e603cfa28c10b39c6f05b0170ac2997327ed337c4699ebfa313873480fa37dadfde978ab045ee037b0d3498cc60bf5682f8c257c705d692186ec575af7627da9626e092957f331ef3faa96bd1476ec175afb927a53c53d0072365f2e7ed0da7f1b7fe0097da9620dfbefed1d10f3ccc1e152be3bd2875410ff1a639da364dc0bdf8be281731de8057cab2ef0ad8dd6e436aaa2f91a73468e2c1b8ea97a9e8deab50eda48a54ee65244d795c0c3ad962715f9923f244eee69bec14b85fe83a4bf105c3fb6475939d7e89dd93df570ae6fe867d13c17e86e534dd6b6a637b675a56f5b4ceb2080b1300dd45759e9d9d1bac2ba9c8e2bf0d25af5a4b9c64b73817737293f6dd47b598ffab7a15c6b8b771c58af23ef57b827f3c164dc85e1257a8479babc7785b6b5d4e45b7c3f9a2f789ec64b30d7476b5689fd5feb4d100f2c5d6f827b357d785e44f49e8bd8619ee8c73ac5e99cc44a3859436ea62b513c03d83871ec5ce9ad045ef2717f2577027b20d7c39ef83ecea1708ce6e3525dccc13e3ac6a287eb0feb309f489577b6ca76b626db5b93f55d2f15e31a6afebc2ec4abd275de79745fd4ffb280ee5d69a32b2d5a1ba66b5d2fda53edb8df22b0551989fa749c15fcdeefa08f9d1c6bb31ade4aa6fe525a1f0bf589cff39513b92f588ffb54bd7d6e30bd429bfb0bd5e39d1cebd53f70f9f3f91effc0efcc4188f94a69996dc7f794e97dd1da10f9d1b82ebce30279a0291a94d3383fc1cfeb6d79c2b6714ccf728f73054af5963eb6c38a72a90b7310f3fb4a27bfe70e96c2ed0cb643f634dda940e758f46d1843a8a87714e74696ca99cf891364facdc3be33a56c5a9226a12f1af2f08163025d8cb90d731c1dd3437db733b11d4ec4e3e3b19f5347e21ee03b15d15559298035300ab752e593fd58471345a43499b2c78c3403368cd59edb637eef18d3c7e59816fb2fa5ed7eb16eb260dfb983268bb4e9c11800ecc7da6d72074b86f936306e60b0a20b734ab07da23539df9872af43491c0b2db12f3cd9bb5e93dabf56ab253ee0b9accd782e6b13cee583f0170af037487a2bc46a293877925cf74d4572053ea10b43bd1fd9b5a8ff0e38478667da39b18bf2bc04f3784d193808a72447973de5778bfb1ee5e096d0907774152e3018689b9fa96bb96b13e53d00198becfe6c6c5d4c9bf4714fd1b3fd79279e99593789cfa90cc6bd77213e46a6bd595ab788681eae292fad019d14c4baa73037a6ddd91a4dda37146ea5615e46d05de5fd3ef5ccccdc4a59fcd59569c702b6eeb9eff55a333da0d7a8a646381bdfe658ffcfa2abe3bc9d70ed55c6714caf35b378c07b454a97c58bf9684f9e958cbc2a43e1606d3e7807f2d195e2e192c9603f1a1fce1ff98746b4f8d41fa39a42ecf3237334095ca4f04c5807a237bf0dfdafa846b4222ec2c97db854ec76199df5537e09cfa9a36749b756331143afe09b7b463eb700fa811c811f6c55169d5d54b34a7ed60255b6d0df4dc75159584bb212f8fa16d83f2ac697027384728c97e64732bb4087ca1c33c65fc7d7d2a6375f273183be5e7ce4b2982a15e445814ed5cfe40b65ec8d48ae1f727b61b3bd580f88ceddce26f00b7dabdd8bf13aa2feef3b5b95eb73a11deb8ae8bcb76656935b698ae61a47bef1133580915c1397aad20134ea9a1ef8ce9d1de9d817d2bd0859faf93dea88777f0bbbbecc789b15b18ea367beab5f4178ce8afa2224aee92ab8aeee9dfa123a1734ce9bcdd451b274f2ca3acad1f9bee6d0665c73cda1fdd26b7fcda1fdee39b4735519b85db9455bbcb3353df72e4b8f2a19df702c7ebc56158902bc53577c189bcdaa6b88fd40f44193eb07f00c0b7dc67ac6793c35e1df61a48dc9b894ae68f0b3c14b8c96dd6383d419523d86de6b7b277b1f67f7068ec70c6c3aa0cb75e5bd6b79d2eadcf713eb0bec6e4765fb27e63f70ac767efce3d4fb00bfb4946cdf067cafd27134469a9374f69bf203217d995e6ba1c97d9256bf11cf85b4016c3f576bd28ea50c80de43e00b5ea81fd1d1dad0538395361adf0a2667faff4e3d3383576c3465c01a6ce757576e052ae300bd7766b5a5e0ec1ed79e44594c23d003da313d7109f604d8cea697dd170bf93b69cfe01bec99e703f058a72b6b2b83cdc1c44be6ebaf614e5f91ce57c65642eb0778d071bde2d373d6b527fc50c76700d7a4ae72cf696eee7ad57984ff4efb0ab2f3faf3cf44fe39ec6c0c364b1616cc2195b38464eed7f389a46ce493365c761e04e9273c4bc65790c385cf3f927119b622d051e9acb99ee24917f61b1dd5c01e633745f132a20e3607633c37e69697eb04736f510d0d5eeb54bc0d623ee9bc7b288cdb558b6112fad047e5b926e2606bc2f75ba1d6385c632ef2d349e839a5e37289781ecead246a9167618e41bcf65a603054545b1f62e218ace6e31cd8447c0fe5d0c6b9ad55b0584bfa73ff1dfa09a47c39a5cfdb2bf435351dde92f7ab92f1ed31cc778618d01cf255c5f984e1382ae67ca47d5fef88fb23febdc698cca5fdd3289ffb713946f7f9e57cd3cf69ec6758e757e08786f8a221367417c6945a9480780fad2b0307c8f0e37a0194178efb6550aadc59614cb18325d36b55e9d4057eef9b6cd59ac03c7fe239b8db25ecd0137b41f0dc51527e72bd4cf959409f060b6d1e40a3be11e6a7e37c9d70cf53e3b455a64569b245d86ab72bb02f100304e5cb03bd3a9419fc50e246ddd173fdb56abfa3126b7506c69b6b2ca4638c14985fb6df5a197a802137e6c04eb5b272e93dc7d7187b7ae44321e47a725dcbcbf8d47d15b01add8d1970734d1938babc077201e82d94c067ee335c332493c0196b05803f597c03f0e315eab721c2dea75a13c50dad76c73116e25a570614acd758cc8bcef2cef45c4695c57aba4f73b7c93986d7b7a1ddcf8c49bac9caed617a67c7988afb435faa96f79a2f7aad27fdca6b7fad27fde6f5a45e8a7f2a603e9fce6b52f223ac4bfbfa7b91f2b947b6e027e5aee7ecdda572beb2e7568cb197928badac7ac19cfcee102f6b01f53da073ac80deae7a0dda6a725bc303f66d624c610d21a9cb5306db817a05900b2a037bdccfbba8868d32bdd6c66468df6a0f08ff43ec9f48e6087381ae688ecaced3ef5de13a624a87b92c1ca6675c47fa5cef8ce9be3da61fedd7a7c75d77a4ee2afa3072cec31527ad022676413e483a2f3a4953c80f83edf3f2f344b64faa36399b5edf8bf75d546b519ae71e9dc18c7848261d16e63a5d63057939a419bc7a7caab62c7f7c404fcc3ab7a93528c0b2cc9639d73ca0df9107343398ba17f24755de27e2f3679eef13cfccd6052d5e5aa4e21ce7d644643f2b33f6ab39babc7754cf5dc19a2139cc033d37ee9bffbc737a1e64cb81231d26b3c6418b6205adf45832fcde754a93ade0d47545f3bb0cfe4001af3a95f39ff4038de1b97c2eaaa1cfd105613fc784beb0b7c01a826790fe21def22d4fda90b10b35c47589634a34d60163ddee8374b40fec2d5da4a75d0ac702bee34218165bc3d3c278a083b0f87278ca311d3d65f02e7b18f2aee7305fa9449cc085b11177d2e6707fdf30b71cea68e17820ee8b25ef511d69182783fe476993cc3183b18199c1370e96d241f197b40fb21a1d9de0d357bfe2bf875f11e2f09f294bf1bdd9f97c2b400367e751b2a26bf0a85e275b2768cdf58574b0788c1701ff4ee4089c27a3e5c1ff5a8a48a1dedc34fc3bc1bbcfc248c5eb7499b82ec4bbd1d84e812e96694b46325c788eea592ac7d034c5d9e17db5715c0ae3ece071400c006965f1d066f64cafb1c67160daf012f9b5b62137e689b57d3fcfca599b2bafbaf2aa2baffa0dbccab1bc966ff0ada95e683b666091a46c89dfc4b3804e1558e133217f6acda0ef16d5a66ecd29d0e1c721d658c2a716e57da4785aacff57c41ecbb7af3ea686f0ea6ff96c7f0bc4c13cd3af82efcdac1124f8d3b9b5147b6ca764fa631d8df769931dc03aecae0cff2673fdcee4d9a7f9e619b664b84e178945c1dafd93b127c853ed11e63d2fcf5936e8ce2675341c17e252fcb35c0e1ab22d613f49f09b0ae33f680cef7af7056ba2f1ba9dd14756da583295993ba979eece0ca8fdeb68be46750a4774eae90a7740f959f4da6006aee965f4616e269fa5f3ee4287fe87a3fcb66cbd21338f2d3c3fa1fc7a5cf6b3fc704dd41314ebb0a807f3738b516577a546bd03caf53090509e527cf69b4e96ff62253c933e5194f79496bf2fc9fce7c83f81e569d51c43821f95c92b4cd1bc5ca78da3bc6678b6c9fd857526c7ba98e69beddeba379ad7bb320de83240fdf60b6965a9cbd612f08ce39ef415f85e669ffaf87ee1f9f8fe32fb3c94239c83785d136715fba550af325ff3102687d54ce83a882f66dc877252dd0381a714e22e1ceb9c446ebdca388ee1596ef59ef9c56b7a06f659712d60f91cd44e48f7a3ec9cccfc73c83760fd9fc1ef123a28a99b16eba3c5febe6e9303fc8c5c27c43bf8fdd6c45818aa2cce34453c600c9bf7d8d915ea4e2ed5eb9ac06e93b14e0bfba1d0597ecab3edb84aef3851c71afa16744573bb32c963df5fd75bf4ec13b5c6780f06bee58dd7699be202b5b6279e9f61939e59df90fbce0cb97a12f390c0f71b116bfb3ae5b26466595c484a553a0b4d89ce063a8759e3cba849ea36114fd69a1ccc5d86bfa5f2d3b3ec4e0bfccebb9b77d65f543a0b97cd4d276574769e7a42d72bcc59279f959bbf9e3757d29f58454ebc11f47897d4af4af789c098a774322e148f07e3ac26f67885f47ca0ef37a2fd4fd54da0e724e3a1acae0c967ad80fe04cff4449fef4dd75fe9c39a675f493b50fb19ef54cd0dc6879a47b97ad3b0a317b23dc04e4af4a8d2bbb1e0961d0f509bc56d1351622d85b06f1a763df3cea61eff8469a6f9daf4b9c901ddfda5688f1214ef091f0ba323226c42b563d29d4c9a1df420de3e24d2e7c6f061e5ad51a93101fe343e229709c25eb5547f8daf258b1080f963617088319fa3e2156447d21b4c3bae8f7f63cc9e653b15c837a8d13612567c75ea6965c9f6b8ab0d6a0ceb0df9ac8ff958329dfa10d2043a6f45a95fd2df87fca0ec8bb0fd512b2a29f932784e7d4a0745e0a8ee919ef6b8c157d9e4e4bdc7f862f2fa299cbe4869cc21429d6214704c68bf09cc678391b4b1c62a71be13ef0c9186a410db56f06715da32ed7971a945b3d5b655abb501e401d1bf7aa34810daf88de24e9eb89f600c699dabd8df0dcda18ec60096bb1792930629902de09f4c399a67028ef9d7f06fa2ed0d13624e629e00716d08115a122e6e9a93dbae6a27f442e7ad55e581106c0c225f06f39da5c70b0fe11626cf2502fdcc01affb67420f3d3a33d69cf57103b1ef26cc10ee92edccb2ab5ffd79ce2ac6baed8825f7aedafd882df1d5b30ee7b7c2e9e5f713f6088cda50d495978769c371b07f1ebe97d79b9efe45a975ca7cbc4814fef4186cf31d4dd8e75457b9065df14e5b8c0eb8f308b024d165d5dd120ce00d4fd8e709eaaf6a1c99a6775bbdc043629d01d312d2a537bd99b3dee7aed5d203e3deefe7e126e7b4fdcfdcbd373fdefa78ed16b52756568efe443ff5651f6466fd6675e5bb4d17bc29f473d5a3cb8967c10186538f75f86d4ae37a582d7a17bffd2b497bd917bdf7357bbeec8b55e24f4ffc9a1d3c0d72d7badd51e7cf7f7530bbd4bd905f2e171fddaa2fc1765b77c69dafbd7f03b89f2d1ffe99fbd05e577e1b89e0fe2c8bc5594ddbed7deed7bd3f9fae589337a43f02c30be8e85efb9efd1ab5d4f2afbdc3e03ef193d87ef81cf900fcf8182e7f1f7536ff7329c2fe5c5de7809688b78c61df9bcb7207d963b47fa7357ee6c81fd09f1634ee668a569896b129861e5fc9c7cea7b8c1ba42bbdc8b6e9b05974cb11f8643b60cf87f18315b05f60ff25dcef23accbd078d7d1d88e63a0bea98ed5e47c83dfd38046a15f07f94f8e6d0a3e5e93aab1cce2f5fd105be58acbfd957489abee7cd59d2fb0f6ffa1baf35c975b0bd36b65e7a15febba8b70c87d55b60255a6be5e1df7efb51d8ee4e3657cc7c47a17c7779e439a2e1bd7033a8bc93bbe1ae296c5d898d0bf6a79eec1925b2b9837047b94137dd38ee2c38d40688b5b431edbaa22c2dc231cdb3bf6a515eb36f3bc795cf5980ab4fc9fa9c75c65e8e7c9d099fa3e3c16e2fecfc7f03eb3c6db217968513db79a8ddd9dcb8bd545c7d76415c6d0424c4923e022bd5cc3b84d91ad59b5c6277aee39bd8eebaed5b6b6a6b702f271a6f32e05782fac073f15bb8cfa01705cba1fc03be29689bc1060c7c77d07b874df01209b76a1ce65b4e7b6c94abbb80f28ac61a80b7c2867e9286ea9cbfb95a5803589d7bfe03d15e38d456b7a957b57b977b5df3f4e0e5eedf76fae7b5cedf7abfdfe5dec77c7e29fd71ac2453f51cf09afb5075918ea15e31cda905b198ce5ab4c6b25f0b03752959c7e9c47d39a995ee310f6b455bd066d7803c784fd372e181b5144178dd13a54f51590bd9f3ea6f7c9a7614f5e713faed8e75f7aedafd8e7df1dfb9cb07173d6bb84ad899f45fb867b2c037b59e33c558777ac0fff84360dbf7fd3b2ecd4e663bece5c751ecd48ce9cb07b43bf4bc15e148c07f099ecb926e65cd0ef09e6c967c98d409369c72c384327ce0271ff39b83e69f97899bc27a2efc83af6d594cb978ff39fb2ee2d837341c64152b54910277db01578676b05e95e6fee01e157c4bea5f37bb9d1912e55a23efd1df5cfc5783dd1595cb8b96731db7e79bf0f248fb793675b553a81aaa4eb4449de43f4632d389fefd28f9a157bbf927274f1c96b5ed2f7f185d6be9c9e54710fa05ccd8d2d7cd4da17fb40bed09a17eb4715d7da5244d7cca7f3127c0cef99ec6e327c2efbac6b4fd9ea476b8d7c742be339cf4797af6f569c4734c6137b409b0cac8ffb5abd753d716b28dcd6f060cdd6754fabede9cc60e89dc1d461dde597f3bf31526079eeecf3f500c01f345fcdc6d1fc6abcf1a0291d46977330f1cee08f262bee309641a0328d8d816af6f363741f144b8078fc0aeccdb081f803dfc42f5169dc95f726ee7f68019ec737ceeecf9ff7ac2f67d32d2440e317ebab05e57ff99e9d12947bcfe24a55c4234c805c8c0ad4c368ab41dc54298863f890361c951d1c10ae849dc22a4860e1c09eb9262b6e55c67510de59676bf01563fb2c58bfa3be0f17b2d7883c93ea7411d9c959584e3adf08ac66d817f93cbca6e4337e6b2fa7ab3ffdea4fffd26b7ff5a77f737ffa02ca86b52e0f3e7bbd0383d9e3de3b5f7fcd4dafb1d2709df285f80c5947bc36db1ddff2dc95265b9f9e6f96c4cea4619f6e5ddebbdaf7b06512f5b65d05f6fff40d5e5a9cdbd3f5b3f3784d4fda5bb21b64f5589003f03ba6bd76ef52bd0788b377220e01dfcd25b15b5a1d57f3a44093ebb39275d89cd026ef8179c128ee009eaff46c64b7e33c56dc13057c5731f640ccab4cdd750aafbce81c14e74af7c96bcbe11213583601e7086d586f02b1a908bd9e1c83adf3d28aec7f8b6c929dadcafb2dc491615c4a6f66e8ff47f935ad8dd66c6ccd291763a1f1631233917c6fc59ce07cbef64139c185ba7ed23e2379c3a57ac5c6fba8350bd70df39212b9eaf974f321b9ceda42daa82cde3f85734d847f999163f6b172281ec7ed1aec398a59e6f48df962fa41e5b1370b7d38956584918d4155b8b797c90dd468c31371cfc97cda39ce138cef3303aeaf291d98d307e65719db917fb689f5b713eb8fb0839db8e7640a238ee44f58f6e84a0ff3566e66f0adc331f6e1091c905c5a384326318db5c937361003ff14e644e2da92f59368ec8077917efd30cf71a6cab7b6ea8d6d88b3d3c4787ba807e34a93691762ee36cfc451668838cc07f5e9c1e7a20c3edd1339ffaa986e184393988f7510788736e4d6a6ab745c551e38aab777051ee2cabd5736907b95d9e3bfcc1c51cff4f273ec0fb999aa0c5c8d690493b8a6698a704291de60299d9dc18a2e91c34b8ef5dbc8c46bfdcfb5fee74baffdb5fee7bbd7ff64635e973e7b212e734eec4d1101cf3de87267a50d6968175feb8cd2ff4efb6d4c96db1a0bd107b2bbab405fe9d7cb79f89a7883593a4a06ee60521667f4e78be8fc22f6ca82c8d338d5b322ca9128a34b1fe5d84e0d56a204beb581f9b7bccbe8f28056e59d1de5a80c2fd65b023fef6374683db7f76bba8f3289cf5c417796ebbea948aec0877d5f341fe118634cfeb8b716c44b2ecc852faf4b96f71bcd111674563e570e2d84f3a867ebc6ad8dd644fd4a0c0fda4f519f548c051dee49bddbe4206e27ea5715e29c877b590593ff1ac7feea3ea46b1cfb1ac7bec0daff87c6b1c5830963360dca60c4adf1c9be6bd8b3816fcc0c66f71d62a68975baccfa47fd0bceb46788fb3f5fc73dafbe8bdcf393f1c168bdcbc44b3ba91e648eea3568ab19f77fc0ef857e6aad09e3a9604f818ee90afc33a16356d42589397d4c2dfab5af8689f20b0355ae2f7e43bddad65cf4d7a6d7da7c93fc8e9dc176a8aed281fd722f154f3bcf764caddd89330fc62db4c27197a9d9b4969ad201f6c1cee4f7becab4a6063f0e7b07817f904e8712c7884d0eae8bd0c6cf873d0dada52e8bcba8b76168bff2616f2da92a36456aed3facb75990e91bc9ee6d16e4f8a67278427d8e7ae2473de0d0fb50ff60b4867c9d36e48e6b4e391ff05aa10df7d90ef7f9948da5a3fef07936efda92f794ae702b2dd43bb2fd656b68df2ab8efe7d363961de51a5e395b7c00785df9dc868ee10d609f6a0d619cb802e491df728d28302613f1b9526b258133b410d13cdfb366ed01e0e907c4df39280faac88a4cff42668fc648064ca567b19fd72b4f1a0ffab837dda5f85fb68e97c1fb225f4729df195e5f405f615e585b0a4cbe01e433d99333f4dd5da88f6f3c9f33faa643ff8de9895bc3abbb38de7f6a5d3a59f794cc77a054d95d994154e3e103fab33c778ef08da39cb1ac71558ccb67d6715d7d8be57d8b8126d35b8b1fafe37aa922bdb74cfe6883d2867484ad10e6355c7d6d19d75c7d6d5f7aedafbeb6efee6b4bc74581ad5c88bd72ada5cfab714dc6e9718fb6ff307ca6336b184ac9d8631d6c88efb387a99a6b4deedb31ee5256ccaf28f70f5e4fc4f042997da48f9d9f2f99af0754c7435f84fa22ed1b0b0de8565b73313f19130fb13587729d01fa94c11ef7eacacb35351929eca741d48ed33ec29d92368016b5186333d014f04f0cf3515d81a71dc36b2dc03ee9e4fb797763b203c7f044603f1c61ab9f8f5f953fc74bf54e26d67e9d9fa3f491783e197bf10de419b9375dd905fb75a9bcacdf8c4577bc1f17cb7dc978f6a99cf2c4397f46eb5cb2e7c14197eb0b831fdb86dcdaa09ee41c49ef36a4f70be5c064d1c3c7c42fd23573315d24734612f666f9dc1157dae84a8b067223517397c8a7ae53aaec6e605e075f98af573a26a12ae24153faebb2f6781f5d6f9f6b978fd8ce4295eb51ef4755ded9780ce93eefa8af13ecdd1aaf8d91e8fd2edde2da8414dfe7c6b0e72b4f3b932137d5869c935787987a276d32128c15a1fcadd601ca2ee8df137fa19c9ec8df82ea4bda1a6df075d7f45a535ddefb567b6e9b8c086c331c8b6a6c8d6bbeced58770f5215c7d08571fc2d587f09fe74348d50cd2447e783ef6c815cb3b4fdfa5c93e15eb649de817c3dbfccdf819fa514d31a401a8d365604564eaac17b2bf92b8da72a2fef544bd74f25ee1b9a076b600bf20f6c1c4f76bca20ea17a7c2fc93d4bba01efc6c6b8ccb68f22d89154ed8939c7f86afa580271cd96617c29e930e256b653bc4d8c23c3c09ec69d5ba5909e506807383fbd79cc245473456da2eb8e29f5ff1cfbff6da5ff1cfbf39feb9e94907a05f988c3b35f8f1da443974d79ad2a37f556b4aa1dd53ff4fd3d9ceec5dbc351683c0607699bd454ec4ae9e0ca64e995e6375764f95649edad260cd340eef018cc5643418c752610e6e1fca7ce8a76c77b646bb571d23a560cedfbc5f5c5aff8b6a8de1dee463f37f542c2ca99f2b51ac665d68577d211f4dda2e8c6d23fa145e7f418cecdd7d288fe449f1380717c3ed3eb91e25794657ee383026d04ad3c407f00df9d6d6e5fa5c57345f6b4b8ed144311f388ef7d957c9f3f541984bffa6399df11e1ce166c6734fdaec11ef4ec5c9b8a1266baee9491b3527773e3787c2933c0dec9f27baa887d7732c5b9ac998e17beb94b2c650590f608e7aab5dedd78c6baef6eb975efbabfdfacded5775314ff8c8af766bfadf29bae9d4d3feea2f165fba625efd27615e3112057d275e2bdb66baee7161af32ab09e3c45fb11730c4c58bedc06b5c38f1ef647f2ea0d39df057fc9bfa144fc581633b09f5f1b8109e1cd063437bba3886eb1218ffadc47da5304108dbee10d7fa13cf69f7e2bad8a45de898ded806f3837e7ca67a4fe7f84c7e505cf69adbf8a5fc8897cd6dbce6d5fdbebc3aa0bfe5d3f9558ee6e24525e39db00fce97d395a693e1358fee3dfb9cf60bfca7e94ce7e93c3936e2a9bacb847dce0d817d5eba76f0c8efddd868a8f6626db01d17f53895a2fea8e4f90deb31507fa3a847098c0da843ceb3e43ac6b8e0024dde3b16ef32646d48ac4755c452cbe6211f1273b9f62bb8f62bf8d26b7fed57f0ddfb15e0ba02dc87f07363743047eadbf40ae55b81d59ea35acaef50937c1efe424af72c934b11f71eeac7be898c3ceb52fe90673447e920f0ced68afa49c67a42baa715990b827b2ebab86e348aed57edf575ac3f7e084ec0b5efd157e2ab573de2aa475c60edff43f5886b9cf61aa7bdee71a93dfe4a71da77e7005fac7f13b92627e26d40bfebc36b6589d214c196bcd6ca2a89eb95ead18df44bbe15a832ed5abc1484359316e3ae8c26c417f17479bf42f854b7b6ba984758ca2ab3dfc2fce136d0a525f01dd6798f7a629ec0004bccff437c49165ea3f3fc8d787ee7601f2da27b2f92fb9d398f63bb4456e53d5db28f3daaa1e59d405520ae7a20b4433f6e8853a3f906bf3f74e5089b7847d21fea4100f3a8569a3288e92a99976e9371fc8ab15a26733e05bee768cd726903e1b487b8682623cd2ca5e3031bd7e4f74eda1e29618f163eeb6f244bfeab7653f3f55f93c5baf6f07fb5b7b95d7ba8d56e6aa2ee4dc05ffffc7353b3a76b6763fc692ebd1fd6d29c4f7efd58ae4cdd9d4fd70f3f5e87cdc7ee8fd52ff3c7663d7557f0bf3ffc8de14e57ce0f65d81da16bff65fc5aee56935fffb2a62bdfd5833ff72b17bc6fbaf87b09fe6f4dd6fad45d813f17e8cdf9b7ddd456d3c3a4f640d71bf78d9b9ab7b426b5875bf60efef9d77a0a6f6728baf12f9afe17531fd1f443bdf1c0d6ffa41a770dea275ba7ffa0e8078aaaddd4a6abbface9afdac3dfbabb9adcd456011cc1d3645b7bb8bbfdf993b9a9098b65eda141dddedd52773735d19d2ee6b507faa6d6836f655986babda98da756ed81a628eaa6c6c77f2a7ffde5eb16557ba06e6a030b3c93baa90dc9a173ee1c4de5966adc818f4b73beaa3db0cc4ded713df5c0588613135cfeb34137eacc5de3a626aec037f59f77b7d44fba51ffe7a6d64b5d7a7bf7b351ff590f2f0d27fdcf4dad99f5508609afbcbbbd6b34ee987b70a9f2d75f9bc56635b16a0fff4ddd5037d4fffc0348c199fc822b0416adf6c3597a931f2b7733d757d3f9bffe661a3f2c7dadfff835b11c7dfdc39eae7f381b234d33a749a67653133c7ff96bfda6af9d0439e25f9f9626fa7aa4ffb2276bf4f760b9c47ff5f4b5e9d41e161bd7bda90dd7ba3b8976187e1a4cf4d57281aee597ada93b598557a3f7461f9f267ef4f768b25aa7ae065fa5eee82dad0d78dfffd5f0e0f30f0f1ce974517b58ffda4c6edeb5a67022bda575fea6d8cb3fbda5059f234d7eada6707de83f691672001fce25640f8553c23bf52ec6f0cf4d0d8cb9f6507b7b6adc1af2ceb63c293019776bcca8696f78bb13a69c6b78e216364f385053491af0dd913d7d3bdcbebcb59d83f1e41facb6bbd21471a9c91225b49db5c1d70faf0bf01b35d5db03ca7c5a6ebbacc55a419ded05f5ade999dbde685e7f1d36d431b5dbe28605b061be602f6da1adb9e64204067143983d6f7a4de1456872b786bcdf988793cfbcd5db83b501ef7924eef3b710c08c1c13231e4cafb7313cf76035eb0b83559121cb8a3355de6de1fcc17878e95665f6b406835ed2c192f7c00808801098f0d2e16dd841cf6e0a7f000103fee1b5a134e8a46b51da905babca60a63f51d36e80ae139a8ff770ac4fb791b079e31d5795fb7f90c2eead8d04fc9b4d28114ffb5b93d9dd61a5606d30aa6d32400913a9b721520035b93e57e53af53a0be7eea3822569b55786c236f9bcdd162b9ba9778bd444de87800f0d61317027edfe5665c58330bb7d796b3eafbb43aeaf299db5ae0c0e022f3926038b82b680960cbe859a4636a975d6f855a6b19b0ce9ad36e50e9abc7755b6df10a68399c9f6a6ddc32da948de77593416e239f75d26b55e4ffba9c10cea022fae5445047bf3d3e01b603f31b8acbd7d99ba0d3076f2d993b6b87af560a39a7a171afedc4a850acd3df1ecdd56f51af3c908dffbb4db12fb77df65537b8eae7b899ebf889f2bf0b463f1e232a29d277fa62a03c7e01b0ba1bdb3310d82f559197cd4b420a29b53e37d6b36107df01254442cbcafa768337c6f6878846bfdc6db01b1a661e11bb9ee683f156e67b4e7ebf8bdd221da47b05e4f42fef8c0bb62ba0e7419350c82fb36a2a621cd85fb16d3693d72780385d8905b81c6b89bd759cb35462b60e4cc11ff5ada3d595abf06dcd460c11911ee80520b8c1b9369ac74b96fabdede519995fd773fa2b18dc94a44b225f713ec9de959be31a52983858d5b36227aee0e1a81727df13a7ddc6b32f553e03b5b1328dfb3256c7c644cb9b9c10e203873d6bbe2f73cfe213497779ae70626db5fab8ce31b7c7f2534eb074b8e8bf784a75bfb65e67bbad239584d7aa6f3ee4acb1c23e71a43ae11ad590c92baec0d77b6fe24ac04de3e749bdc526c82cf63f09901eba9798d8dd5a43d55a67da33dbf13daa2632c7a40d90d745925df3505733318eaf87dbc7d209e75d015df056bd49b3dba429bcad8d3fbad008ca4296c301c2634c4eb39a5579aac51af1024131827e2d6008626df59a9b2f88bdc8baebc77b5459fdca7b5aa7416ba7cbb3678c9b39e9676af794b6b3245eec5b61b70735d51373000d6e4127b69788d8d96a62d3ef1ece33568d651f35b60b465cdb92d860d4e6cfda9171978e93513536b46accfb21784460be7011ae92aa23ff1c677c2d333d56b8e89f9c1b9c5ef090d625edb1a8bfeda64dc3b6db4b47ba3deae93d847b027a97b4becabc6bb4cfade8c31ee93638c8d30b3b983cfe82e90f38d3ce75d65b035d11e52e8cc65d1e3e3a6e749ebc4bac1f9ee7dc31baf755ef235c6a1b2d6178ebdc2399b3433cf59444baa4c81b9c73c88a75d8d776963c81d0c66ef6b4d6e617a926bcc8ed6f5b6d71cff14da1c7420189e89e6c524e795a237c71872bb045f9c3eee52b44eac493d4c7a0663cc38431dc85311482ded1bde0018f87742930a0a9e899257019df0ee01f0fbc96869eb32fcdeedca9d95c124cf2c186317f36fd56bcd74c60a0c56da2050adfd169c4155defb2a234d8db6e4be16af67784d3c1fa513eef7ae3b43738ae929f51b49ffedc70d0a74d4a7a6d7f8a5c9b7702f01cfd1d8ced692eb08088d6f04af531808de1a9eb8d465cd3398db240f91a5b9ae80bd0b79d7c031bdf5163721fb29b4a1aeb5d6786966b01d14d402f7017e33a429bd0dde672dc9bd87e70302ccc3fd63906319e8a6b463f0eec2807208ee1da0579296d616dfd861da487caf7a0dcae21beb22bae97aee0636e96ceeecae272e0d063684cf927ff19ef0ad997e48f1d0e6ed3ef58e8d25d71d93157d8da9bb5ab3f0998126f7c1ef8ecaac17a6d7a00d0f8209ae0c16c87ace37bc35c98fa19e0ce832ba06ed013a7fd304eff60dd86cbf6f77a1332d8b7fcd93bcb259c7ce2b82afb283bac18fef04dea520fd1ea2b334d76411ec3d742abd4e391a9c2d13269b67f3c49017c24492631e5c87bc02bf57f35a6b5dded75fa7dc4195eb87ae22baa6e77aafd11c2c5797ad259085aad758694fab84733ef70c221de6277402229a6775dea512b231086535384f923b794afc1684ef853258b1137bafcbf503a0e19897d1be9621a75e9ff2f4883a0464d7da1dc7626e893d3b9a6fb47ed09e05fc09eae3ee2ce7b95383b573cf9821bb738ddf039ec3eaf280d2c1fc52f2a7bb106975215248ee46ebb7d6e5c1068e8def00dbaec21e22fbe875ca6d802dadcabbe85e8b09e5dbf16f680d57f6ebd318aca17d2cbbc03ed03b5516a9ae3270540fd8832bdb62dcb9c5db406eef10ad8139ec1db32d8231001a59a90ab0ebfa27e7905817082cd99a011ea5a2e45a0aee794aee615d2e97f7a235b4024d999fe6434196cc7e8c75bfb4cc9d49299911e920f4397a3f7a4fdefbb8ec77f1295b86af6f93bc820bd78fd49be37d192d11dfe35b3b18988aef5be943a41b01db03f3ac350c988e96b6c9b66808ac49ec990aaecf93571e4c6e4eaeefd36e8b6c62cd313d17d214b4351f9765ed65c02f57aad289401f223bf391b02363fb12ac1fa5327643f01a07956981e7e3c009b73698819b61d7de876304fa43576e78404787f6f81335ed4eb10f259a4b3c5ef07d157b1bd2aff218dbdb842da0327bc7647b0dc183fc77274c395f7ba2a61316f10f14fca0a79aac6d4d6fbc247c07c8966cadf6cab0f1a8cbfd5527b85dbc28d494f4a194f07ddc77d9683ca7fd0bcde7757784d65f67a43a6e26d410bc810be7e2c5c941477b4280a2992ce7aa81009b82bf0d3b8f3860bfc57412ed71e577c481a13ae96b49149b92df934152bc6e784cc00e9fa94a7fd947203d80fe579da0b7e83e733011e4058c778a7d5fb9638e82a76b7581132d9b318dbcb8eb475d1e58026ce4306e0873ced79ac7eb5048ebf1ba123e1d688fcd0cbe75300fd474c2ecb7e05adc786a994d27e2d66ccfd3fec647084a4cf8eb30cdcf5479bf22692a9e33ede8cc789df633257c9b8c4be9517098db803d781b76024b06ba586f4a9ec568afda9dadd95a3fe23363bf0d1f17c8ef6759c234e9cbc3f3710c7eb74ed371699f563c575f9b7294a6c0f5087954d25793f239229b38f2a9b986e7c0a64f21585c624d900f8e7a23409834b9be54e5fa2c2c2e7f6b3696e2d36d32a9a2600e99eb97f07581b3d3986b236aaacbf599d196e65a86df18cc23e19365f17acc8ed6c831dbdc6a32a4635ea8f4483a0ad72d8801a5a403c19f7dc31357963c70937b89cf94ac025dfa00e7e335a8173e3cef449314a5e7a7f7417feaff3126126dcdc3d27ee3e736967b0dc1cbd5a1a66f732873efbbccfc8ff4fa873c52975592ee9cee90b2437d4a6887fa9485927a7929d0868feb2ee1638ed63747ce60790a9fab01fa6f73a839d1949b6bb2e658f21e357b51605cc5319ad1f3cbc8d9240de3752f2bd74ad053246352e721edb7f7ffcef23767c50f48fe98e45de9b31ef9960db9f50bdad469bf764cbbd08e0893bf223eb6e8d006b07d03218b8e6181b44c453cf6637951455ae9338e0bf450838571bbe45e4aeb47bc578bb4eedfa1293b6a70c53780fde61b5e6b25b4c4feebd3e3ae3b1a1f60c34068bfc26412754c114941bcb635a7dcdcf45a2c6a3e04134b7c43e11c95eddb168ffcfee01dc3d6401cc5f40a695618526ba1c5f92ab306744e9b88d6819c8067a83ba4fe284b9f316d369231b221772f44fc43a4d5587e6ed33112b0fe91de33e4fa56943455474577f07995ce5c0ccec7247416a31f9d0f0bca43b0177f37b9ccb35ae2de5066e78cab5856e3f52d259fbbc1ed86a0f97bfda9578ab6c96774daf1590bf988b99036303929431e685e23e8ca92a33276d6d92c3aeb59726a9b21e33c8315d69adc9ae94f648cab7791181cb20573f9238e2584ba8e98886986fa97c172f5b4ddd2870979c7eb756afdbbd378dd49daaf26e3850d21cfe11cba729d36e48e6b4eb378f609bb8419f8d6ec22f15738169257a3066ee201819a5856c1795a6bca606930fd058eabbfebbda41d923adf47d7a2a6839695b657ac58076e74189c3c090b812d2ba293a73d8cc544f625f21d9fa7f35f82869ef6d85ff148d2269588b9a37c8820652f50da997a2f391e74dee88d25d353d8e4f028ff60307fcf7b4f3c0f7c0e529f612e43c46f9b0db43e9575c363fbd06c777c8385898a0d61f6bc0367329bffdc6f53fc286fff2ad1fb491e50da87038b298d1cfbafd161a00c5b28123515787aabc11c1648e76b6321ad554f0a88f3909b7ba0cbf5a5a6c082ca7957ae6f0552dff45ad04eb1f846f03a5bfeaf7c52eed2967c6815f193b47c2e3f366510e832bd86a051049d5b28c70aeec94b73e01b9e03743308226d78f7ab4ef0b8e836cdc50b61dfbdb51fd3bce178cd62be8f631d295d7c91f05139da62e09a538732bdd6c664e09e2e4feedd70b7109ae6aa13987e37357698dc2fd3aed69c4f493dd8bc4c4e0ea2cd77eb5199cf758c0c3f63e80b8ded8b81637a960bce1dc17b7f69ca7cd9618efc468bee3347a94a67a1297d9fd4b7327407f2fd55eda94bd92315d7ab11fb7e1571469cdb1d31b7e46fc897ba5365c28f1ac65d6675b298e2eeadd938987c6b7324ff905fef0f720ee07375fde936c98370ec2e8c7f97d5c93e88cec9f50d93ee23fa319bb19f302c4420d7c96439c7207c89c0ee37d9fef4cd45bef3d7d96e0baf39e61b94a638d4db949803f85cd93ffd78319d5b95a948e669bce4a98ab422f570722d327e077b07e988a04960971dc03583f0faa7e57d97857479b4e7301efc744bce057c2ea3676f095d61778e5e40f867606e469e5e905aa3834ae4b4a66921f57b79da8ee9a52a7da333e6b91b942b91190340e72fe2edb85827e629e93d4c9f89af390f6fe06a5e8b36da7d329694e47f19d7a479dd4b3eaffbedb47d34d651e658136328e20b89b8d5b1ffe6c82f55c5bf74a4d3b05ca0cb8d405706f5b46d97f615aa5e0bc860949f867d70295da3347f87408dd9f212fd56ec47a862d3af54b9e31a99fed777f070bbb43d80c00c2239dba18d29ed93b9d347b22af421b543bda032af4de80d27e55a659e7c34c74807159e283bb2ef9b09db9edce308c894dc135daeef2ca56fa3b83e3555a13f783d35587b4adc0b3f97f4f35c40fe9cd84f6fefa89eb42ae0d3113f3ae23dd9b512e1d9cc9a23dab3d9329b5fbd8fb757f50311348df316e235588a4ff5a8b90f1187baf8983456f2351ed8bbc02e3bf60510f502d49b2bd2804642301ca3c92d2cd99dc398e568b7d59ffa97f39316f9bb0af23bc2311ccba8fa1b3a3303dff2c6277453d713da03d784be00d22fd19fbe2d7ac7f1d0a78f9c3b6c047c301968179edea31c99da277d9f4f39f47fcaf6f74afb4b439ef161741b8215e98a06ecf52d61d343ff1131b62db1ef70fd92be32e1f81cc676db89f109ff7b6eae51c4efa7efabef79c9f0bfa6e456f65ecef15a06c5394f27f9fa7459c4c7aaf0e977d3489e3e7486fc2f9275b846ee7111e6b27602cec7805dbe153551ae23fa941b1b1c1f758436d2ed6161fd9443fb12e6e8f12e65065c187b83313f557637f0b97caad89f6f6db4e6e3d260b910146d3519ce6d75889f592d3619e6411fd38dd2f171be61180b9c197c03f09108344588f84db6ffb42b3782ae02e85ebd7b9d2eb7a91c2ca3cfbbf33759a4cd058cf52e5f868d476c8fae757960c99046facb1789f49da278f7b8ddd95a9e3b473167a4ebe9ca80c6b5338c2e3fdb3077113c0f0132d91070a4edba56933b58c0ce633b308733b4018a7d77d206d0942e5b1b4dce8aab9072a3beb59af61c036b1c62508cf9f40de68203beee2e0c4f9a67e495846721de8351ae7e84f76ff0b3d326c737c8d2fbe3f86633599f79b4afa99c1a75c82d4d4ff2de86c26c4271bed6a68ef399ce8b17e21c707a6af08d991e1ce723a9a3b2b59d645e11b4b38e623ed9fbe4a4fc6444ae406c5ba7f38ccaf914ceccdb8ac041d2fe45250421b9cf7d477ede14baf76528fc2153f537a1c571e3794b1c4883d678cac9fdf15e1a0cb9f650d25a2397caccfbcad093d331f4649e18a66d22767f3acfab794c8f3963e6c6b4d81950f5d6a09531de12fa7c453f62b1bf37df8621e8bcbc1d938cc7a6d6fcb4ffa5489e96950d5b83f0931acc8ef03925f31f4bcad5ed89daea32635ae9848e65f073624c7bff8c31adf4d145f40f87d87fa774cc1d01d19c9127f17c117b0383fc65fac253bfa5e7752ac6b444404cf759f938339d6f6c4d669ce661789dada506f3d1229e1018726ba52bbedb55c49d2a8bee4b737e247f4ad7fd27f915abf3d22647966d2dde71cd85e5678cf5f4f93ddedb044f34d8c152533aacae886e5ae6619a591a4ce3a08d12fcd4b9b84f063540314c76006ca743578120f5cb3eef049aacc2fc77a07f95d00fc358652256ad3352fda569b921b86d57ee40b0e44eb047be1d04e8b656658dd21421f9de2119074ee8f5a806f5f8bc9379db1b83ed2f3bed30e63acfcc4b579501657aeed44ae4c861fb6c16d785c2f37008f7a6458171ab0b894aed4f468e70be4f4b65d4237f23d4b732759ed23c84389b0ed0b9dd1cfa86b44fea42a6076bdeeeb4210dc634d386f6b1de53deaf9f58138b715ce3589780bafc08f21a0eec97ad2e3a5b9d913647182379e39e0e22baabc613123a704cbbb16fd237bcd51ad573e69fe3ec79ed8bcf78b38c8f009e83b40e4bf08706a5f35260316e824710bced98cf92faf4bbe3cd09ff073c8f607d27ed235b32631cfb78ed8eeb2cf2f3acb3705e72d6ef741e8a9095039a9607f7c76b5d37064a2740f5c5f5add0c47923011735ef9a0c396083e23a79cc7f621d354bae64ee599e7c0fd7808873cdc1bb4d5e9a0bb0c15a64b7d856bbe3201ca8d62a3a53a57cf5893a8baa3931a76b3e087d39f695443c32793fc9e7a12f3a31b6fb2e93e1fbbc640d5c191b01e83bb9b99890475f3effbfd43e8a949693ef60b283f9a5fd6325e983ace3ce8f6d2f802ee2c0da022363fdb06f5f219e75774e5ecf85e2fbe939ba644e98265384ad22adcf5877d728b6554ad5ff6099975b3718ea16678c0fd07ce1592a57c3e16c75597473fcb9803ffa2a333ea3e6f502f1684ff4a346eb79e35322c0fadf95ff15f3d3621e0bf6eb636b87cbd5eccc93f539cf641ec594cc85d713be39699dacf79576a9cfd3742c02d03ecaff8f6c9652756939b527510ca3ba5d91ad2f66db92c2e6c88ec66b4ebea3543d4b33a93b54a14d441b518e6ad1593a45a747eb76ccf7d72b036230d2709f5e9a6e963f3b3bb635bdcdf39be59eab701ea846543ae8bce45a4fb71701f9dd7bee8f95e94c3cbd18b9175f13c2f4226c5b84d2cbd0b73f6fef6fe9facf14582f43fd8ba2ff45d74734f550bf7b60d93f19e6eef627f5f38e3902eb4570a9f958bd75e6e77d3dc2ea6542ac5efaeebec19e81d51b62f36642f5dee720f53211fc2e4bd114dda8d38d0ca4de0675cfd06050e8d268ca25a07aebf78dc61d7b7ff7a150bd6920de32c0af9e3e5d6442f4660cc15efe30a60bf22118c4f7ece162e8dfff2e1aeaff44a0c088929298c02bf0e9ff59137fb2b0260b3378f87fbf360b48a70458f07fd7fcb93db1feb497e06999a0c1ff5d0beffb9f2b76f059d8c104bf890081d1425d9095a19ffe32f5b5ee2eedbfd0977fee57560974f2acbb42ae774fdd5327c0c9997fd1f488be7b60ef1feaec9ff734cb3418e69e3d0b9c9cfe793970723cf41c8e47df51193c8fa953f777b72177baff49533f6f69e63e83e7dd513fef7fb211cf8ba65d86e7d501cfbba33e039e9c20be5c34f2e8f72b1ef9f7e329f907fffde8e3af0b71a6f3d25a1d4628dfb78508e1b3c75d6fd85047e3fd48651cd7909fa7e928cd84a757c6a277678cca23851bb244a94a3896fb7d77f698ff5c74cf5a655a942aefb7dae10c447252330f11d7b1c5d955b8007af0879da5d51eec5ea7f75b95150335a86f7445a4ba9eb5b5a6b06d05462dcf1e6f64f93cc3f6c2cf2192c8dbb0b3b7e4d64a97355f93fb47f7597c2bd018891ac1cc25147d7bef58d274d19d3dae0d19a2ce530653777ba1e50c2c93839f684197b4567bd06ad1e5ba67a4bce46f3c756732e2529369072320fd31a2c5a7fe7847b6777c8a50bad1ba38d6d36e6b8cfc03a62764158e0a9ead44e8f67f64ce65967c5e3cf7ac673a5b589509df59c76b484748e26fcdc6fa75212e0d1656d8c23925d6f669bf7e8d5b7267452cd7af8bc73f24de7185e7c6a84fb57ac2738c40d40f6938e0207abfaaf46d95696d04bee30a6de9a0c97ddbe2efedb055a3ea8d6d7588900163ef02f2c2abac04ab22043e7cfefe8032d7c236d6d23cfeed18fda8dbe4c09c375ac0414fa11021720d6855defb1384443237189186741d7a65d03bd69a327034be45a9c35b1bce17ec37db87d97910e9e4c4bc75a507f7047a2746f5e41e401e36fea38bf676978aecdc7719eacef4a4b5aa747e995974e935b6d653ea990b38be148acc317d434b35fb4cc0f390e1e1c8ae0ecd3f5727cf56380f0d47e6435a1c13c86a689dd0990aadf8ac089831f293edad12559c9d83d006fc4ff3351ed2da5a93454027bec950b8653a449b994fe018dc99c0879975a85511dc6fe455599ac11cb5be1ac62d55f11ea6c690da33bce626449cd5d29140b4ee7c6366916d62b3a2a6bc905ea3e9db6c6993df99288ac4e8f2c015f867db90a599ceb7007f5de34c52d892496bbb604d7d35e042345d847407cf1fcef46af77c140d7a26dbc4432fc8ab37d8aa2c8ac8e3ecc863da23db6fa6bc2f10810eb68972c613854bef2d5c139391f6962c6dd4bcec89831f650508ed8eabcd22af20214ffdb002c93664773362c499a5740e6f4301a31c386f2a23d2e6a2d71066cfc7d1d268bc91e7ca46998c9d23fefaba900eaa6cc12a495dae13cf85152bcee4b931037c0d56cdcaf52944cf057c2c2f1bafdcfc002d1eac76c7d1618bde4f7d37ace0c05569e03dbe318fdfd3836bdeba8dd7bc431b1e4266d552088129da4088d1a3e3dfabed47d472ede49af4d24876e9f319f3c54093d5c8a3df9545c7e25b2b8331efa2c8c7f9efc3672b7ffea5e7eee1b6a6efdc13ccbb0e9ad2a261b434adcbc0f110d92c71360f6ce386913113ed14c30a3378c6c3569b395922af5ea225ee31ad12f22887bfa6e58587d1fa423da9a3f140febb9e2e97963b45f247323c776fc9635b275b2c4e612b6ec87b212fe55bbe817490b01a0fcafd541beb9cf966cbf6ecf52be0d3c7eb387d9b83f35ca7a03eaf08f75d46f8e375ca9d3fa753b2223da71c9941ca51ab0d68a643a7b319423a207e8fbbc5e08841dcb9c839bcceeb4fd02ec9cbb82ed6714aeb3a453a4f1f8d0bed7deab7827d5abfa65a38becddd8dc6bb33b8be9e8974543457db60051c1911c1becda26a86509745ba31901ff0deb03a0a9d85d47b72d600ed736b6702dbdccb9029f19a1ee9dc45e74b9dd59f506479b75567b777c2f387ccb3ecb8c279e6f3a4e86c6646d6087ac98aee0d5c9397365abbb746edbfbf16ad0e7869a7c9f5b919705b03e9bd295e7ae27929ded697eb2893699a6c23aacb75c660d6e1fefaf07d1055f52bf0c7688f6c83b90df92367e00caf5495966f2cb4adce842d54dd83006cd2111a5f299d3fdf5e4bd3647e4629d411e99dc14bb71294bd095b30d2f34ed881a11efda976a0c0a30aef77d8839cd0e656aa2cba3adf5869f099b8a28ea77dc02b209d211b6f85b3df7c93e556aa32df94e081c5bcaf3ccf03bc2ed1ced9e05b534dde4534f6ce799c1a47316f43f348d2d1905beb8ae36a0851ecb87209dd033baf98057ab3067d602eecdca5057466f5d505e9983699d6e208b9e5c3e9384543e7d373c7f0063eb0c134a5875b2e4bb726bf0772ed10b665b694cece604517fbb368934195a56ab265f3699e7a829796e6a18077ba09de989ad7917c77cd80730caf6f6b8ab333806eb9e86179cfd1e682db8239c1f9b7a5833684ba68b24a76769acf9ee0af68df99c6dae4f7eea485f50cd9bdd5e47e43580c8214f2554c77a88343817d26319ad2a9c36e209eb98e119632f947a64e0b3b03903a42dcfafab7e90889b6f217d01124b9ee9b8ae40a7cc22ef92eba6bdab684feba77cce9b3f4d4d00f91e5a3c3bf2533b98e7c4671c6dad6807409ce6fbaeaf984bdd73eb12fd00e4af1d079e27de5ecaa4c7bead90eef83adf0e118c2cfd2add9eeb850e662fb02fb84633f1c6c9f0f2b4c3e97c71ecd1feb0e7cb84edc16eaa5d1ba71eea4cd051aacfcc6f117ecef35d941a0ca2e909dd06f0cab2c3e428fc8f2292d441fd2de18c56d223a3b3e93eea40d7e477b0151b24af8968462df159cab30e52848f7c30ef481e14ab3ac2aa1d2349d338662de538de671e56335de5bc483fb432e7c8efdc24bb79a2cd218fdcc2f73162af0e26a3cf97cde4cf2e8a7c4b98dce6cfadc3c2e35c5715556c2a8d473a897989e7480f1d829d63ff8d4f92bebff4af382123474d21f463c4f531c4a93eb875cfba5e8bc85634aea4198efe3e7877a36ce144efba9439d0521464948d7398a0915c9ab933ede2cdf6e9b884fbc4b16c02a30666c27bb420d96aad287bf599e3b87faf810d839e2d600f3f6c24c7e707e04acbbe6e8aad3db4f9613160d7db9e07c8d42ddfb93e6f975e287276dd371abf336a6c6276268c7f19e2a71940bdab6d9a8a41f60db4ac8cf90d4134aca9c2c193394eb731daebb7400fa87c94b8121bb80b742944decd740317bf83b695b035d2beee2f6c93e1b19a3bea4651ed4f52f3cafab0f07d1f95115da87d9132eae08c63e8a73e97b0c742406da821b0da272455d911d4386794a8e01740fafee40a442a5f7c9be99e43ca13c6841bb00daf3c00e057a1dae9eb355d8c9dab455794f694a67039e6d79d2e113ed0317d8d0869757195f2e661f550bbe376f02ef45aecc29f2e3f00db62bd38eb1987f397f4e9f69051aef6e5479ef5bedf9fbe3942e426709732560f7f526d0113a603f7dd30b750e915619db56959e6d307517d9e0f4d6fc327120d131bd01ec74a62b903723df0e4224c0fc099e9b15e4eb1ea00b3788f2365869a6373907c7b660ecd2901bc1378d0de554d57e887f07e7c69ccf8bfb11d221b14fcc6dc4d34c06fa661da3c91d2c595c0a7c6387bb0a7fb62f279a6ba89f87fa427c7e60ceeada60208aa16b795200ec744c5f5b34c6fac7f0e5efa93ba08e431f6f7bf6c17bde19b7744c888a8afc0b26eca24eef003f0c7353c95c54ac2f3ae6e2937d8e6ef8ce284e79feb8bf8e6d5826ff3144edfd84dcd208f9fc423996b87b78fedcfae379633418163f3f633c99e7a3740e65d455ecc47a2ea48dea3568c31bb847dd882abe1323d5bdf79da11f2d4f2f2dc8fb71e7157ccda57dcca57dcb9972369d07f85ebd4fdae84a0bc85c9f8c89a17c7318b38e508ba1cf9ec7a8ed4fa7f3ebd3fad0893cd0d2f9f6b10e211cc535917d74fe9c3e4bc7138ae31cf0ff5127f945a483a7e9f1b54fc13dff8df408df7f893cc990aeeb44b7e174be840f7de0f09cc7b91338f720f2c7749b1cd225a06d82f3bfc23d6e96f0e79694c595657242870cd70dcae6281e3d91c39cb4b16db6a5c0e41b07e88bf050a71b0df17798bf4dd0338150b6b311af86f23dcce30bf37ecbe41b95d33b9befcda9ac1fbe1e6f056393104262493b26e64599f60c7caec9728eca8c6d53911c23b5c7089de62bd1643cffd0b631881a51a1dd82757adac28df37cd19e7e21da0abb307c355e89119ade5fcb10e59a11bc12ce15f13cf41ea023a06bc2facdaf2fcfe3bc7bc4173f629edfd08f43d4bd7e427e645b9a1a3c91a72f4b942a83757a3e3f56eb86f59ed281c8d909fd24538395a848e6cb9d158acd403b15ca3e55d11c5dde3baae7ae50fd71de3ec73cefd36b400bd70dd2733fac01358338d7279c27b061ac6624fb13cf42f9a42d4695dd952a777c8377211a694e9d4fcc83bf5f5d689eedbeff00db9d56bdbd6f320eac7ffb705f8107bb9eac0db9310f71198eecf423bb1eccfb5db5a08ca674500ed9512ce5b974fd63699b1dbf3fc243987ec23e02da0e6017864ff54fc09c8cefe913a9364faf51ce9776c977021ba63dbfa05fad0c3fe8005d7d6b2c445ff5f62eec52b218d48fb05c8efe1dc7284fe60bbeb7f63bea5e14e18294582b617f22e7f2744d6fb3525daf9de3831f6a32ed98debaaa2e9ca70f731a8ffdda5e6b0573fdb0bc3617731bc84fec23704c0fd29d6ff1d2ba8c7e7086de7b96ee1be91011be48687fb5e61aefe28e603b20e7d7d8b60a301a39d217f85680e8c2a53499aa628bd9a5ecb1e4de17e6011cd3d5a7fab4ed1379f219d7a572e69b49bd2853af29cabd8cd7890eebb3c39c0242275cc31c55beb1c139476bccf3d63a23d5cd746e017a5e1817dd9a53eed6047bfa94b99e01b0d70da67ed0614e2cec52464d8e653ba253cf750dbe6f4fda9c63f17643987381c1ecddaeec2679119eb385eb24ceab3be8382ab35a03dd1fe6527d7cbcafa9cae22f8852db1e94ae7dc9f1e71c6322f1317274581705f6d560a500fa7c3cc9d3940e8c3b98c167e792c2b5b6c3b50e73212e328fef655390e8dd9fac3b456bf8a1981f97ac27ceeac0f301e7b207def3be383cd12d62c85106ccdfdb6fc11ea0d835d08d1a943684f9725b4be9847edd4ff3098c7077a1288f9b3847427bb085585008a91ce61a999eb436d8810bf3ae98066d7aa2fbdd734484e25817ee285618ebcac2740af4214d7413f98d7e5dcfa99bbc14a08e421c39a60bc4c59e5187aa20a4ef98e7221f28f9590b54d9427f371d476507b42aef56025fdf029e17d158bbb3459db7a5f94b89f35051ff3dcbefab039a543ab07377e25c9371880f5e872f12fb0d3479f7e53046c69eb4c27ce502348d3fcb1dd7c471300bf1a4ad360d71245d60872f75e531ae6f91fbb6ba98e39813c4d1da08adc152577a319e25ecc816d5aa6f492c24443fd681a8532f832391ded38fa8471e46738eeaedbfd41a7d91b81eed6abceb74157836be5c4ef64896e6bafc8c71d4de1f3f1e4478ac52881fb1d6e481afc631b03006027536b0f784bef94562ca68cff05e857190672c6fa69a82b123f8c47544cd3dec62e9427c594287fb86313c14d752c4e57197f18fa88f41b18d282eda1af8862c1d2cbeb536df510f063177f901eca284303ec073c7211e141177e25855e98571ac83ce4bf3df1d8f937877ad2922a5caf42eaa0b78e77c3e00c724d3efa3c3ce36d293c1c01c202ad72625ea8905bee3409d3a4b6fe75b9426c1b9ae2dc6a5f4264de932ed4ebcc646cbf0137d662db2c1b70e56935e1b0ccaeb3beaaefd0131ef117c2747bc9383eb61b203c7501edf51a37c4c5b80b719c9f78534fad9b8563d551129d41915e648e231c67c02eb2255e7f02db02832fc44735519b8904f0c69884fde55e07adcc15aa7dcda3217d23cc49fe763fabeb0fc88e3b81fef9b7926f85ef4de77f86ac6507f8d62c2b1be19f3ce3ece61c0390b9fea27256cc77684fb1fea2ad5c7fe69bed17cba4b3e4bba05bfe3f14f5584fd9bc8b9ccf33516c89d0b6211853d31a2b5ff847a35dc2721b1dfe7f278fc2cc847a515f1cccfe6e76f634ae446c9330bf59cb047862137e61ad9c3e553711ffe5de835ca37f970bd6440f0987330dc72e258a45e9bac9108f37b910e349d0c39c798a6ae816700f5ca206cdd19ec04fde9782904ef7ecec4c8e692bec124b65b98930d751fbe53c7be91c435c8eff23dcf49b19f23c3c7b2087d2b12d491e2fae8cc2efca57974f6f8df89afe5863e850afec8423e5e8061cda8298cf59dadca83398ce1073b5b936947c77e65831d2c01dda07cddf3724d846af926f6b9392702b695257c8e4f62795f601d2ac7074efb7072cfd0a9fc94881617d206d9ccb46bc81dd784b4251d2a60cc9dfdfee4383a2ec2c70b63f3d8863fe5e3cca77324c316d25a533a61ae31aab31f51538d6ff879396127ce6eb95cb1e2719d830d97b9e6e6539d139e07bec6b8942aefec11c6e64cc904fbe579f0361cce7f621c2c1ff5e5813159c0e356425bf4716c16f9cce5fdca60ad03c6740e3405ec8dc4c01812aa97f62c79bf12f88eaf7a7bdf60ac4055b8a52ef76cd3936606db817e223383879f5ce76a395cb96b533ab72b739f42df4d1d8c21a8747f681f7b123c3f6477f152f75539c368ad68c32bc54b423d312f2fcc2e13c3239e47fa177ea78f00d6017e068642546f7819bc0fdc0b0ed79a0d7736a99b684d18f3cdaa7388fb7de19acf2eaa7bc4790b9fac8bba094cb030d7eae3e7f89fa0977aa876ef5be8a5e7d444279ef70d6aa34b9e9fecf5ad104324cfd7d7af993e4fe626633c45322941d7965c0febccd6aa2705506e28bdd33923ef7f7f922f24e57b02eb7934175f219641051d13f3900db00f4c0fc72f71efc3b761e797a6b82cd0ab8e72a44ffd2b9f077072cee7d859d9737dfc43faffecbd6973a2dada3ffc5d7c7b724e33c4de6d57dd2f8289081dd9ad46a6a7feb58bc103c60572b723deb5bffb536b000141c18198debed8b5d389c21aae75ad6bfcfd5429d2ff698e481e6c092ee14a9f70897923ee5368bbc2ffa8b1ca051ad3999bdd299271bd8dfa025c7cee9f1037669463b7f9ce5453072eaa3d4c70701a8cdcb49956a8777b29fecd741fe1d309767e757f2f779daaf98005e7312d5355be9f630347985f2dc1c35c38bf8d1fc5bbb4a97496afaa083465e06ade06447c3f49aed25dcf49c4e18b74659637b7c2fe9c702fe4c85a95fb3e47c6d2bef2e5f4d616f33b83e9ef2227a8373b898d9ac1db796d73ac81efe2c80686fa0a68aa14405d6531ad90e0d5c7187f51cc88e0e4e1efa9bd840e4bf777ff23fdeaf6f1b88ea9c894c1b77e2b59b3580958ac44e2f8f02e7357fafd5e2abe977c09ee21fddbd849c89789e694e475407cef4bc4f53fe1c098ef203f15e3d712ae6168f7b76d15fae07a57746de6d1177809e5b662deae21bcd73a54125702e320baae1572135d919742d70e6cde9d5a5e878db0292cc65dd9ca662af0cd95c06f56a66743ff61a20fa11f26dfe37fbf71fc4f385ccb1f54e155ce3caffc7e55ebc7760a627ae7f02d279f5b3fef72466eea89457c101f7376ae97e2a3691fc64237fd5ef97afbccf32adc23a5ebefe3b9e5d57226f0ca2e28c71c8e45127cb421b7b195ce3c139343cfbff55c6f667da2387579acba1b97d5ca9ce21f2caf27718defc67c6b9ce3f1dad4ca15763b5ce4d9f997c0d438da1395785e22b792df3b51530d5c6a5e35d46ba6de77166718d663ad2826b1d6141062bbde714c968bb15608bfed12f5c8f953d49b8db0596ac771c8ce3daa6b43f35ec5dc037c27b026519e91702378841793dfb8a6d7a14c566ce2be7884195467ad7e155e98442f2cc6092ac303d32bd2edd5f47a259d5ed02b1b63f854e57acce7e31f4c0db4ee4dd76c23cc7e22336253e05bcb289fa5a922aa1335d40130ab60ca9690d79364372bc72096bb58864fc56daa62ff5488d11cefc7da97abdab8ea32f3398ac154503b923ed727e1e217e7e26fad6f1dbdff02bdb871ed7512f738cb77ce03541781f673c7b348f2d2e20a614474a773c2a991aa918cec8c2abec335f118a27523f6547df507657d8b123ec5515fe2cee17ee770af9fc3fd986ebde3e2df71f1af235b3ec985dc9a7c019223bf202e7e8c2b91ccff90bc8e81b85c254a57c5c062078156c69fab43ce76ebb0cf518bc71ef9ac8978b2eb5a5ee7dde6e5d05025ca504af9749792b7cbc5137c82b55b13ffdb78f8343359d1d7946630f662ee8050e8423b455a9993929c9a45bce4696c4f07dd452ab27f00ca41aa82633160a9b3f25c5305e707ea3b6b853ad3591a6ae02638dad6ba2a6e4de631209c072b93c7dc88b637727ef0346d760701f457e2b1fbbda0e6bed30a6b1a71d1a5b196057c97a35a4c5d01d82e44bd18366df29d5068bb2e5a0fcf764d0f7c8de376ac80b89b2da6b5fc318c38ed08b6a5aa03a1ed2e6c654319503e87d15a36b765f0be2e85dd9187d79896f15258f5640d6bc61b6745bf64ece5d361a9a7eeb5bad7f57a38eef7d8d93d76768f9ddd6cececce2979eb1c549f9553f2d25ccce3613d1817238c7bef8c12d8c867600d0d77f8bbf256e05fd03b35a635d5df9a785e29bc0a6eaa2b7a607a328adf26b12db2bc57f819b563ba10db9a1ba67185d11db03757c221e0e8bcec194a13a0b8ec844bf0877daa7ec198b3ef43f15e76b6770d6701fb3267f29393f1ae1d8ced17e92689ca72afd52dcbc4974d72925719eb2de6aa0f7018e1bd247b5b8e9fe73caeafadc1b7429bc84b1d7e1bf40f6b9c5f140b5918f97c30d7e386f25aa1fe011c633b6c957adf4b705c6ae6dfe2661867f1b8dc56e6cb2a9629daf26a9f6768b24f35cb6fba5eabde77231cf2abbc33cad7ee6ab3caf1381ef4614bf60f56c20ac8cd7b247dfa8ab59fb971e793b9c2aad47696afeb3cada693e0e1c7fc70b83ef9d4384e955ae52a75cac76de07dbdcb8a2b5b7d2a3e27801bbed152e7885ecf91efa2bcfa118eb2cce7b2f8cc42c6d6be32efd0ca4ac740ae85fb99ceb19c83a3a83c3ab9f90e7e0374c44114e5349e6650f762ff2cca55dc9c6dfe33935b896df4a2bc8bc9cb3eaa9325b92da1ed2e4db6ef68c35dce0af500a37a545c77a1b1089303af77f49ecfc52506e514cb492d1cc5d20cf78dd76663a3f9d56f5f77a63aca0996e131bde47be585a68079cd36e7dae011ce7ead36bdad8ab5cf13e191d5fbce544ca6e67763eebc6bbcf3cef77be7fbbdf3fdde26df6f457e935d5c308d0573ad7a2752f302fda6537abc73cfdf1e2638c6057277f1dca719c17071119fec84fb399a4ae2a08d30aa508da436e4e073039d69ba36aa9997de0da8efcae4df2f8bdb88c70c75490186f8d5e7fb79723217c016ff1c7de4f2093c6ea9e7edf59044f59cbb3ae704a75f163bc9d5f941a8abd2f6b5cdc13b3f30d3f88418c7edb4188e53737f2e96c7bdbad6abacc3bd4f37cdad12e52dae9ebb7ccbc642f674e9a9f5b4fb9c0c08a330bf66964675b5982316580cf04daf43216e44469ae925f1192eca017d745d0edf3179f197fb9d72bf53ee77cafd4ef9903bc517719ce3fabecb30e67c251cb767d6c5ac101eb42a3836ffcdd1944707f165aa62e46bafc7c308572ec909b78f0d61f09dadd1e63c9315109716d4e511d76acd71fbbc358a307dd626837a924384f78bee4b2443611437b1bad388c722c575ba8f21e1ba16e3106c601d581e3c4b529c43f954bd141e9acbd971e6437931e1302edc0c8e4d40b60a8ee959aa1c589e9cac0dcec905c8a131a4c3441de0c7d50c7b6e13f5b343794231e7646de2b9fcf0d7e7fabf853a6303e1b58b14d4412856e6c92196a3448fe995d7a1aedae423e781f09ad398d7fce6eae3b31ce6e7caf73eb7bf99e48e1f66f8f81968d78bc0625ab415d7467f78ffbd94e4a28fee9cb339ebebc27fb84a3c17e768af5ec310c52b271ce25638c326e2117755db9deb8aed9aed29e9bbc73650848d6b7b606a2b9df907d50a3b692c129d36f9b5f383d458fc203a04c915e66e5cea3c600c05e9bf4fe9037f30176fa887a47ef8faf67db6e6c4a982d793e70f0f7c796eb69f66a4362520f3c2366e4ebdce07d7d85494edfddaa5baecee03b297b681a03fa534b707b80bf76269a497ae98cbfd92ba9a715796df8fea77ae1e134dbdef3cae3454f3886aaf087f187976acb3ad09e76aacb8327db0a859ae537d0709ffb3ea98ebeaef2896b5f4fc93bc7e295ea318c73b5bbb512fdf5f1cc7aa415773d1bbce8dc158ecc0359331b89ae3f1fda8a762bbf3b32cbeb5b5f9ce5ce0e33ab44fd76f847a452634b4abebeea17847f59f75e044201bad9e5e23939528fcbbd6b454addeb9b59e9eb4b2952665f9d3d3e677a87ea57d18ef0efb9d1f876d774a5ee486f321d7f4bb6f31ef512edf519e67f038bf61f91c5f655ec5437c8665f83b32e7be880f6c6632e57911cfe265ba0c1f53c40db782fed4ae2fb122ffd299bc4b27f22d9dcab374845fc95e59debc0c27bc53b5b72c7fffcfe5c7dbac7f4e5f1c9b69854698b6bfaaf0139dc94b741a1fd1293c4455f9872af00e1de31b2ac13354179607dae7576513985e0db1c9696c3fa3d8f5993eef16ea5a93c4c11371c98ff71d4214bf4efabaa5c67a8fd7548bd7680ca0c635c469faf03de7c82a83b10b6dbec512dc465f575abee575d6060fa06f01ed7e1faf33aaeb427d47182b283e3335f34a4881dd8d31199f093e2565b236e963b481c9d8a1a6723368639ac82fb3d11d88ebef68d7407ac5dad903dbbb8c578e49129ff6fa7923c49d784ebee80dee178ae375c595ed01e863624e1d788ef8966fb2f2f654b9a9538f8ff09a47b27fd579ddcf43d57c2a8ec5bd2a0887ab8e7c6a14937c469860a79f8f3e891921d951a6a02ff0680eb723f7519cf3058d2b92ff93c67d97ebaab64c8b36fd41588f3d43de75964d138d17d739a278118e33b9e95c406d79a66793959776576cc67677b931def34ad57c46121bbcbe9c0e30ced419bd21a47fffc36c68fcfeb8fe09cfe7f3e9c90318601f8cbd8831c1ae9fdf1cc17360f1eecaf44ad6f8e5cae30ee7c4f471dc5ae0c5a600cf3b2f63dc8712f5a797bcf3655e9eeb2a5ec784de847af01d9e795ba127ba2a389a3f75ecf4673f9fde3c5cff99577b8aeb126f8f8f3bcaf35c8abf38e646497078ed6a32d3fd75497d3a17f848c72639bb102eee6978e9257470fe1e9cc8d50da2ba5d64eb5e771daec88dbc775ee42318eb3b59c471ea09b7d0d15917916c59db13735a55de9f1e07b4c7a02dfe4e7a35abf400e6caf9c1fc8c877255559ee79c9ba7395b5ef3d70ee56d0cbeb5d0871cc10e8af5f6f267bbb5ae384767a7bbcfcd295593dfbd758aec525f5ee8aa78625eac30c7bad23d3d28e893f98432806a403ddd03ef7739a824070b93110393ff5de4e0c53195d6c45010e713b68f79a80345604d2ae6e333fb776a5e3eb38f55f3f31959ac9ca7df7dd7877735bccfa46ab50195ee54bc56a43ee592f9e462aed2e41e25fcb78f8c67213cb9ebfb65f2687a467c00c8c3b7a84f97912742570a50dd1b2b3843d40b2c2e75b5ef58a8bf2ad1bf581bf6903c7c7b8e3946aa8ff573f4b714f4b27e6c3c16ed7158438c2b2d4be7f10a92fa79d477db955db3cd65fcbc7a630bfb738b781d306ea9d01d409f9d4638b1d9cf7e0ed9bd9dde2c7fd7035a2bf6c279353c61029fc0b55869a5318060d5605c8588235c5725743e77b2d7ff382c85440f76a23fd5d154696b3252a0a988e71ce32410ec71f839bc5f3b99aeb3e6e732d80870ad4b628b7e3e6cd8f08abc8bc57d19284ea95117ec8fb8733cde391eef1c8fb7cdf17808dbe546702deebc8f3bbd72e77dfc3914679a2acd6ab02d05f89ef3fa484510f9c131d63bcadfbc381a2b36adee60a5b3a26bf16ea085dcd4506c60b17d4767e4258e2fca53816f3128ef99b65113f89118f34a5336bec98a81cdbba530c42fe95f0df9ced6784ed9a2b19d19737160fcae77cb87e3d9d51c0bfc20d019796bb7395f579a289ea62b7dc7647580b18b13fe4457de62f97d89b0cd5c93b757960728832fd50bf63be48293739ec03521dc521b5b01a1aef40fc58f2bc78a2bf14715eaf07d19bd60ce58d2d5c1cc64fab8368071030dbe6bc8613dc1832dc258f500a32bfddbce01e7af13aa85785364cae05b535ca761cf0c05ce2d3e07811572535d1503db93a757c5826c9fdeb37876afe4e9ef4f8de352bd93e93d2fccebbc0d5f5e16bd77812ae4c02a9e633ad734e1184dd9d070ac23cae55edf045a9a14f20d14cebf30170d24a13fa4b67f3ee7f3d59c337fe9ed25bce8fca7a03f18d12faf6f2fcc01ce857c39bfe75feaab93f75af33a306c46f03de76032612eea08af3a34990dc078a42210f8ce166374cb53fcbb98c3bae63c8cb8327735422f98139cd8815df4378c19ebe118a0a1d84b684ba1dfe1d802ea1ffb54b13e7f10d8fc26072be4e5f2b81d69dca51ab0347eeb38e69de3eace7175e7b8ba735c5d96e3aa7d1823087142e6f8c4a5b9176ac212cac6f1cec51492956660a932c87290988c86cf20e1368d6c1c9311ff575724ea46f082b29c5fc8e73d634e97c3043acc7d70d9bc39cbad4c5f0a346f035e55ceb5fc41b3a61cfada64a0af20cef521d78fecc4b3f2e93bacf5c8fedcea6a1fed5d16dfd40a111601e1e36d224c664ded3b06df61741cf78cc6179888ab18d71f59bc1ce27315dbc03b7c7284d90c7d0f38960dbc07e0b32833ccea6decff8cbb1f92c7cf5df7441cd5d35511e57562bf8391291c43cee0acfa3d275a138b416b4a197c871278d7b5bd11aa0fb0f8d6d262c0c4503681dd9d129e040e58d80e887d9fddde214c6fe457589e3c8732079f05f73373afa3fc02f4393f5d2d818fcf19e2392ce163dc79674f7ef7dd26bfdbe4779bfc1f6893e37b18f1fb3936ae570ca1ee365411a0dfa175c3f1f7b7a9f46716d7bdf2b92c7f26cbd8434393d954ed71cc3b9723249bd826c177f3aee607da348115a66c1df83968e7dc0aa667d1ba605b1de9942806e9ba767b7716a1ad61a8bd940d6212dc8e2a75403754834019eaa096b8b6cc03ca2ccbe752508f6de367109c944160b1dc5c53a78ea634a7f0eeb43de093f354733c1bc77613f874645db17daff3606bf11b773ce45cd3433905c650ec6bf20a38a6021e75a5df12fc4168eff765627960c595ad3e1d88ebca8cae8a4d9b77a14d0ded1d8277fded3a982d51ede6f57dc5b6a64a407aef9f2c8f05b5e997c13d24eb10c9d367aa0789f6b0ef8125aa09ad5e17e219505e48ee22ba5373ec0bdaf2a68b946f797bb8023cea1b7c417255ade6efa02edcf1ace0f8911e40bda879327c3f80f6a2d0b55d2be4e0baac90ffc177b6c20bc21f61a4368a1f4cf421074c45043a8feaeb0373c2b9f87d088fea5f29ae2886fa8ab0d9df1e9742673083f720fc0fbf1f8f87dc97aca16ce6b9f9466c2778b897d29ee9ca636afcf0793a2fbf9b0c1ccf8de31c4cf198d39c3257dc9744fdd8eb841b19a81e0844bc5f98bb86c49b6c06cccd367a8e6bb188af183e278e19e91e8077136bf0f232b527a4c608edb3d2bf052e56e770ed2fe68a7b553f172ff15b927fee82fcc467f3c1ddf479cbf20292da01ec9b4cf45817a53e97388b9bc0f416f01c84c9bea3cab5cb15eaf78f7134269e97bc4f3f128becdd50c91a4ceac1014ed9eb27fa05daee3928a6bb936919712f18ea608678ec13fcc3d02e37489f2ffcf70f5e6c42d9d194e69660d32c13dcbda1c94adb573511971f4eeb8eb33fc77bf3be8bad7fe0dcebb2492fc2d763f39d5067e4527d61178c1547fef5ef5483333599dec2c88fdd55e274ae343f9f0b4df6e92379a44bc5fd0ed5ddd614f7cbe6a0cf8df7c9a60736b632728c64ae7fb2e3cdd530be5d54c3b7d2bc00686c851af592764465fb01d90dd9be2b64379c3ea74fc8991bebbeebc7557677d484a33455f475f5f4180bc660da715ce03caf08e0d9d455dd35db98f741e0a520be7f3eea4e4ecd17f79326f928080f41a8ab70af6506ddc3a4972879af7f0afcd29bc27926f7522838e65b109a4c8bfa39149bbadaab817f25b62fceb45f5b739397239c3e28d3a80ec1f25a73c4f9542f4f45624e045f84975626bf01519f09925ba81fbbe2caec7e3eee465391294d415892fbf6c45ebef2a0bdf46ef0ad602f8758dda6227ddb17c14aa8b416f13e5ee6dd518e766632e04c6c0cd1d598f9c2543a14f4454ec473b8f795dffbcaff697de5912ea9217e13e90eae8bdef97c56ad65845d91b9ff70bc02de39385fc9911805b22b4293d9d4cf4b9633ef281e13e5543377648463ec093cae9bb1c29c7bbe368cae82da976a7756516c6373f1d886cfb996d759d41cbbf988ba46544373c177deed930af6c9d9b1a17b1ce81e07ba741ca87db826516336aec5f6d2b9cf69f3f90dd74f7c585f501f8feb7c7b740a963a0fded1fa7a16a9f925b93d5670f0fc25b86fef498c964fd02bf46cf29dedae26f82af3fc7cfd435e64d7adeb88df44ef3a0f27961d84b6225136ca07605d0ddf13c57388ce48e10945f83f1623c3fb0cf5b1a0be97ae18d85ee77d3cdcd986af13aea329d24ce84a00deff863a68227bb2cb8586aabb1a3bddd99a0427d3886a6b5ee2bb34aaaff10c05d5834cc643cec5759450e6246a6753af1d43696e6dbe036dc4da63aad1bc937cbf7657a4357640231f1cbd03ed55844585fd3594db8fb04d07511fd0565724daf250bf15eacfb23cc0688ad44ccc7729bcc8aec638a5f60363a9ba4154a7df8f639004bf06e119c818e3867f41f59f360f96500612fb1498be4469289f7ab7fdefb6ff6fdad3549faf53e69dbb337cee7befbdddf7deeecfd1dbed1c8e734b734d95b699b8f69f7d0afdfd03e3da785c17f05b0f719085028fdf03f70d7f86605b7e8258f7cec73acab576f23c6f3efe1dc55b896e8df08df773e2eeca50f2f33f857128950b4d56027f7ace7e0ef0c89d6375a12d33fa6a3c0bfb3548876d1f687b6cf5b760d6cbc9ad971cef3e465fe9f18e4e1e6f0e865fb9f1fafbf8d225df499bfb71be926b046d80d3d6c8ea8ae0d4efda7c6762f2e9358e643f15ab8dce1e96ef233eb3b3d9afed49fb02024f07635e9efe1c8a94e5cb7bbd32877a7a63d920fd5f565a2e2fe8fb3be16f328fed6f328f9c9ab14f390ffa379907f35bccc37fcab99f2fd6bf1add0dc0f6e4708c62614dff55014bc4553fbcd69cb830a78f3a6dcf0cb985a1ba407fa6267657a4f7e2f3e99c5dd57c57919f98cf0911df8374303e857325fefe7e7c27f73e4b8f29e117cbddc3e36bad230c1062efe6de9d17a89b58e570f05fba26edd0fe15c9f1fc00775bdebb2fa86f36c165f40dc9b70e2bc65c0a73a787f597aeeac0f20165c0f31ed281e96d02d3dbb76b2bd899ab1c3bb3827d2be7d89a510d6cb15f92f4d7078775dd0ac7589aaef912f9f3d7e9d1b7959cbccc8531ae0ee2c514ecb9c94f2bf57a5c12434343382237a93b282bc727ab4577f883a3b67caecc93f350b5cfe75aeb57928feca4671b39be6b517dca45315f8edd73e5ec94237645bdd82136dfffec3665b49ed13e15bd2bbb7747ea95eabd7be11a1fc8d11c96195f5aeb8a1468cafa9cbbdaad70d716e942b24f78ae87e28d68be593d77a4de3c7e4635fbbe68bec4be9173effcbdfc54715c292b7fbbe7569cdf15757881dc9c94638ed60fe18d9c92578ced4d853ae7fdc139efb6d84168324dff9c6768f9dc2b25d75ea2cffdbe7596ff0916853d68c5f7e89ece24bfc767e01817c86dfaf9c7f799694df553b8257677fae21c39cbf1632bbc7b3f8f52e18c6d51cd4d0ea774a56728678e41cdc97314c54a2eda2389f6bd069b2f379674b3be6cac3b3f618ce3889d755c1714c5948a6ae3b3b5efa323e36339826fbbc175ae578b89cb8bfbfe7de6fd9b5ec46fbbb8cd7958472d0cd5a9cb47b9691daaede344dd822d74cf79948b05219be622e7ef0665d382faed2277c32dea4de4f7548f391771f17673b0928a3fbfb5bcdef11a56afb31ccbf27078ad9cabf7729b77c7adc42b0a6ca41cdba7d299b8e2f9c8b3672e82f75ff65eddad990bf7ee327a371333b4580e680c7073f2cd35c7728fc7a64c5f02965f88a356e8b756883be6e9b6a5c5c8a17d4a3e3e5f5fad355574cdaadc0d17b99772ce46922b8be08a64eff9a3df3d60231cff2e946d9d83f6480e2658defacda07cc4eb91536f3ed8dfd714aff5eedd03d7e6e591a1d0e055b5039b7716360f16ba1aac4c2fa76ef768cfdf7ecf14e670407f8bdf857bb61ccc0b15ef3bd44534187bade5c57ab0329ccc29ccace478f2e6e273d046049697e0b29e3cfe92db8fbf7e74826f4a385fa8c3c75f3ff2eed37c2ee862bee7837b242f3405cc4fc08bdbef6740186ee4793b2cb7ebaf7551ff0c1e276bf080d26569adc17b7fc7f1fd6e329bb9a672db9c3829ee9fe3311e5192c3fb75b2787a9dcc2fd02bb1bf1e6f9e0ce5d415781120d998706b78ee74555c5e8573642783fb3a3dcd379fd20579bcdf294e0199d86351be5615736a8b4e91af17479645f1421864a1ae22b989b0d8261abe2bf0daf9401e4da7b936a4cdb881cdcb6f16df81f7732c1b18dbadb3b69882bafabc330f36eb31b5692934febfcaf77fa96dda7a05d4fffe3979fc75014c89fd7502f15db4c57dc9d24c4fea4d380fe611f1f2091d91ef874fdb3fdf1ce61a7d4cf119dbc73d4cefcf7bcaf64ae9b2a4fd9592cddd9d76903fe25c794c71380ed78ec5caef469b732dc2ef68c2cfab3a103af2f0ad449f4d19dcc7ccf94cf37228cd261a57eebd63cf0c7500462ce7229ecb480e3d84fbe75a5d29d716aaa20fa23dd2181798cacbbfdacefffc4fe3a11118bfc6fea2f1fdff1a3fa74ee37ba3f1d0900c6f0c7ffafbef87863359b84bf33fd6ccfb62cface9f8d797d9dc32c074b2f8fee5cf61fbe9f5cbc6035fe6963bf60cfca7bfac9917ccfcb1bff80bfffa3f9bb90d9f3ff1ff3b83ffb7c70b6302e6f0471fbfe9c0f71e1af3c976dcf8dea29bade643c39bd9e3c6f747f62bfaf1afc5047d9fa1e8d6bf69e6df34fd467ffdce7efbde64fff38d669916c37c63ff45d1df29aaf1d098ccffb227bf1adfff6b80f9f8a1310fd1109ec7abc6f7af8f7ffcc13c34047fd6f8dea21ebf3ed2df1e1a1298f8d3c677faa1d1436f6559867a7c688c2676e33b4d51d44383dffda8fef55760d854e33bf5d018d8f099d44363981c3a07a6782a8f54eb2bfce7cc9ace1bdfe96f8f0f8da7c5c48383198eadc677baf9478b6952dfbe3e3e34a439fc4d8bfa46fdc17ea5befdfdd0e8653efa95fae3db1f2c1b7d349ef6df0f8d76f6a974abc9304cf4d1afcdafadd657f66beb6f34fca5bf9c8fedc6f7ff8f7aa01ea8fff737dc7d77fc0bad115cb6c61777e68dbfccc1726acc27d37fff97697db18d85f1e5d7d8768dc51767b2f8e22ecdac98ec4949e3a12178c1ecd7e2a7b170530217fffd7966e13fbc19bf9cf102ff3c98cdc84f3d6361b98deffe128087c670618071bca9e85f83b1319ff9f8b3fcac3301e379f469fce6f89fcfe320fef96d3c5f643e0d7f95f9466f662fe1fbfeaf41865f7c40d048277ee3fbe2d772fc70d622a289f466f6e9bbe0ccfee3cd6cf41c79fc6b3e41eb43ff8766d1290fd05c221570704a64af2a1dfebf1f1a708c8def8d9fcfad4753593bb627871603152c35e90d1fd7c2242264014b7d4b4d6479c0bfbe39939fdbc71fc4887937a0113be41e4d65b3b4b6c12374b28dee80b29e67ab57d666edb0c9f6c2e6caf2ac55effd69dd1bb6b4b7d1e68d28bc49f6321ef3f4dcf47b5fcdb7c47318696b79bda5e981addd6efa26abad4cbfb722419415022e55a3b17cdbbcbe3f153f376e7e870e6b6b8982124371667707eb3f27df561a2b855ad85c1aaa44bd7af6ca9eb49656d822018072cf26411de8505276f7e9eb6bd87ab758f1fdd56b0616db5fea4c8b79659adb578604c0b62fcb5e5bc8182f5c1c001878add01c0d80ee7568b3db6f097e87d6940d6a40d7f7bf47009707c859b7f0e575ee58185d1511d8f1cfa100d760d96bd30b43d94047033aa8b1c37cd040380cdcf5cd7c8b2fc208acebe78892b8b7362722633969044cb86714f4609a28503320c027a8313a96cbdcc6e8d47b7632ff983bafccf376eb90f34c836f8576d48cbd036d5b992ab7323d79491aa4d39fdb7f4e1813c6e6188be65bb0fe09507372e9b5894061045e72a1f1ae0f39da6208f9144f0004141190a6e720e7791950c67d52acd47942cde9f8f7b8c93a496c9d588f6e2f02af44ce1c320253cfecacb588141c1302a120efcfc9a3d347cdd9bb396a0c74a84520f07260f32e7408c9b3e4c54f7f0034c65d1a0a3cc3a9ef61802385fad76b1b81e0ecbe93723ac5666adc781f81f9f6b8145e5e1c9b97df0dbe19c0fd4e7dae8d806fdcccef08713722aa42c620369431808fc0bbaee50d584d1581d076d746176cc9b8e1f8184315295be9cc7f60d09eadc9e894cd74427d88d624697887e3cc1a196a0f01aba77e879d03344f5d81ff7e849fd93da79d35d2b9d0642460b1bd79f4b3de954368cc6382f2d6dc50a426011f5d1f9161044c9e68b83f41a6c1b6480e5f15a833c1d24890e944646df85c3fe58359f94fff7a9bb6468337447c8ac08bb20e0ddebf17c7665aa181cfc3daf25a3e22410d1f9d3e5e6be898419d3d17f8bd200621eca45d13113747c0185910a728183dc0c4663c1d58ac84413330614d14fca550b08ea1be5acf7b41e9c59f3bf2ecacc306ffb632d9fed1b5b3bcd62a876029abcf8b1ddac2c0360d6cbe33d5d4815b031943df564428a3915c2d7475e0ea7c87d24a928ee581b88cbae2caf6c054577b0e029581cf20fbac2950c7f523626e5af33609b089ce12ea3edbeb0426df89c9fb8b805276ce70bf6e00b283eb8601a5b9d064f500aecdbe1c7726262bc7a4c899672102584dd55d43d9b89a07e604ccad0088637796ca04fb2e450e51a5592b0bdc95d05d5f0961efb920fb07809d76e7f84f1fcb9bc5b828a1732dc2a5e4fc4cbeb3b5dbf4c26406918d7a3540b4d4ba46b6dca49ef745eb5df77ba1acbf2a0888bf0690b0942c5d846caaba3c81a5115e06e8f808c072c2c60b4293d9800f5863d7f207cdfadf2b425f7165fa52a0791bf0aa927114834a45bee1de380b01ada2ffce9d4722514c6c9a72046f8701b9ca9120572340ceb33f86b17f570dc4cb2900f2e2747e1044496f642f907bd04276e5636477b816f1496c5e5e942107c8d890a541b7ab82760904b86be4c90b4d157fedc07f3b539d07a43066ed40794df836ab0868d4e23b21960b40e90a5595a0b70239eff1628b7db9ca2ffc499d3dc00ddf68a973acd16d5fff1501f91d28cac8f95cb64023b3e7951bc5e3b9fb31c148945cdad98c431afa4650c76f0dd4284e23e0cbf190fea5ab609b9f90910026846a8542d75d6bea60567467203f8c6f2d2d064c4c7eb480326277739ae1d11ee981ae6ca689673e595e0b8e29c8dc2324194ce6755a71e94453a45faf0a8d139c7510ca7a9d772384b235a04a93e15420e58a89dafc9ea329cd6992943b95f0537b75fb2c6db8d6f0be416b9d22883d7b1e9748ac5f9bdc2b69cf24498c6bb7a56272e932a4af87df5d1bc88be9cd6b005b47ef390f683d99ac4731dd17c7e45bef11a9b1e5c90b931d80a43cd77c0e7b86d2fc95002e0f754507d01e418975fe9ba30db9b9c9c471ce5057e8950deff62411fb15c0c0cf01064bdde165801dda470090e1f327870b31f36d773934e07dba5bd38f03a8f5dca6c5cba1cdcb8f5827c463ba00e905946be80b729489e2ea3b59c07986e4bff550536cfc73db753576406bca7a2ef0cd15d43ff1d9e88a2b04eacacbd31f6fb701606bc0bd56454a575d2a75efbcedeeaf6baf435d00b7c2e102db5057d63747e232f2e4792582fe8332bdcbbf5921f6676c5c90056d92505736c426916686fa84f609c59995bea3f95312234677c852e80c6628c713e7c2e0ff6302955592c007cb8fbd15ba1c6df9dcca2a476851ee6ea87e4724ef8a613ce7d85ebba935ba1180721ae83c705f5574366e0e24ff4d91a786f242eeadf341f207e4df9a276f494e60a12b8340db817947b90244da00f73e653bdc04d916de33b2571140f90bb96f26bada23b29afa5c2217046578017444e842ece91a75f5051b2c71fe4795669986b1ebd8d8209373eb0c025391b736df599c43ce891a2a7838ce11f117e173a13d9bc919b73956537b8ed59527260fb6062f4feb26e71ce177c72459326a2e91284da1d73169c399f3a92b0f7716497bbe7f3ad5d401406b32a41151d4ab8a64e4abc9e4d9f0e9625e447ccaa7e367173c2b734d95a857855ee99864635a438ebc07df29f08977762f7366067c07da7728df8b1a9cf01d3e4fbf2fca0bd74df2be712db6ef984a6b8a084b1432c6cc39a93c87da48ac8ae531fd2cf911fe1de72ce3668e825c6387d265a40716360328a34d279ac30a6333b8866c846a17d2cda7970437dce55daf1e431decea2e1275b267de1d5d1d5870ad52a48549df2d5ebfbae3a62f095dbfab794cde13d5c65e57acb458eed2eb00c65df87769af212426a8fd589d1f9dc578ed6bd0f951ed5d72bfcbe427f37292d1b31626330066e29975db3d6fb4f4dc1fad536716fb94adb73ed5e9617d2dcf13f27c97d7eaf23a3599dec2a8c3969f2674cc4b96bcf8f4187aa2ae2e4b7abcb195ce3cb207347fea68ca63e633e80ce0da643ff2ed32b5a61fa3bb73c9d95275c26d2e487e46e8267b0b3019aa39c97e06cdf1739e93c331efbc18248e2f4c381a3751efc0094a008094ab2929a7b3cbe8706c1b56af2b29d2e387c8d3bc0cb95fb2917dbe6b6e6f8502dfa20c5e0eb16ff9e218ea0098c312b6fdde1a958bcda4f7a0428c66b717939f2015a3b9ee3a94254dcfae43895ccede19920b6a41f66591363d52e7abd0135d15916c59db72e7e9acf7a7c771a8f91c35da9a9e9597ef2a94737c8735a1ce0aa378c8aeb977b032f2720bc7c75926a67a7c5c15eba68ad7fce95ffd21f762287660f39db9f0129341a7ee04a1edbebc51d3e0cf10e937d42362919c13d471af6d6e6ba0666d8e3250ff41676ef22dd60a398fe496e1de001bd59ec1b3f0e2e8be3c37dbdcc44035de2ddff23a6b8307ef4257041ad30af53694f99cde8ba3eb5c3ed679706d8ec7410fee13a92358c231585ea5ef1f022529f1bd2a6718af95ad344be9923ca08aa2754be4ae8b6bca12b1b78f8c11a05ecc7dc0a48bc70746f03dbc1cdadde9597628d1430e8eb5702ec9f7c03b65679ba0b8d4b7dcfe901d91fa1ad545da6d9cdf250053b5f78c585e0be5b2c789dc750d73fc27d8a54b0cc6f529ec52d48b7c49bb34bac3c60a58ea24276c75e5d0e25bdb28366ba09e46d483806a6a1239c2752c97c3488650ddd18af48eae342f001a5b2aee56703f94a89fa9769ef2ce57b4aec8af8b89c97d80ce49d46f4672d738a7c303140740b5f65d794b62d764fd621d3647f5e2508fb28263b2831926efc624dd5500964ebc73f7016a0ee48b8564bd31caf5d0c0544460211b5ede9620ef3efbfde9711c00e03a54bf72584680e9cb0b5d15a39eb9184cc960e4a60dedaa6eaf8a1dec54a9093b3ae753fcacfcb9ae7f02791be9ffb8966308ef894d60b1034218af398979c7751df03fbb0bd6a8679adf34918c2b7dd407a191738ffaaca31a82b81e1dd552c1bf3386320002bf0063d55e59de602bf03ad40de88c64fa2ff3fa9b8fae79657f2f779daaf98005e7312d5355bedfddb781138071734d11819907447d5cce6fd18f9ad90aed9a133ad495ce1413db71648ed80fcaf4d8a07e556803435d99edc7aeb03fa7dc0b39b256e1becf91b18caf7c31bd6531080723c8052cff8c72a23c3a9ab241208470ad6c6f948913af1d9b71d15d1cd9c0505fe94a676b285057492bcb1fb89ab70102df5920128e2866d495688d71c8f7707f35d1618958ee3fd6af768ec7756860f3eeeab7923555daeaaab48dc8167575303399fbbd74e05edac23db4d5dfc54e42e73f9a13b289b4e10ea7e775c2f1c82f565d17f9a9c335fc3bd6bfc8ee7ff265e883f3835053eda51872ef38b7d59ce2fa1554fbe562cc9a51c2efe6669ada73344f06e68443f5527a57746d8475d19c0a5d6966b2f25c6f734b33e4e6508f41ff41f346c80fbbc7ff7ee3f85ffb488f4b960ce150ad72e67915f6ab74ed723cb79c98de30797797acf5c97d6eb6f6476906962a834cdea810f325f2bb6f3c16919b6b3e63ae957b07caf7711fadbbcfc8515efd7d732b4c700eb0422eaaf23d52ba176bb78739351370ccf216813057acc53f24c77d128b2418838ea5caae9989c9a1e7df7aae37b33e718f151cbb1a81a193ba88646c0dcb4255bc810f90d588502825af65e2611f24af78bc35d53184028fdf0775d30e97ab087b8ae4519fabe16708d530349c737c869fbcf02f427e51a67ee1e4f95f31067cb46730f1bc646ee5236be052f3aaa15e934bade3e9b59a1cd113ab282661f19dc02276bdc0ef0855045e7eb4f88d6b7a1dca64c526026cc7f83b75e715b3738feadad0bc5f59ecef095dce355421ca33ee08d6da1c1877b9b9a6345d9b6f8563d48f8e31796e154f2ece6747183965f0b0de5f8a747b25bd5e49a7e7f65fc57252ad5fb65d94273f1917a88afd5cde763ecd6e26bdae31161496616530c5989bcd08ab368141db8a627e6b4d1509a6eb093564156234257a4ff6efac7ca2c3545fc9a823fe1c51a3239866fbd862795872c7f478de9d91d1e9e93d3f46e49fef0f205bea28f9df0df4afa3f75fa027b7ce7cf32de03244eb86fd83d89f6d266caab5ad8a6b939500c1750d505d08c2b1c1f575b1dfdbe54293e580e50f9aaf6d749ea9748d6854af57e16c9738d7476338978addd424cbe7c4683e2836734dec848f8ac15c19eba052aca51e9c9b33622ab5c552ae8a65505bcce4bab2e5135fe1d6e40b909c55b518c8c1d8478c2f41f261491fdfe03ba1a64894ae8aa8c6460b6f44ce76eb406adca2dc548c0392c86745792ad7b5bccebbcdcba1a14a94a194c2ebbb94bc5d0e832ec202ae01131f636f3ecd4c56f435a5198cbd380e140a5d68a7482b73725e6d730693d34177918aec1f807288aae0580c58eaac3cd754c1f981b0795aa1ce7496861ac45c24d6845bebaab83599c780c4af5626bf011a8b6b2e7ef0346d760701f4bfe3b1fbbda0eedae7f26b8a62741cc2e74b60300bf82e4735aaba02a23a90c0f46cdae43ba1d0765db41e9eed9a1ef81ad53c601e0e39b498d692f08420024f78a72372bdb6bbb0950d65a09c70b496cd6d19dcaf5bc3d28fe6593b5eb6d70af592319873f1cf490f43dd989de978e62de2801fdc1f8cdf790dacfa7b2cee1e8bbbc7e26e391687b8316ecb9e9f9e805570e8dc81185b3ddd9b7fc1bce5356369d9b80de60f3a7d4e9f11038fe0dda7eb9fafd59f88f1ef9d51022bfa8c9ce17087eb8b89b1e13b31de4513cf2bc5d7c74d75450f4c8f70dc25f8da1077a782fae13f123383d8eadc308d578cecf2bdb9122e0147e765cf509a00c579937c5865ee80dbc0fc4ad581ec7123a409c4f3f0f62ee9eb127fa88eb3807d86b372e6b1ffb68ef2cb4437495496fbac6e5926be71c2afac34d6cfc66b10c502702ca30cbfc0257c32c65d597ebfd6779aace813192ec777743e1715911b7447d5ed7fae2c84a3dfaf9d6f4c530653cce359fb9ca16f1698f5aff5dae0119e63ddefa52d6f5dfbfedee32927e8827b3ce51e4fb9c7537ed778ca057993505cfcea36fc5b26a7728e2d5f94433179d9876730ca53096d7769b27d842310e59f5edb519d2caea1d0d87e96ffb9660ceb4cbe2cc63b2dcca5cd75c54635b1a63f40dcd33ff8e6ca6e23aef728473517ba7660f30eee01e43bef761bc784e07a47eff96cb9a383f6f455b898a599c98a54ad363c3a8f1f62bfbb3a3f0875dc7752736e8e602ed6cfdd3bc37c0175bf570e3fc26740582ab5ef6d2aee50c626ce9eb1a3fd339f94cb3ac19985edae327bd32bc221aad6735ba9dfb680532be6feadda9f985b4f77aaad59a54fb1428fe249fd89a8fe29e95fe078dea97ccf55f234557ab58ededbfb72e55b5e8bb60eeb97fe68da7a1becddc3e9f39873be0bf354076cdc9ccf65ecddcc9e5b8cbcb1159427b80e6e258951239eff1aeabf480d103c2bd91ae273ecea4c1e0fe16825eccaa799c5caef469b73ad10e18cff1c4d2571d09e3ab62a61acc721079f1be84cd3b5510f81f46ec07ba2cc59bda45d0dc898e199dbc39dc7e7f2eaf3fd3c39a563bdf007ea712bf2d99d765f55beb38aee2df9047ebb43f7d6aebe7557f79de03a4cc9d76b9b8b6dec57e8bfa1d8710ac772aaa903f7c4189153337e44845d9fa9f3bdca3a7c74bf7e74c7ecce4f7e9f4e3db9d79d8f587bdce6721c1e88c733d5df029f23e4d710d3a8ce1873e7028b01bee97510e6b0c54833b866b5f3d41c5d97c3774c5e0ceb7ea7dcef94fb9d72bf533ee44ef145c4c35b83ef328cb97009f7ef99753d2b841bae0a087f58531e1dc465a08a513e6e3dc6f292e65d27f17193e5e2dc9dc177b646840febc961125fa5e69aa0bc358a3033d626837ab443a13b58e1fb12c95018c517acee34c2164c71c0eee383b8aec538f8deedeac0f2123c989f303f80f7efec58dd1975cc6ea82bda614c81c2ba8ae9c24ad47ae6710294e60228cf0190773e678837c81f807117af77c5fad3c3e715f3bae3b39a964fa8ab93fff62cafe3e39f9f669a225136bc73dbdcd264e800cb2feacb0a4d26001a0bf7727a1b3d909edb443809f05ca298d95e8deaf5d7e14630084ccc2bbfc0f7b640f8e58f7369d424eb529293fe02f27d3637fc2dd4fabfe13d237b15e5a3c9dda788c08afadb939f4bf4f3a29c0903fd1611584c8bb6b0eef88cfdbc513d25e66ea92daefbe854c17cc9e5ed469c5e4f33521311903961bb20c20c56f540efcaae59a2c7e4a2dcf6510fe80b1a53a413795bd9cc85b64bea1ba6043f01db6ed08f36bd41607b600af5dfa7e40cfa688e62cf8aea9f3f206e14edf5a9f1229d36f9b5f383df009de9cc7f10fc0dcc61971333faf0785025d9cec6823e659ce763fb51d2b53a7b7ec8a5798dd3ef3b0b6701d78cb69631af5a173f3bd6d9ace0688a149a4cb36996b0112e29d7a9be89046e4cd531d7e54b1e90b5f4fc137c8729bea75d9cb1c82fac850731d1d370755ddd8fde55b296a3000f696db21285622ef1d8ebaea58c797c93bd542b8b1db866323ef809631b684d27f4dc503ea05ecd9302bb3bada98749827b5c6a8ebde1f93571446617a88fb5a6be308d69d1a63f08c727be2fba578b64eb2837fac7f9dba7f09ddf2ecff95571b46e90cfbc64af4669fef00bf1969fc8977e299ef2233c56eeaa2487a553b517ea6c39cb5f9b35b4490dbe05fd93d49d598517ef4c3ebcd378f04ee5bf3bc27b6733add0389477ced18fa772155d842f097320b2262bfe4ae882aa3c63e7f18b9dc82b760a9f18f94efa3c1fe735887c85437d64c4e6c73cb585b1ca43baa7ae58a507f7595898d087ad21be13fb0c21ca4f9e834dc2118cbc39c97526623a29d9ad95af20ee854171fa44dea6dc58efb1c96ab1c977d4af77fdf8fa337ccf19b2fa4cf02f2993b5312e246f0393b1434de56688c318f91b365a675ccf46bb86b2c1755d693fbbb6184e9f01093e7fe4cbcd85ee606593be499d91573a2bba16ef421b738efc331ce743b510a89606d7e0c4f6c05dc62bcb38e27dac43378fd07d7b464c12601ffcb51df16b37df758c4bea9a5e676e32f6ca567ba7ca4d9d7afc0dad7924fb9dabceeb7e1e2ae2a965622f35e048b5e0199c0b2f08cbec8cf311c714a1ec1843f9c9c173b819b9ef47b1d83ec2678be4ffa471dfe5baa22d63b2f2d2ee8ab5d833d1bbceb169e2f1e2da74142fc2788dc9787a9d717c69652b4dcaf263aced7263bce74c2bfa8c2436787d39ed20ddf27c463d8b02ede8f587d9d0e4fd913c76487df9a7d39387f1173ed61e20986657b703645e9eeb2ac67e384b6fc6988c4dda5444604db8c978c851706e16efae70dca0ce9ed7015c6bbc8e3b7f2fc6b9317d79a1797228f06253e8a63ffb09f3f307f35379b5a8a406f5de3f74ef1fbaedfea1fdf3720ceb2c96455b69623c2c059f75245b6aaf7c0fdde9ef4f8d03ded128ffcc0e8aedf4cab92d7909f59315d5d8115ea49f43716632746e5efbf8332be6982e27afb96b673d37398147394387dc21b1deae9a838be7795e2eee34f9dd5ba7137373e9752eccd1998cee194a7edfcc67940173c2ad744f0f10b7dc5d0ecacb81d29a18cae6b7910381a7579a0710ef13b68f39a80327ba2a54cde766f6efdc3a81d3f2bb1959ac94e7cd7cb774be37f3bd4a77ea91fc6fe673656a5e3e636f30c2abbbbe5f268bbd33fc3179345d935e561b68136e6ba0decc5628bce07e59d39329a18bfaad12fd8cb5c564e1f8a2f8c12963fdbcf1055f0e8dfd5acd5aeba9918f54432df520ed8b9dc7bf886bef1dd447da955db3cd6564bee618d8dedce29a085cfbdf1d4099a011066ff6b3f7d86c553c86b877b2564c86337a0efbc3442feb90732d565a690c201836186f21e252477acdef3b3bd9eb7f1cc642a2af05faad262b87d0eed654696b3252a0a9880f1ee327101c4af839bc5f3b99fe8c7d05442ffecebc98e115315c0fbd17e914e9bd0c1f4ac9be89846e2018a3e59e7d981faf4a3caa4cdd7fb18ed9f10b54a9ff2fb2f74ec6552ddb635fe2fe3ce92ecddeab492c5d82fd7e2aa74415ffb3029ed171db715faeecd064e5f5c15e1fc00ddf68a973e41ce69cdb8218f2217b31e77359db317bcf9fd05f8370db6d6c4b84f0fb862aa239dc18eec52998b187cea26c7a60632b23c748f2444e921cef8887203051fc995b695e0034b67f1bbd367b5c9fd8473b794e7561af5cd03f22d84957f78f86f03d67d401601b33b21f07312f06c6f792c2b1ca51bb7adc9ea3f3c0d755894275ba1e8a37425b6e65a33c68dade4be02fce34559a097c67ae33ad10da7da5fac22e5a0383b0b9d25cf3084f65a7d771edf98ba3b162d3ea0e76358b213735141b586cdfd1197989e36bf254e05b8cae0a707e493b3d81ad89f1c03465e39bac18d8bc5b0a87fc77c80d27e72c20bc51e283a9726079f2f468ff5995d871355baa48870b7b327ac11cf29b225306df9ae25a017b6628f05d2f11465e6085dc5457c5c0f6e4e98de78473d709db5934b07977a5b751dd066bf000617d47e7c050a1fe904343d5815e81b3b8e4b9c895ed287e71ccc68ae58ec4a6059e06a80605f58dcadb53fb18abbc3f3d0e1160bb46a22a9fcbe23d2fccf38c28977b7d1342a9983fa0708e85bd9a4012fa432a94deb4426eafe2f35f989b7e1bbebc2c7a5b872ab45b4f9eff68d39b5c72fea2387a91a5419bda4807f8cd0ae4fc9e8fa92f36b832f91a306e007acf1931ec01d0bd88fb1dda5aadb93ee42833e426243e18e80ce2e386bf7391afee47fd59f5c5014d6613d70c0d304778640786f06f1867550402dfd962ec71798a7f17738bd718dfcee131c9ea8c52381b83c0e63739381b2fd7c0d9d81a7c2bb4895cd584ed817cd4ba7044eedc5aa9bbf0cead75e7d63ae22fddb9b57e6b6eadf6617f1bf1c41fc2c93ee637943f93a5cf636ebc2a19fb7baf761ef3cea2ac34034b954196fb64870b8cebf5231bc464c4ffd51589aae06397f3adabfbd4d056cac68d91cd74c69c4adb69b783090cfd5c6e65fa52a0791bf0aa629bb5a61c3dbc3bb78622423bbaafa922eaeb3f2b96bac3268fb0c8b7bada477b6766304dad10d5c3132ee5e616de1b9ada770cbec3e838a6188d2f3079408d495fa9c5cb213e5724ce086d1a4f0e516e45e9477e41a82b1ba88719e22364725cb83e68dcfd903a81dc754fd40cec70fb23bf8091291c9fcde0d2fa3d275a138b416b4a197c871278d7b5bd118a4743fbce62c0c4503688df19d78971c0c2fe59ec9becf60e616d435f0d7e7f0e650e3e0bee67e6fe7b477ea9ea7eca5a05e26b2d8cbcbbeec8ddf8496b17526b2f1c8df3ecdbb8257c822bfa2788e3a0448d42f5bd8a7937235bb9640dcb411ba1642df3d1584a7abdf2e22a093bb6446c65ef797b5c6aa7d60b5489db978fd99f16afc7ba76572382f96e4ef55daad4b857a8652f11a7d93febacb8b2d5a783fa65d4117f8ea8d19178c1fef92e8ad11eeacbcdf95cb64737bde7a770e1e018e5a2949d3f6d3ebf6571e933b6d2b5edfc51e2de85f7e808da2415f369b9f63eba7ff1dd6cc33bbebd3b8bf06e37d45eeace879f8363ab52a7744d2e90a275c17822e8ec453152640bc6f606b48979b04579eb84bd8cf11b2e8b395a578d84cd03aa9eb83b8ecd9e87a947e2bb182f636a401b96ef3405beb3d4dbdc5253f540ff186eb391a10ee6c99a5bb2ae042f6d10582c37d7d4a9a329cd29d427b607fc6bf22240fb64cccbd39f4391b27c79af77ac743d9b2733ba2a366dde85363ad4d504affbdb55e411f75c68540dbe679bd4b29e9c0b2aa8a5bf0cbe1d5987c866f82cbd32480ec8d8fb1e58229be670ad6e5ecda1674079c1f7675c6758dc8743277dfe43750195b1882bd9c545ba6faa07501754e13f2a730fbfedf856d0fdabe39eca89aec0f78f1c03de5d4c672bf0705d5ad00f7134b5e744b2b5cb01a21edc29b2c778b084be3e7c1fface5b33cbe5f56e3203f073f2e8c8bc1b5821aa9bc11c59783cd8f7efda81c9af1dcdc33d0786622fe1fb63ff9dc76b62332e30d3e3c775388ab482e3a95adb5cc17638d986489ed3011ef39f689fc959bde6be246afb96d05681b69611f3b2619e126293b186b299e7e678b17f81ce98d0b567baf298da13522384f6596f57f43b4ada37a5ec9c7d9d73513ebed2f74bc158ceac753b87a72ff9dc0fe3ebfb88f3f6c13c7ee5eedabcb3f0996a713c2988e373f5e01727f9cd4e8dfbbfc7cf99a058fb4ea655c4191110cc1b64b7585e33c28c0ca09d83fffd34d3fc29941d17c5b419cdc13ccc847799155716db4b71dafea8bd867ab73709fee48f9bfbe7ab11722dcf0676fd716f0af98835f1f1d4d9030975f9ab02726379578dc5fb5c68b24f67c7e2efbd51f7dea87f5a6f94cd77429d91eb88b33c27ef264d157d5d3d3de6f2739ae2a520796411c0b3a9ab3abad748df54f29eac331658305f5cdb654e76987c248e19ea2adc6b9981f72ce2324edee79fb357e94371514ca6391f0f69cc4d80ff56437c5b5aeb8a0475c67b84c98fc77a063e30f9b7e6c9dbb85fa99b784f37f19e6ecfd154e4eb93b32101d203846a5348cf17c674c0bf5f9b0c58463892b8563df9ecf47752ef22b81186f2886415ca8be5b5e665623517e5dc6639a031f04eeb39981f82e4fb7675ef9f6efd6eb17e258537b493cfcf84d3f0928331747e0df230835d34e1b6b6caad4d564c721ade7e0df2347337eefccad3e677af53b8449d82f339fa35eef550f77aa87b3dd427d63367d443256d1a3ac8c63ddea612ca8b7d60dce339b2ad5236799b1b26f2c5d5ce6711ae614ebd348a1774c595d9e692be88a3f95328c3db4c6fc18dc446906f169acc3a65530b9d447dfb913af1caf3fe84f1134369be9bac086d21b846dbd45d5c07e64ce6fd881323b6054ef739e517f1a5e67889687ad2caf2b995e575285ded39fd847d11f7e3e071d5550353a40b9d037d99195b79cf56d9dcacadb26fff5f04cb4ee0d3cf15ba126d75b995e50f50bfc767c1b22bc4883d717ef73ecd8fedd34cfa2f246fb58f8d342175191873e6cf3e85f46ede792d7d564b9fd3dc339abc5f6ab35fe2754298493ca0ac30cd3173233d9ccf093bdb1925e6928865e4f50526edf3dfdd3e712dbe13f5df5d3f1e3e054b8d698516df42f87456c83d6b2ae76a1e989fc9573dea4f4be4112f5a7371742e771be56ea3dc6d94bb8d72411ba5b3d6e29e73ba549dc92dc45b927a311b3338b7eface80e4fbdf3c6ed9443eb7338a6929407947f0cec6e2f5dab52e1dc9638b3d13aecea9edef6f29097e196ded9600b9d6095c5f7d35b109a4c8bfa39149bbadaabc16e49d9d92fbaa207a607aadc393762b31c9cc7addb2b8774fd425707aece77286dbf9632d77e39b7be11d5c5b022958ef1d1d3e49a7e3e1c8354bcb2ee5ad8b4cefe746b27ba1a335f984a87b279393c118fef50dee598fd11f3a2628ca2b86ebf503e33b2fb4b57c136b727d497e01abcdb7c2b14baee5a5307b3a273918a0fecf16ca3f58477ef5c6f738f16d42bcfd4a4cf83695eef68349733e798f47117062337ad2cce5654ffa26c80c60e56d66437b6827392f29bf76a87911ed1035dd94c13ebf5646472dc44cfd2a4c6f4449fbe841eba7e3da708df6df9fd549c5e7821b8a8eab91c619b95a60cb6fbf1a7d4f31ddd1757e69073e1dc0c780613fd3c75d7a10dc9bea472300577ee1bdf72f56e6f2ff694b67b38cff25a0b81ef40db66a6ab42aaefafb63b3bbfe67d06efca2331d35c7d61ab62f0aa266cde0fc4c618220e69716e28cd5f57f053f07323dcac241f03eecd246756dea671b512f2036544694e5f995628f0091dc403d4e366865c109d434369126c31b045cfe0916e8363a952ff714dbf47807261e15aa1a2f8ec2dadd9e7c3f0f3eacd3f6772b4a7637a10bd8e7aa093fa9e60af684c67897a9811fe0ac6f0d3944787d4aaa33540787b2cd8968dcd5d14a72127578dea26b1ac4e53f2d98e70f124d79c20bcf0b5a68a448ee13c314f019639792a74a5a6c596ac75babd3ebb4b6371df63d8f718f63d865d770cbbf2b9bf4c4fa6703bb8eb077938d338aa34d2e7e361190cfacc384bc440ae198f897b5094e41d74c3189d77ded03b6fe89d37f4d3f386de42ce321987b934367e7fc8d1057de508473c1307ba157ffde09ac418870518f918f3301dbfab628f9d9b9b3c2297115fcfb19abf433c731f51f317618c9d8bdd30225806f1de886ccfb1187765f9fdb9c0bbb4a97496afaa083465e0627c5374d7dea46c46987a09ecd6e479f2ad90233c4d6bc7e8ca0b4d795c589eecea7c0761bf62ccba1ab15bdb156a5355a4b373b1866f44264727609715f8b0926bf3b26fb26233f6f71431e9dfd1a8478019a53938e2b154e8abbd76ffccfefac4384d88ab976941db255a8349b297d656c5b5c94a00c584ba7bf27cd9d8647b0ffbe150af5b9c8f83f6a4a9206cc210d93f6aaf3c2766f9f7a5de6b7932d2c724469bc21b2d83f197ded3425ecbadc9e894cd74c2dcdc44f17ccaf268e5ceed142cbcf49c9efed5579a4da12bad747fc06aaa085edbdccae2091fa667ede2a318f7cb33547181e6f9b65e59cfe5df7702565e75992c38af198ecf3258ac07f9460de833746dd7f246a578418fc98eae8a8ca148b9b66cf1f32aae457a6ea7ee43bc1fd6739313ba12b07c3d48e45a169a3a75acaeb8b23d30d5871c377a015b68c3fd5365c5e25b7343919aa5f86e8f3dab2bae3446de5afb3839c53aa288dfd6e742939180de95a1cebac4f3e69af27889f3e0db0a986a4579dee275bb0d5dcadb34f2d7a08d34e4304e9342e22ade0e9be91f7b1ed8810bd7c1f2f263b71565053e37d0a378e3b13316d555a76d82a3182a6578c013753a877cd343f6cbc975b3f13af9f2d2503b74c2674dd5c866b835163187d425ea9d8ab8e0cad67775771c2997ae7f4ad740d791e34ebcef3c4e3a9cffc158512b7dc2ad081e6b625f075bcc63d1827b94ac8f0c74b5573b865d5e7fd385e6718bf5c6f7dcf23db77ccf2ddf73cbb7945b0e32b8188bccfdf7d972cc39f349d47bdd628ef958ff04c6c959246bd16e99b7fe8ea776c753bbe3a9dd309e9af769b048923d311f92334ffa27b7c22bd94ff7e8e6f2ca9f32b77bdefc3cf93c8577ad90f7944f3ddbb7426e662bb46b4ee850573a530df3a9a371dca85ca6b8ca4e99d32df4980b076265a9f3a364b15be8ccdf17609cee2b7712b5f0735d9128782ec75dceb579e7545b3dbfc7c003c0e4fbbb674fb9ecd8cfed954cf7431ec42cbc4c4fe8115cc4d2eb908c775e2796186154d298932029cb935afa67228c4c71effd67f0600d701f218067d864ad9c3a092e1b976b26621efbbd55c8c7d96c3fa0afe6e0fa44bc6fa87748ed3906df6273ea251c74a7a6f55f8c616e61cc7e6063ce90b806da0a6fb4df263ed7999855b91e9b83b59325736ea57b2e8be47e3f0e77095feec5c99c03c762e535d4f9113fc327f1e5f6780aa25acb13e777af81be400d74de3d72c82fd598cef255a181aea25c1da9d9a371ee0eead68f8e751dc2a5ba2497f7b175a8817b4a531e9d37450667f2f044772a8bb98d2560773147626c4744fc31bbbb34e28fa1b2f5b6f5dfa59da5f082f621ca7bbcc4bdd45d1bf5d9c2fdb0c2ec3dc8b996374ae81a798af0b54eab4bbce7f5ee79bdc231def37a7bbaee9ed7fb5df37a3b7f06e86d3aee8dc2dfad9cd7dbd490d78bf46818e51a4a625edd84cf91ec29bc08efd7a9f9955be3fd4ae5d4b0de3cb58ff4ae373f162f36c2befaecb84ca3681e9d1d9e572d38b2d04fa0a5e7fe68ed684c87d294cd4a0f51ac6c6d792dcf503650ee4393d5033de97327b08cf4f6ce761650ac54a2b55d9d4006e3eb46fa9500e1891f72c398337e98e51720365537292398f3d29c703f4794c4bdb5516f936bf22d1fcf9d0b4d460f4cb846a48f20d1e794587f829143d6c86405e86f24e2b35c1ae3ef46f20f15316e8fddf935c69be989a622591da6c6f0b938839e777815a26b4119eaa4f9563f39c6edcaf436cd5735c9597693f55e65fdebdbad2bbafbd78573bbfbd7376a27b6fff1fef5dd1fbdfba3777ff496fdd14cbec780e3efa2f5c25801d3e633aacbfa485f333dc6741de3a41e8eb5cc3a453e22b4cf57e624836f9db06f49dd0245f2513393457d78137d086d01696e2b28ff3483efbb953ab46aeb5dec73eead45024316614328cda82f2de367715b5ded473dee5b836fd126df77346fe4a0baa5ae0ccf9903d7fb963061f6cece219c8dbaf0b32f5cf32b176049a5b05efc816b284d645f9a8cf8bfba2251378249945beb7bc69ceac29f760ed7a3277b5c6e4f7f276bc492eb5f17efd42ed697dadf1bc2c922e37b49cb5f357eccc239de0246ba535cfb9ac6d27e55d377c6abd25a9adde9c24a709c5fa816382f7653b6ee35c9977e81ba57527315ad49545fb55fa73833195080ed58e8ebad2dafb5d5df82591eb7cdc158970afd5109fce9396101ae40a15f6b75e1fb475f8de75e0117cbf1f14a45fb717cbcf4e9e3d54e1def7e7d5bc977dacafad477aecc53d7c8e7f270684a7e97e00de6d4bc6b8cbb321429c38d80e5fb48ec7dd6dbc78a48c77287dcc2505da03f5313bb2bd27b77da213f2e960db04458316a2fefcc5e228730ebedd7a57fce7984bfc73ca4fdbccde79cc76f723ea4dfe37cac73eee794ed23f07430e6e5e9cfa14859bebc873777a8de3aba1b745507960f2803e5b2e9c044dc3ca3abcdc9f246fbdc9de9389a632ae05157fa2dc11f84f67e7febb7e43d5035965d1853ceef338eeec185a13aa7c4c1a3efbb45b5d799fb2ce30fedece0c1e1f1adb08fd274cd1769aea9d236ffee3cbf96db64d6c7f62f1f77aa00373cf75d87629f05726cf2399c7c0730cb2f28d373e3327af3dde05b087bb1629ea4c8ef3ea2bf644657c5a6cdbb81e9590b4369ce0da5094ec1c388f780d9b7332b9c113acfd6243edf01bf2451b3313aaceb4c9623380f9b6793ef6471172fc7c1e5cbf363bafbfc1eb0835807057bbe093eaa07c4c638db37a93becaef051ba83b28ed92ab9324fcec3f078ae33251785dc0a67ae1f5f1277e6a467efdfbbd1fa137d792579752e62a71cb12b80edc9e1581dcc0ca5e9bf2ac4a61c5e4b2f0da69fdea624eb19ed53d1bbb27b77247759f3dd4b07e343f50d8765666bf1f2bba174e6e7dcd55a110f75ce5d5ba40bc9eff15c0fc51bf17cb37aee08974cf48c6af67d61dc8dd837b977fe7ebd5e715c29237f89e7569cdff5747881dc6cce9217a6352dc0952e19339517e7bcdf38e7dd284fda5aeaf938db25c7bf6f235458fbadad9cf97d351fafaae4f70353b12adfa37b3a33ba43f1193872d7bcdca69f7f749fa595cee7f300945c6b609e754ef6fdd80aef9e9c73c62c76109a4cd33fef19f299639073f21c85b1928bf226ebc7fd934bd87cb9b1a4dbf56563ddf909631c47ecaca367f1a5bcce6ce7d5eec8ddc3e36bada39ac63eb3712df66ab164a893eefbf779f72fb88cdf76699bf3888e52c0635d3eca4deb504fb84d5be89ef328150b4236cd45cedf0dcaa62fd1d665f2d737a937a1df7342cc399f9351d950053538f9b5efacf85e0227d5357d208fa6d36bad817b9b77c7cdc42bf26da4fd77563b13fbdfbfd8f9c8b3672e82555df65edd61accee0de5d46ef666286beb4d61529d094fd7c73cdb1dce3b129a5b9d5553147371cf15babc41df3741bfcbedfbf987eb3f84ea82914a9f1dee79a2da8fbbec4bd94773676bd7d116778f69e3ffedd621be1f877916cf7a13d9283039bdb9f01e56312afc73ea6c0687f5f535c64bb7335d5d4019079b0d087346ba883d9ab3a084c45fe6a324d70025ede7e7d3640bd80e86fbb7771e85de97ea4be63c3bfa9c1caf44697c2770b7515f5aebc133e39844540eec3c47872ed8c35b41175554cf0c609cb1f747ff923748dff76e6bf5e656af923ccbd4fd3ef7d4fdda7795c6e87f608984a27304fc06cd8ef976a72e68423cfe35c9d1fc0716e6b58eb228c765c4bcfb881cdcb6f16df81f77eccf9a731adb9c977d616b31f27c5f8071c3c1fc0f2127c9293c75ffdf6e3af0bf0fbefafc7b409a09c6a436ea223d9101c8bef50362f87085fe5f2fd5bb10ceeeb7411601e6229b95791bec7f81f72f24edce7414ed4918439b54527c997d09187c3b7e3fdb0477a608f72306b4ab329cba2988f1f6ecf0c7500462ce7a2de924836e07dc16f5cab2bedd71f159e79d1b2ba8bde7fe505f9ff66fa835e2fd476d3fef13e5bfeb8404f5cce3ac658290433fadd80b641ac37e13c5a4ba1cba13ec6c1b4e7f4b6d347e91a5835bb33b69fb7c9e3c33cc07d49304b92b2b9ab8338840975ae3ca67b8de6082789711c4dedc1b31ceaca067e9ed1879c3c9aae2f83c59d399f022fbad83fc33a682cc371e5de3bacc1034a97a5b5a648202187ef26b3996b2ab7cdb585aae883f7688fa499aed0ee4f67f63f8d874660fc1afb8bc6f7ff6bfc9c3a8def8dc6434332bc31fce9efbf1f1ace64e12ecdff5833ef8b3db3a6e35f5f6673cb00d3c9e2fb973f87eda7d72f1b0f7c995beed833f09ffe0a7ecdfe3b01e3bff02fffb399dbf0e913ffbf33f87f7bbc3026600e7ff4f17b0abff5d0984fb6e3c6779a6ad2adaf0f0d6f668f1bdf1f59fce35f8b09fa3a43d1ad7fd3ccbf69fa8dfefa9dfdf6bdc9fee71bfdc8b418a6c5fe8ba2bf5354e3a13199ff654f7e35beffd700f3f143631ea2113c8f578def5f1ffff883796808feacf1bd453d7e7da45b0f0d094cfc69e33bfdd0e8a1b7b22c433d3e3446131b8e87a21e1afcee47f5afbf02c3a61adfa987c6c086cfa41e1ac3d4d83930c59379a4f03f67d674def8ce50df1e1a4f8b890747331c5b8def74f38f16d3a4be7d7d7c684873f89bd62343fdc1d22cfdf743a397f9e857ea8f6f7fb06cf4d178de7f3f34dad9a7d2ad26c330d147bf36ff68b5beb27ffcf1371affd25fcec776e3fbff473d500fd4fffb1beebd3bfe851609ae5be38b3bf3c65fe6603935e693e9bfffcbb4bed8c6c2f8f26b6cbbc6e28b33597c7197665648f664a4f1d010bc60f66bf1d358b829718bfffe3cb3f01fde8c5fce78817f1ecc66e4a79eb1b0dcc6777f09c04363b830c038de55f4afc1d898cf7cfc597ed69980f13cfa347e73fccfe77110fffc369e2f329f86bfca7ca337b397f07dffd720c32f3e1e68a413bff17df16b397e386b11d1447a33fbf45d7066fff166367a8e3cfe359fa0f5a1ff43b3e88c07682e9102383825b257158efedf0f0d38c2c6f7c6cfe7d6a3a9ac1ddb93438b81ca939af4868fd071864eea0a01de6da9892c0ff8d73767f273fbf8835c1ee822d486dca3a96c96d63678b4b6d0211a50d6f36cf5cadaac1d36d95ed85c599eb5eabd3fad7bc396f636dabc698c0b4ce5650fd87cccd373d3ef7d35df12cf61a4ade5f596a607b676bbe99bacb632fdde8a38e42b5391294d8dc6f26df39a03981e3f37e1c4eb1e98eb15de83d6246b3874dd85c937b77f668239d091b4bb83f59f936f2b8d95422d6c2e0d55a25e3d7b654f5a4b2b6c91c057fe7863c7ff058151bde88aeedaca86fa391437b6d299a3465ca5bff73d9bef843a2353c84957f1a575ee58b272f1fafeb4301530870e06744ce3c6b4c386c1c166ef9f3c155f8051837704c8388af66ac849ba3a70e38bb2dd5aec643017aceb9bf9166c89ac2d76f37884f35cf6daf4c25036f0a2864e6e98791ea3abe236cfb881cf34f85668470061c9bdc7a0870830c462dc95e5f7739bced17c6320a07ca03debb9c9258114755ede1a8abdc4444698bc0413f3000216d24780f4ba077c7b47da9e0575f72cafb510f856446cbf3059119140d97c676e32f6f6b5cdb9d0a0d5c344608091434391b79818a6b58e49e1fd9e63b23a347c29b86eaf136e64f023c7e65b6b53696ded3697483e80088c28028ddc816b765ce9adcd457be5186a0fad010ae8be35e3cfe1e67a54b4f12f026cb2de339499e2b5c5ebde5ad9cf9967fae2ca64fbfb4665465e0f18ea4501bb0594599def505a0da4e5a3ae3c3179f04e8c6407e946051ac52fe5406cf2c06b40047c0af71f2cc9338821dd9998ac4c452053b622ce0d45725332a9eaaea16c768443508662128126a5296089c041f99d915f3749c2e1754360347dcb6b318682ce1e7a9fe5d1f13c35af4563409e9163659ea529cda9c077184d01f30411113c971139c4d2e63b8189405db85da0a37da344443901717c970694a10ee6fab01cc1c28949667466fff4395af33681c5b805a430177e9fb7712db6bf3095d634ba7bf712f27b005ec2c9c92cb29ef11d5492e4e9b4a2197cbfc4b6517c4f9624ca386f5d072b2da483527b782e107f62ae288953f33b6b231c48ced36be59dc7ebbe93ef8476775a07e064421f88c062b995e94b81e66dc0abcab9963f687e38d952de798f03bd31e06189b51236794174a14a203d617794008d8d6cdd2ca9529270fa2260b9a7823cde1a586e12d81313b79d4c327e2c0194b6773f80b82d71477d3ef0ca63c470789d62a2e6b8097e67132e2c4fde5a7c6b69316062f2a305d1790b83919b563609113506291ba0b103e8733d5a704f9f73d733847ebbc934b70622dea5d79a2a5621910d4d66034a92c7562c68145d8d992fa0ed6ff3725803815b5b53a45f50dfa2a4c719c4a87de46b6c108817f65b10c169109d2de84f435f05eeabc9caa1c6a4c91d1029e831c0dc2320b9a581719f37939f53b4d64eb4d609a0b6f3e7f1b97c8a77438d89796bb69de2353cdb96a90d944269feaae15cf6e07b4adefff900f979c0aefc6605f700138840dba84521b2908898e4adde98c01bb4d7b73b12d63c005f936f4179c5c4259ebc30d9014000b584bce62ae413e7021911f92ed3b02d942a042c453a94b0d5e5d018d2c9247061b17a192288d224107904109edbb47839b479f911eb82cb823e639f2f92ef9dce45329efab71e6a8a8d7f6ebbaec60e684d59cf05beb9823a2f96b1aeb8323cf9dde6e5e98f12e7a1a2fd7b12b0b301655215295d75a9d4b97edb9d9d6bafc3c50b2d0a48818e9c875057d63707943bf2e439d12b179069f26f0515c320ffc5c63a69a54fe2e20de887cf0cf529267f42855afe94001f433d335f0a9dc1cc507b8ec67496022f028187ff074b1dc74ea19d1cc748b1fcd85ba1cbd196cfad2c66742b40bbc378ce0962fa1b5aa3b273ba3298340d741eb8af2a3a1b370768fea6c8534379c1fb7401d0e88838474324cb28d7b1d09541a00df1bd98c881209b0dee7dc2debc0d72b829de33b2573bf2687cdf4c74b5476435f5b904c03994e105d0db691bae2e5d7d49004394d752a559a6b1eea88d72d436c9b34900ce6d680cc9b1755011f8d6e63b0beb1ca236b427709c239c9382bf574670af022b9577e2584ded4579acadc1cbd38fcec7a1c27055a234855ec700fb67cee71245b16580cc48912f0264cf69c2d9ad8deac2bf6f53058a79763bdfa17419cd7561338032da34652834187bad2c8894b357743842a0fee978d9258122f9ced66ed30b93c1e4107a0de4866fe89d5ce29d1c5a0f8b1db8a6fa747ade7bba2f5b50b799e9f745325ac61eb92409624f53254ae0e9958e890fc818777a82d82255e770797f359f2cb1581ed3eb01c65df8772955749e13273adc3c530880880ba3119904bf93ef0bdf1fbb3ceef563332f09bdb7ab613a3d5683eb79e29cf0cededce9ce3ea96120350bb5c64913be635707169693c856a93ef6da62a3c572977e96fc08ff4ec69fdbc453146b3c70ef5c10e420ba9fe2b5bfbe7d346dbdf5a94e2fbddfa7ea78f22ca447e579e29975ebf3a8262e7966919d13d5419a4a6baa27eb74cb3439dde53523af71bdc9d5ed924142c79c42985590c74adab5418af8a8dba1356513d94093f1101174a73f83ce00ae9f4cf8baef2633003fcb90925f4b77a7498a9244b389d8609ac8c85265d78c6c1f5e6c92d848ea3338eef239cfc9e138474e8cc58f622bfb4ddcc7ea1dca122e97d2d9d9ff727ddc28a650211e79508fc731b10401f12e1e61a4c806d78ea60ca628871fae1d5da15d83c4954d7630837283eb754fab3511aad59b38a7d69c08c45796c939c6f6fe75d7a1727ea03cb9eade193a569f12cba22f2fb1cf4c0353118185644bde963c4f67bd3f3d8e034d8687629cc5728eef305f5ee8bb7afeb8215be75b41514dd891b35bae56ecf0b8aac4c90fae39ea737819043a03284d593b6f8408314b5cf7e365f073389cfe81f4db900bac905b939c2cd47173a12b0524378b63e6ca666eb2f656e0f5152603857b23332887c4688e36e43c5bd9cc055e0c346f13988c1d6a2a3733949e6379f2bbc98a284e64e5e8f0a3eb5cad86ab706d4ad776e5ee5314bb69c2318495be7fa8a9b8ccf7aa9ce11db15d195d9207d850b46e8539bcc4f392f1858f8c11ac2daf9543fe73f1f8401fbe4757456a5c32cf516087623d94000f41df1fae9da46da2b751ce37afcf21ee497a6d237272eab58dfa9148dd42cdb628ea71e180e50f9a895aabebcff19f60977ae8ff9fc32e9da2b15ed22e8deeb026ea718afaa454716db212cae7ea6d2e40315054b3866a697639b4ee4e2e2319c2351384189c6f4d501d4499f352a0abcbe44c2b9da7fd7599ecd615f9753161ef5841e724ea9b0a2dbe05ef7654c36828280e80f2e2b62a2573a6eb58870dd7a87edac6e72a22fe5e695e0034b65fb596bafa9d9b03e452c6d6b79566d467b6d03c3944f786da3b5e3372fefbd37ae100a8cbdb54fa139e892a3626d1214be81f581ec95fee40337ee92a60a15db557237decbff2750047e77c8a9f953fd7a77fc9aa14e9ff75d41f88eb02c1d646757528e69c98f7a323e3fc24fc8f1aab5ca0319db9d99d22198f88fff1b97f720ce531ceb1db7c67aaa90317d51e76a39ecc91633072d3665aa1deed395067913392e9237c3ac1ceafeeefe5ae53351fb0e03ca665aacaf7736ce00408d1c6d5bc3471577939bf413f8a776953e92c5f5511680a21d4e5c91cb11f94e939c1f9b77117e9ca6c2f7585fd39e15ec891b52af77d8e8ca57de5cbe9adadc98a14eaa9f84de404f5662320a96604b6948a13bfb639d6c077716403437d0534550aa0aeb2985648c8dd1c4da157a667c531238b95df8d36f99eda4be8b0747ff73fd2af6e1f8feb988a4c197cebb792358b9580c54a118921b07977a5dfefa5e27bc997e01ed2bf8d9d847c99684ec82672c9dd139acc7a29bca0bb098cf90ef2535fdbd006c2fa17d9fd6d5b853eb8de155d9b79f4055e42b92dd31ba03a397d08efb50e95c495807eb7c0bbae1572135d919742d70e6cde9d5a5e878db0292cc65dd9ca662af0cd95c06f56a66743ff61a20fa11f26dfe37fbf71fc4f385ccb8f3009708e14fb4338b6dff40fe9e5ca3ab85a3fb65310d3139377f7097dd94e41ed8f1cf5c0a6f34685d82591df7de3b188dc5cf3e973ad6aff56b075a33b2a013c7da8772117a0daf47be5ebed33cfab708f94aebf8fe79657cb99c42dbb9c1c733816296f09a87184a1968cc9a1e7df7aae37b33e519c1a8ddd2200bb515d4432b686e3d61540913f485635427c50ba87ea83e5951035d453c7c00a0e5e1f2959b39be8b740f6946b284df45d93e4512bf449c56b53aa5f2abdf6a7d83adfb4f72626bad996a85f387dfed78b011fef894a3c2f915bc9ef9da8a9062e35af1aea3553ef3ba35633cabfb5a298c45a534088ed7ac7d99127ad1d5d75d726df59a21e397feac47880b5e33864e71ed5b5a179af88bfe7587c27b026519e71470423f0f2a3c56f5cd3eb50262b36715f3cc20caab3563f4b58b27f9fede7b3c30827681fbb6c9f3ca8779884a752fd50691b32bf5736c6f0a9d2032814e5c995c1d4500919491bfaa5349119b12920d0789ccfd25411d5891aea0098c38ab9bc0ab6f3497633ca8fc77217cbf0a9b84d55ec9f0a319ae3fd58fb7275142361d4117f8ea8d161b2ab1cf9ae85b8a9f85c9e948bbfb5be75f4fe0bf4e2c6b5d73e48d814718f34c1e704a82e02ed27ae2f8bfd3e8415c8cba1dd9dce913cfbfd548d64646754f11dae89c710ad1bb1a7eaab3fb83ce14ab12f718890292bcb37d05f7e4afdff219996098e57b6defd82bec0353113b2f12adccf7bfa9c6e04e3a0b9cd903c1eaa99aa07df669a887b5c4097568a35dc0486417afe311e4d228e12f7cd24ef07bca7b7839fe1935cc8adc9172039f26ab1babc189d18e772225c8964fe87e4750c44562851ba2a06163b08b432fe5c1d72b65b07a4cb864a738a71d063fc8fc8674dc4935dd7f23aef362f87862a518652caa7bb94bc5d904c9860edd650bb8cb1309f66262bfa9ad20cc651ad06c28c83768ab43227d3b3620c196c4f07dd452ab27f00ca41aa82633160a9b3f25c5305e707ea3b6b853ad3591a6a10f32e58136eadabe2d6641e036c3321c233a0b183c0f646ce0f9ea6cdee2080fe4a3c76bf17d4dc775a614d49eca29bc65a16f05d8e6a31750560bb10f562d8b4c97742a1edba683d3cdb353df0358edbb18203ed6a8b692d7f602e8a1db6a5aa03a1ed2e6c654319503e87d15a36b765f0be2e85dd9187d79896f15258f5640d6bc61b6745bf64ece5d361a9a7eeb5bad7f57a38eef7d8d93d76768f9ddd6cec0c6449fc3fdefedeab653813df11c84b03de79997ad062ce1e12ff79be8dd85736ce82fcbdcee973fa8c5875d89eab07e3628471ef9d51021bf90caca1e10e7f57de0afc4b8a034cdbf52c12bc0a6eaa2b7a607a328adf26b12db2bc57f819b563ba10db9a1ba67185d11db03757c221e0e8bcec194a13a0b8ec844bf0877daa7ec13ffb14ce357c28decbcef6aee12c605fe63c5cf468bc6b0763fb45ba49a2b2dc6b75cb32f165137e60a5b1de62aefa008711de4bb2b7e5f879cee3fa4a714ad6e1b741ffb0c6f945b1908591cf07733d6e28af15ea1fc031b6c356a9f7bd04c7a566fe2d6e8671168fcb6d65beac6299a22daff6798626fb54b3fca6ebb5ea7d37c221bfca3ba37cedae36ab1c8fe3411fb664ff6025ac80dcbc47d2a7af58fb991b773e992bac4a6d67f9baced36a3a091e7ecc0f87eb934f8de354a955ae52a77cdc06ded7bbacb8b2d5a7e27302b8e11b2d758ee8f51cf92ecaab1fe128cb7c2e8bcf2c646ced2bf30eadac740ce45ab89fe91ccb39388acaa3939befe03740471c44514ee36906752ff6cfa25cc5cdd9e63f33b995d8462fcabb98bceca33a5992db12daeed264fb8e36dce5ac500f30aa47c575171a8b3039f07a47eff95c5c62504eb19cd4c2512ccd70df786d36369a5ffdf67567aaa39c60191ed34bbe575e680a98d76c73ae0dc49d5faf4d6fab62edf3447864f5be331593a9f9dd983bef1aefbcf3fddef97eef7cbfb7c9f75b91df6417174c63c15cabde89d4bc40bfe9941eefdcf3b787098e7181dc5d3cf76946305c5cc4273be17e8ea6923868238c2a5423a90d39f8dc40679aae8d6ae6a57703eabb32f9f7cbe236e231435d5280217ef5f97e9e9ccc05b0c53f471fb97c028f5bea797b3d24513de7aece39c1e997c54e72757e10eaaab47d6d73f0ce0fcc343e21c6713b2d86e3d4dc9f8be571afaef52aeb70efd34d73ab44798babe72edfb2b1903d5d7a6a3ded3e2703c228ccaf99a5515d2de6880516037cd3eb50881b9191667a497c868b72401f5d97c3774c5efce57ea7dcef94fb9d72bf533ee44ef1451ce7b8beef328c395f09c7ed9975312b8407ad0a8ecd7f7334e5d1417c99aa18f9daebf130c2954b72c2ed6343187c676bb439cf6405c4a5057579c4b55a73dc3e6f8d224c9fb5c9fcffecfd5973e2c8b6368e7f97baddf59e2d84e9dd74c47b616110a86cba9834fde31f2734f8485829ac538ce28dfddd7f912b333521406290a136171d5d55c64839ad5cc3b39e077a9243e0fb85fb12f650c8f22656d7633a1629add35d0e09d7b578877203ebc8f2f159ea473594bbeaa5f0612c67e7990fd5c57a8779e13ef1bbf5c05721393d4b9503cb9793d8e09c5a801c1aa35a98c0017e1d66d8771bd0cf8ef713e49c93d8c473f5e1afaff57f0b386303f8da250edb20c895f97248f651a2c7f4caf3501536f9c879a0bae635a26b7e73f8f8ac86f9b9fb7b57dbdf4c6ac78f327afc3cf6eb2564f1cd9a1561a3bfbcffbe9fd4a26777ced99af555f13f5c259f4b6ab457c730b07ce554006d85337c2211b4ab5aee5c576cd76c79b4ef9ef8408c1bd7f691672b9df91761859d3417895e33c5b5f383622c7e501b02fb8a68372e7511f18602f6ef2e63e02fd6e20df590e287afefdf6731274e19be9ebc78783893e766ebf9936253023a2ee2e3e6e075be186353726fef6297aaf2bb0fecbdb40f84e329a5b13da05db8934ba3bd74fbb5dc2f69ab797765cd060cbf73f59c68ea79e769a501e611b057543f8c7e7764b3ada9e06a756965ced0a2e27d9dea3b48c49f65dfb9aafe8efd7b2d3dfea4ae5f4ad728e2f1ce6237aad5fb8bf25815d86a813debdc1c8c551fba66320757713e7ec07a2ab6719c6589cdad2d76e63d31c2a1dd5dbf11f48a4c6bd8afaeba87e203f09f55f044808f564daf9159ef73f8dfa0efb30856ef5caca7df5fd94a83b366de69e33b845f691de6bb2371e7d771db9d5217b9e17ac835e3ee5bac7b14ab7714d7193cae6f58bcc6575a57f1909e6111fd8eccb9dfa707f669f2c57511cfd265ba8c1e13d3865be1782aee4b2ca9bf74a6eed2897a4ba7ea2c1dd157b257963f2fa209ef94ed2dcb5fff73f5f136eb9f5edbb1f966688469ffab8c3ed199ba44a7e9119da24354567fa884eed031bda1023a43557179c03abf2a9bc0f42bc84d7a91ff0cb9eb3363de2db6b526cd8327f2925f1f3b8490bf4ec6ba85def591af2997afd178c4bd5790a719e0e79cb35779c25d688bcd3ae56d9ce94a7366f99db521221c5b60bf7f46e619705dd07744b882a23353b1ae443fb0bb1127e30be5a7e4ccba4dfb186d64f276a8a9c227f6314d88cb6cb80309feaee61a6057acd81fd83ef678e99c248d69af5f3702edc473ea4563bc5e90c7eb4a2bdb4738c6249a3af81c89cd995997b7a7ee9b2aedf884cc39dbfb571dd7e33c94ada7925cdcab023c5c55d453594ef20538c14e3f1f039a3382bda37868d013610cb7b3ef599eb30defc5f6ff49effdd8d7657d9966cd9c0dc36afc19faacb37c1af6be04e708f922926772d3b580caea4c2f665d5eda5da911f9ddc5def151572a1733d2dce0f5f7e990f04c9dd11b42fbf7bfcc8726cf8ff04f643cf767270f70807d31f722e104bb7e7d7382cf8125ba2bd32f88f1cbdd8f31cf89392379eb9e28357af8bc8b32e17d28803fbde49d2f8bf25c57c93c26ec26b6831ff8ccdb4a6daaab3d479b798e9dfeecfdd9cdc3f8cf3cec29c125de9e1e37abf35c4abf38d246496878c598cc747f5dd29ece7b22b3b149cd2ee0c53d8d2fbd800dce5f8313b5ba11c3ed82af7bdd79b8a236f2ce79918f70acc77b91e4a9a7c24287b32ec1deb2b627d6b4ca3c3ffd1ed81fc3bef807edd52cd30398bbcf0fd6677ca85595f93ee7dc3acdd9fb357feea06e6388cd853e1228775064b7973f5bcd75c9313ab1ed3eb7a6546effeecc13f34b67f24257a513eb627b6bac2bddd7833d7d3277b8070003eaeb3efa78ec8352fb6061f212f6697f937dd0764ca5393514d07c22feb1886da084ac69c97a7c66fd4eadcb67d6b16c7d3eb3174bd7e9e3df9de1bb1adf67fd72d88052772a992b8a4fb9643d79bf5669728d12f1db57e6b3804feefa71993cf1cec80f207934667dbabc3ced75fb01e0deea3d6704bdc0d25257078e05fd5589fec5cab887e4d1f825d21829ffaef7d1dfb2a797f56bf3b1b0c6610539aef45e3a4f5790e2e7a1efb62bbb664bc8c479d5e61676c7c6741d086f69af3bc4317b0d7862b39fbd8fbd7b3bbd59b3b807b452ee85f3303c61829fc0b5eafd95c623ca554378159846b8aef6e17cc67b6ff0755c0a891eec447faaa3a9fdadc9f7034d059d73c29340b9c7f1e7c87ac57bba4acccf65b811f05c17e416bd3f6ed8f08aba8bfbfb32204fa97117ec8f78683c3e341e1f1a8fb7adf17888dbe546782d1eba8fb15d79e83efe1c499f9adaffacc0b7ece1e79cd7472a211607475cef50bf693b5a5d6a58dde14aaf4bae25ba81160a9ea1d8c8aa0f1c9d979724bf287b3db1c943dd33eda326f82309e795a66c66665d0a6cd12dc4217ec9f86a2476b6c64bca178dfccc488b83f0777d5833fc3e31e6b8270e039d97b7764b98e94a03f269ba3270ccba8e087771229ee8ca5bb27fdb8cdbcc35457b65f98833c442bd60bf432d3839e6299e13aa2db5b11514eacae050feb874aeb8947ed45e1bbebb472f5833eeebeaf0d3e407041bc0bb81869f3512889d10d11638567dc4ebcae0b66bc0f9f3045888b1227386d8f4084ec3fe34143cb6e81c04562878ba2a05b62f7b57e5826c9ddeb37876afe4e9cf4fbdc7a57a27d36bbeb7ae331eb5db8bb78f1eb757036bff18d3b5a6a9c06bcaa686df75c2b9c2ebb857eb4ff7ea0dec1dffde5a34eaf706236efbf74bbe5ecd39e3ef8fdbe145c7efa1c170526bbf8edbfc01cd85fc7dfea8bf548793f79bf32a386c26f839e77032112d6ac6571d9afc06113e5209f5c4ce967074cb1ef9b748c3bae23a8cb432638c509b6882533fb00b3f239cb13ec9011a8abdc4be14fc1bc92d40ffd85de5fa66c3c01637395c21edcbf376a479972ae0d2f8adf3980f8dab87c6d543e3eaa17175598dabd6618e20d084cc89890b6b2f54c42594cde39dcb29242b8dc0526594d52031798d9c41aa6dca7c1c9397fe5757fadc8df0056535bf20e63d634c97e3043aac7d70d9ba795d5899b37ea0f91bf4aa0aae351b362aaaa1af4d1ec70ad25c1f0903e6279e554f8fb9d699ffb9d5d501ac5d96dfd40a818b80eaf13680935953078e2176789de43dd9fb0526681513fc9125ca213957910f1cf3930367338e3df0bb6cf03d80bf8b33c3acdd26f1cf7bf74beaf8b9f39ec8a3faba2a415d278a3b78992339e40ccfeaeccd617362f130a79c2176b89ee8bab63f017c80253697168fa686b209ecae4775120464113f208a7de2b5034e6f882b2c5f9ee33d87bf0baf67e65e87fa028e39ef0e4b3023e70c740e0bc4180fddd9939ffdf0c91f3ef9c327ff0ff4c9c93d0cfa7e8e4df08a21b6dd862a21f8379837927f1f7bfdbfb3bceea5cf65f13359c41f1a99fca66c8f63deb99cc0de243e09b99b63cc0ff669022b4cf93af873d8cfb9154ecf7df3427c75b0292c07e9ba762b3e8bd8d730d4b7940f6252de8e3238a01bc22070863aac24af2d8b88338beab9ecc163dbe43b284fca30b0eac25c533d47531a1ebe3b6d1fcde879aa389f4d72bb097e3a3aafc4bfd745b4b5c48dfb3e125cd3879a026f28f63575051c53414fba3268f666c3d0deedcb24fba12ead6cf5f9405e57e675556ad8a28b7d6aecef50beeb3fafc3d9c2b09bd78f155b9ada47fd8fc1c9fb710f36fd32bc87741ed87eba273c085bc3818f9680092d8f0b81bdc76a17ec4ecdf12f6a96ef2d52b1e5edf10a88d037d8867d550ef377d016c63a2b247f04751f47f365fc7c84fdc55ed776ad50c0f3b282f843ec6c7b6de01fe1fb2dc81f4cf591804c4542ba08f8fac09c0a2e791ef051fd23a515c5737f0037fbf869d9eb0c3ff13d88ff23cf27ef43efcbbaa16ce6b9f546e227f8a497d2fed495a7d4fbe3efd345f9c3e4f1fbdc38cf8147de39ad2973c57549e0c75ea7c2c4003c1062ba5f44bb86e69b6c1ecdcd167c8f6bd541af187f4f943382f33312ea86282f536b423146b0cecae016b4589dc3d85fa215f7aade972ef138a93f77417de2b3f5e06efabc657501297680c426533db245a9cf25cee22630fd053e0761b2efa83476b9047eff984663e2fb92f7e95772917d182a9d8369353cc0297ffdc4b8408bbf0772baf19e96417bc150879fa0639fd01fc67eb941fb7cf1df7f885203ef1d4d696c2937cd32a1dd1b9af5fef6554de4e5475ed579f697686d3ee2dcfa178ebd2a9ff4227a3db6d809755e2ed41776c15c318baf7f270c8e67f26f0b233f77574ad3b9d4f8664268d69fbf5247ba50deef10eeb6a2bc5fb6067d6ebe4f367db4b1958963246bfdd358375723fc760cc3b7d2fc0069f51218f5827e4469ff01fc866cdf15f80da78fe90e357323db77fdbc4a7c474d054e53a599ae9e9e63211c4cb1c605a9f34a089f4d5dd55db345741f7a623f88ee9fafba9353e325fda4493d0aaa4310ea2a5e6b99877b98f61225eff5bbe02fbd219e674bec849ac255c15bee5af899eab030ce292f469bc0fbd610f6afac50c0f71b8f6d504f6c3ba6227f18626769a8fd05dd2f245eef22fc0e811646f13cd3a5f7597fc28fee5b80fd36e8c9c3b6ab2badcc2239948be6c1d373447a3a13ff367b639cff9e3ec2e7b68634de754d1f6d4d9a2b27b1dab081e7d450de22fc37f5eff07927bd132377fb6344732304fb129afcfaeefc5253ec4c75655d85df56b3f8ceac902f7a493e06beb9c43e91a6a0a5ddaaf6d97a5d0e7451beb446e7872136839dba71f9f5a0fbf8f4d8a09cffdcc7eff451680df6c52234cfb077fc5563681ef8da07bef63ef0b5cee13c767f8eefb90c67c5df030e7efe859c15e4bd2e10431ee2810e7b22790e5e37f219ca2f70073c16037ee35a3187cc55c65915aea47738ffe1e9aa804c7fb87d2598cb1bdbab436489f252efbe3985f3c9a9efdb8d3dcd3ac99d5a099f1d72a37ef3175b5f43c5cf6ba01bb18f6db6463d1162618247511a4c7378ada9926b2a3287c765280ddee41760136dd10dac50207a0c7798e3607e74a571e054986b8a84cc97b37a0cd6a6d8f9d01577658af09d10076923616180adc0fb8cc478afa416ec196a1fff4ea36a7e9449ea1c6c5ccd97e709ccd359e37860a018cf6fdfd5f94a74d892fb388fd7f4a4fd1c6ba4cbdb9ed859ea2d01bd77f13941b49763e2585d39b4c4e656a778385bed23c62794b4b515e7f20649dbb8c39f9ab9df75f58de20ee5274bdc60df92d5dcd7b62aadcd3a1e138cbf66f11396eb4bdadfab70b2f6c45af02ecadecf91c459337907135510bb8d6c5f0edfd5e1273eb7af0a5a129ddddd5cdf115eb60707db0dfbae0f0e36098f05ef4b7c7e2ba98f249f7716279bc87e0f7a0ee11de8dfb1bd859a438aa72d958783dfe174b5505c7f594dc1f4f899efc0e6896113a2bfebaa0b1c6c94279ad57b5626e4663a01dc9d903796b745f6e00dd64f0ed680f3725730d61275e7c27b7acf3b9c89814dad79af3b4456bd604db0880df6da0efb9e5ecb45efa2fc61ab4357f337e8c7a8c05928618b4bdae4936d73d2460fd2e7969dd99d73f343949f74a55fb3c5ced4142701f8255037eda7780b33e7efabf19dac572be682cf8f5faae17cf7ed1ae00188af7375fcdb30519f388f9f5308c1dfec12cd717ac7d1de2cfc331d3f670bfeb52f33ce668fe1c6485d1deef67dbe6ad575f5aead605f6d13107d48a67350c9386fa77e782c3645c2685ceb778ed4d072ea3d25ea28978c6d093f5f05b12dc93364fc8433702868a98be803ef390bf8190464f9b500db567ccfb0bc06add9bba427398aad8113c2f29b6b3de6a3a84e8f94ccf9ce9d47f0a3971dd723874331293cfeb77e15f1c418bf13e5ff3c43b789e9810c197706abf13a9a525b112dfa0dc10b0377865cb51679669c44479f7133332e658d77578602799785c9e37febcc298e9933541d55a90f7d197d90fea7c9a38f0b6036cee0d7775776585b684aa3717bf99cbe6bf978cf76e6863a6c5ca04ea9929e288a95006dfb35e52c27785fea736c6de02dee409d451f812d5c9875e956ea402f9a2a7906b601228ab9783aa4e78ed927c8edb5686f19d14da0b88d7e0db8a7696d8bd42e6b2beb4e6b43915da802ff4aece6797deef4ce8ed709c7aed4a675fb909bc5319f55973f8c96b02239ea46d536393156e69f537f213e3f2b732ab8a6d25ceaa1b0d5b10df63b73b6bfcc3a79c72bd9e5fbf41dc44e68b72ae019c6cf39b36ea9a9c01f41f20bf59e43c6df5c46d8d4141695f88bf877bea0ae93cc999cf3deb7131b16ea7902be8c7be4e5ad54c7a81cc75ac57d4ffe2630fdf9d7f73d3d7a9c1e3d4e97f6f15a87eb1c1107c8ed736dc1f32f819364fbfa9d7081e6e225a077979cf3183b11e962d27ccc684d38abc8fdc5f05f6c8d6f858b8bcd1bdccd513d7a8618260df5ba42cd9a092b0b72110d8ff62613fbde95f19c44fb19df4796288776d79b43ae8ad606198e8fe17eabe4ea3a625b97567873b615d6c4aa0b6ee138267e6e6e3c03dfabf6d71a8ec1ba9d9aa66cd26b4c720d37b527e3f1d3d806de51de5a62e7431f091b5be9cc0d456f2470beb0a637b4b73e4cb1b3cdeeaf1bb0952ff05e25f5480f63cd625b096325f918327e1efb087dd6a37927f77984bba776f10ae3bcc33c4e146f8c7a8e390e42936f723f47524357dfaac04bb2d8e38cdc8eec6abce38c6bfd97c164edc4e3a1ba67a08323136d34b1ed4ce29fc778a68a63671687b0bd38543a1f464bf839e1fac2b82544710ae38ed2f13e5388869d361206f1cfa3f5ac508b7e4f5f58ab546cbbd0d5a1ab8b1d4edbcdc36f2ecfe3811696d80cabee95341539d4f94a72050b93c73e9e57c5b3a69ad2fff5aad4b06d42d6f4b4dec70767c8239ebe8b78fa82772de0adea5215356cc954859535cbe1a23b9533a4cd6ca890c078e1cfa199e953ecfe48f8d0d4a16b8acdd96be21e7b4dc7cb49ad62c2cd38488e098fb33fb7156c7f9f3f935ca47a8bc4ea96d8e4c85eeacccdaee7984ad3837da50c02a2814a7ac8625fa062ce062f9aab142f1ee5a9bfffb9bc2f5f239a8322b9f473750275d5fd30bbb2772a07c119f722acef11ddfe9cfcbb1c1aa35a5293e7ebb007bedb805c93283f91398edee9323913112d8d10ce89db13e3fd4b6af1c9bfeba1a6d8e4cf2dd7d5eac39aa6ace73db1b1c26bca30f5788f419f86287b3f0a60d0b2f7cd35fa4f0cd04d96406f27a57994d00ebaf63cdc61cfca4257a55915f8e4318909e25a68f7ed2c5c03fbbec498c858f01d123fc3319427e20bf09b1ac967547d27d690e5db28e615da6c13f5e33e99ffe47d483e6f85a437caf29b732b841e57b8f3ccae4c38e3ef4d530adf7b8a1498fed971e1a538735c2bac05565811678edfaf59f5e1ca3c87bff310674e45b86bfc1d9a5f4d4fc3803e8b61eead997c969ef56024bc987c6d0a989b3887e4e844e71a9fb9ba21ca9c013de9d06ffb69d62da2d5178d5b58d8ca8633b00f377afe24732a03feed47d207edeac8020e66ca834bf2fa5bc897c71c6315db227606991ebd544b68670bbd767446937695e512b7c0b34f398049fdcc5dd9e43efd88e7b55633bbc300efb35ecb853b4a57010b1c24dfc9f6e5107a74666f31b74eb70f9cf791fdaeae072fbf66ace0bdd0f4beb4be41e695e5e21778fe4dbe64cf5bee1d0a6b07f97e83d40292f7cdd6109b35531c806eba81cf82b841fa8df41a67ed025ba7a8c62136eb941fe793e0b9e3bbb7d7ed7f9a7579ae134d834fbc8f4d51f62ecadfd4dae9eddca72f16cd01f651c0d723b8f4940e4af17e4c7989e7d18ace37c150fe1c4938365ae83e0aadfa202fced9b5d505629e93ec50fefe5cff44507f679a12f83d995d26ba7dd3e745a42fa14a5ba6af89f76baf6b07b6e838da489819aa8ecca9200d5b5007a959bcecfd1d0a5b5b91981fc301ce1afb89aa8440fb8907ec37ec6feba5c058cbf73a16df3719bbaf2b0dfc8cb0a0e622326732f68399bd20bc80c496857a7e8cfbf56bcf7ce41697f2dd6d1e7106d34ce33b0b7d04ebea5afe24be8f95c19faff5e702fdbee5f5197ac562b59c354e9fc3439fcf596386d96ef6fc05d2d5e71b5d337837e77594ba37ea863afc4cf93a6dd4ee899d501f09bf7455e05e213718f3e7514e3db0d53f5bcd7591bef0c239f09cf52f3a4f511c9d3c4f87ef3a1c9f71968f3e8ec4fd87ee84aae27e16fb5cdf8727da4e67e6e03bdb57056d933ebb91e406625a45313f63de5d8fefd79a561fd6203728a225d5419adbf4dc6954f7e57d04362631bebcdf1d7eea0a0a7bdd280f1de5adadf0c919a9f8fe6ae2986269d607713d672ab8e6cc8bfdeb2ed1a84ef64b5961d5398a0ee83fc51c6f4fce407d5b808656bc7782245f5152cf3269b32dde5dd9cac603cdae6e9fb366f287dd95435d19e4e4620497f038c90db011a9f869f777f1da186acf61da553d11af7f676ef2f6f6752a483856317979db131b2be61f680a5ae258ee3d9163a1daea099f5fde56994f399befc3975626bf419af2b4378f5e0dc74194d3b8be1da9cb5b5b6c2e7a22e19bc2fef0593c076df6eec9dc9b0e7c61a47f39b1ff98f6a6529beacad023383d090127068ffd3f6c13127667d7b654ae2560ab7dcee43987f424e1b36b25e3fcaac77e33bd2eac7fef603c5a880f1c7abd2ed2bfd12b9747744db108c7fba59f5b736db1ff7999be1c968fcc5d8b43fdc597e46721bc75d5f074913895daae73ec16ad05247c0de829663d4e2b7dfafcc97a3d492d3b79369b847b8dbe07be07f569c27fdf56cb273188fbe2c8fb475c121d624792f77b4b70d97bc3185aee96f6f123bde5a57c10c0e9f31ab37d54872c557fb9197b746bbd77c05f53b1ae03f45a548c51a4bdb1177be6e35eb9eb7bc579f08f3ef8476f9027ffd177f3e8bbf9adb0c01467d9a8c0efeed3de80cb608e501fd9ad24bf9f44fde90ef0021e8981abc61cad7411f9efa3b46f4f6ce299e3b82f0cec5657abe658203c6157d5a33a741ee3f9a9b11e83ecd97b55f11ea8fdd255b4cde57467fa5e785f74ddb5a60e3ff7e980d939fc60600f7c844c71e0bc7705d7169d66cfa37b6e540b327e34f5cbe85d7d5a3d23c63a57d163c09e958e294f8de9c796287f103feecdb1793700beac641d54fcd3319406c5570bbee537592d3c8183c7717f362f6e053d5142d8b7499f2121207d12c342988e4bc6fca3781c79b669ad2b7de2c301160b7d18ad547d9133c318dbdf13f5d0e4398a1d023b45c6df7259ef87a3f11d4e53362b3df41ccd97b1cf9e7e2f91f62414c380dc5d9e525336f333f0ffe59ec577e6e66562ea52cf35950ea7f1ce65ecfc2d602cf19a556ac73af37374871267da35c575ca76e9336965525c0feb03d395547f96f32361af2aae93eccc01e3b2d5f84d4dc7be375e8b944f94b03909db91b13f517eb6485fc035318c044353fb304434d75bb5842dfd4a1dcaf41d80e36fe8f3dec5fe44ef7b313ece341f5b6085c95eb135be7f11ed310becee9ba3f16e80fd981f22d58413b12d4ae79b098eac33b7f8c43daddc0c2f4ed65f710da581f4560e6e27854b865ae157ccd9cde2300fe55dd2b67a2f0e33cb2fb1ff6c558ee74ad83cba7e39e7d135a7c9b58ff7d0ebc76f8c9df4ffbccd3543848397ddab3177353bab6bc7e41bf3f751d267ee7f1a80cf49e2a4087e2a792675d55d9bd8ff5687f8f73ff03d48cfe703a357919e54457ee00b7ece19f1eb0bf1915277c414ef397c178c2605f2b197ed71c13e28bbbf8ebf5b45f9ac3d5acdecbe5d14d210f71a2f63c263f865be5ba2662f0d0bc60ca9efcb6a88537eeaa807a865077acb72747fe3eaa10018c15e77e85abe8dec1d7ff0cb7dab18dbd146ed4843fcf4315dcef73947437c06fd140bea072c127ec057d63b13fe09ab8764b067ac0f24d13f76f6fee45d64463a7170561d437d4bfaacf3645f9ca10eb7d11ddb7299ce358eef33581cc0c4bb66b7bfea896c6cb25744873773d75ca99e7a528c46f6ff17ccd905ebb54e5c83401073e7e5f1527b7a2621d2a3c5f8f51358dd43363b6d7bf6fa9fef8abc93a7df73b68aebf19d66f3527364bda462cb1cbf929e47f051a3b54fdcc54fbf71ef4e6375a36b46637a96bb829a72f2acce7b62736976bd64cd81e68fd2b978d04a4b9d49d02f0e341e71f8f7211f4ccfe75dc6862cdf9bce09ecadaf1fb217d5d5d7492efcea1c961ec56da5ecb3d4e88927e092f6d4dba10699de73d3f711f039cd6c65e35ad3b426e78f91b0d0d421e898400f68c5b5ad3199fb749e6be6a539de3ee23afc25c6f795b9654bec70a08935bd390ec201f66b75555a5e206f2c00bea02ecf35b597d51026eb91c0f48c26438a374e6b3965f22d2bda1f45ebec507bbc857826396f8ca326d415bb668a9d70470716f6bb1bf771b6519b62ca57a63f21386ca519eaa39d1a2ef4e345f8eddbc1dbad2c1fb83dbf2cbe1ed725ef22784eafede058c650ec982781d71c03b811da193da8343e9e60efdb594e61b66e648efcdb8955e23963fcea31a7603c3ee0bb70337a52e9fe07d25be182fe2ba92d43dc02fc2fb09ff17324a4b70ae0a032bec1b1f898e20202c823c9397638bd0fd379cca930d5082f2cfed9df030ef6cba19c75a1bef37dd8eedef13a876bf17d1cc30146fa8cef81bda50376b231cbc57c57e9a71db90f1fb5d647adf5516b7dd45a0ffef7a8b53e6aad8f5a6bf273b7506b45ef6265f8e14ef4accbe087d53d38d9784c97c7c95689d1db375facd6908b978ef9a82f8f97be1dde55aae97da836f1e8fd742ae31420fd1057e74299881de0ea803e934e1fd9dd21e5f7389d4fd94a7e6737face799cab1242b32eb83adf01fc2e3e6396d80ccc19cb77a1a5c5cb21390bd5e65df7cf07d392165c0b74e386d86fdeeaea90e995b39c06681d6a8aed122cef70d5eb0a2b837205e9d80fc37b6776973d50734d9150215cfeb97a433379ab297621bd8182dabd45c687ef3d1c47e0588babf8d9335b419eae6c0af25a17ed33bb905d9f510df58afa3f584ef11cbd096a8bf78eff8eb48e93fd6ef7a03b3b887b427b316eefac1c345aea22fad080d38ef63c97c34625fa547bffea89de521f3d453d72e93b0bdbec3eba153e82d49d94c0868d32bc85fa88c6be09ed5989479e140abe2976663db10939215bec843a2f73a9bbec63ee18a3067a9d46bd72c9f92277342f17d19acffaedd7c195f9a4273ec3a571285f5d11b62cead53f5b7399712426b45c61aca4c79a3cc75074fa195a9bb8037e8d01bf71adfa1bf3a9ae32ce1ba90132fcd9f615bff7cded559ae7edbe3911afc05936bab3649ad6297b2aa2a5ed377fb1f53554fcbc06ba913c7b9bad11b68f316f6983e983a5eca0a13478935fb03a75807d7ad39fdc257f86a66cf0982ac0f7101e032dc95f713a7f2fe14448f0f75a750169c0772203f653531a333d596b553a1ed576db9b07070ca9f2e468a38c762ce3ac2858a3be28a71dac0fcb8f26b5efbe760e6e276755246e9190a934f9425a7217e484d394a17755de8ed6e1fa715c4ba031c36dc507d95e87737d25a594df5b463367c757bd0abf53846d27b112f845a78fe90eef22cb9717665dafa26632d295da0ac78e97e25949f2af337bcbc6a3b768cd2053dfdbe12faf3acf49decf8d780ad27c29497e7396d70cc9bcc91eab0169092cde6b6b5757ae320e947cdf1bfeffaa4a489fde9cfd1b25743901d7fb8370b6cd4c5ff67eb0315c2086b4457941d790aedf644eb0d5f1f3684c7d1bb61025f4364704c34ce23f7b493888d9bb92d8b1d4f8aab28b47ef66887f17546bf6b662c29df9a77c8297e0675487c8a43e29b38fafadc433c22767807d547e81223c74ab00dfdd97eccb785e28cf0ba72b3582c7ee329f730d679baef7b2d7c6f775f317f6b1696fc565715367e5d390772fb6f242f9e4dcf54a68c1784cbb1bb459daa85d84d3bce05d5dfacecedcdd910639bc6332279c7fc662bd15650073c8f44f469361110ef3aaf620a72b1c59f7d12def4399f527e1f725769df467cc74a5812c1f7d9cd4bb74c27e656b49e730ae8590779be1bb11df2f54f37edffbcd7be264a9874f60b735bee9e9e30667a843a691fa61f243f4738abf03e686fc7d268466fd19c6467ee720e6eb16727d67aee1119f83e4a497449735ca5107f8f352fd8d72f412bd6f9d9797ba2a055a98e6937e6d09e8d5b796bdee30b0c50dc98177e93cdf615c077990ebc774822e0e83441c7512f7dc249d43c3f134024c0ac3ad881d0ff234225a521d5f86139b7f3d4f2f7e37c4e22eb80b2e3e9efbc2aa10fb758e4676e11c23a9a3568c17019c51c5cf4ce5742b7ef6dc501abfaa9e634d95cec7019d91c7b5c4e6d620e7ec0b63426165f1916db9443f4fc86a11bac8b4161bc8a6bad1644d08df03f4c792de66fc7982fba0394feccbc6b9f8e74fcd97b706607b11476ac76869f1c8833bb8e5dd481c999acb88e3c4f227247788ef4bea47e8aa45f969a0d640f5502504b59e3ac14d121c36c5b8802d8fedd50f11db6f367ef06d0273d60f74e8451c04b7dcb373019deaa9aee07d7aa33ac508fb8e7da427fabd0d654072426c3d7f630d694dd1b3b5e7db591b4f5f99e26665f3ff996b63d5872ee093f335896e607d22bb9ed68ca5364e6fd5425dd1a27be2b52544fab2646cbfb3ce37f641f0be3dc011d52ad533bcfbec92f311affbf33f46a0413b4449fc16d13384fb9ae620054e53a599ae0ee63db1c3d1cf22d3bfdb75a33d23696eafbdf7eca1defd478e77df7ecee1fd89b0bf7393cfd14252869e515c5337b3eed7ce4f25e701f24e137a261c536c7e24793888ff1cc7ff17e6b0bb4edf24d1268ce29c4947fa39e126bb58b43d3d58477138f53efadb7776352c0bc47e163ff9c378e9ede2f78fe703b6fa38f87c0bf7e8d81c7f5feef4f79d9cfcbefde989ef3bdbe5f528f8cc9ab94febe7e81c35e7a7ce91d595d0a9bf6b8b9da929a6e73857df83dd3d647f1feef1c3fbf3487eac27d6827751f67e8e24ce9ac93b369afc0ed5b2ddb73794c6dc501ac80a73b4922ea27fec84bfc938b6bfc938b8df641cb5df641cfc6f318ed973cefd9caa1139a6829e7465d0eccd86a1bd8b6349ddfd7bee0664fb72f8ae0e3fa1af56414b13fb59a36b8d4908537cba7998b391b0305417e92fdcd4ee4ab51dfe5dfa3bf41e288b33de9747633aec7beec15af07e2a46197e7fb7e67158af2a9ba396bb87dfaf49f2bd7e674efb7d72efce0bf06dacccdd3ef94beba91f5abf7dfb786eecf6a556c31de06f82cbd81bda3b3b2a59ffd81b471eb65fbaaa236b8638c281590b4c9ff4429f589bc36bb0caf1334bf8b7728eaf79981b221b7b0f0fdbba15a943345cb3cdfa19ffbc4a1dde56d6c76cf7d93d18877aa1f7adb9297aa5faa42f6837384d91e6476dffd7d80ececa89c9aae11d191ef5e573f73c3d0f657be4af357f05fb774efa6e232776ddc73570c9fd6a1cbbe78af92947fc0a99d755a9618bc0c5bb603ee5d5ec9238b8779f92cd67c4ffb5e759d9b53bc20351eddd8be7f80056e2f09e9991de114d599f7357bb25eeda7db690ae1319eba17c238c376be7f6dbf5f47794f3eff78d97fa3772ee9dbf8315d99f57caeebff87b4b8eef8a367ccfbe391977b5d52906f5547c0ff89b0a77cef383739e6dd587a1c9efe1212ef81ddaae8f5062eefbb5737fdf3a2bfe440b3d274f7ee41eddb199f4dfc91938d663789b71fef175e69b9ebe87e3a8d85ccb8b73f6594e1c5be2d9bb759412676c0b75fd3dbcdf85bf4339f31d72f8cbf7e64a2e899d26eb5e81cf979b4bbad95836b29d7798e338e2671db705fb724a7b78ce76fa632747deaf4e6adf9ab279213d79d7ca89cb8bc7faddf3fa791789db2eee731eb6510b4375aa8a516eda866ad39bf4851e358f62b920f0692e72fe6e706f5ad8be5de46eb845bb0971cfa5382e5cb39bc333bafff35bcb7f3bae0ded7796efb23c1a5dabe6eab76ff3eeb8957cc51e1f29c7f7297526ae783ef2fc99433583fd7be6c47b359e3317afdd65ec6e26674839d6dc9c7a73c5b9dce3b929c231be9783786fdc5a22ef9867db086ffb29f5f84bf21e5fe45eca391b518d4c42962a07962f7bd97bfee8ef1ef0118eff2ededbba80fd919c9eeabcf9fb241c337fa6c69b73e727d735d5bf153f7be8daa23c3180538968badb225ae86ab032fd1cdcee510ec9ddfe0f197ad9e067d1b322dd67d0db60eb8e6d510dbdfbcda53eba505ff221ddede4fbe48d6526601f11597ea20f63faf44b6e3dfdfad109fe54c2f9421d3dfdfa91779fe6f704ecef0338b846f24253d0fc847efb5d9cbad759f644fa7d62c7d3a1eff0edfa733d039d9fddfe15f29e7543449c2ef7d71abef7e35ebf0f93dfcc3555d8e6e44949af61a42f1bf739bd4e17cfafd3f905fa6a77e763eccb789fba3d5142b037804796e8a15e059f1fefc15d9b9ea7657840bf30473f32aed7aa520eb6e894fdd5766459922ec4117748c3d23567489e785eae0f69f36e608bf2d8123b1f117f3ac9bdce4db1b3b6f83db8fabc338f36eb776ed3546ae4ffaa38f8a5b66ad62be2fef7efe9d3af0bf4d7ecce138aeea22dd162ed7fea49bb89c7c13f3916e89948e2207cdefe3d76f86b70fe44676c970b3657bfeb8066d79f3b7b33bed36a96ef412f66c48174c1fd08fe6fc4f3b576acbafc61b404d702bd570999f8f3aa8e7a1d7934be907ed3a13e684d6934e0bd72ef1dfbd350876852175c8d9f247a00fb2b53dcb856b79feb0b95b1076c8d34de45a6d2fe47cbf9bffff7dbf76f81f1eb7db6f8f6d7fffbf6d373befdf5eddbf76f7dc37fc77ffaf7bfbf7f73a60b7769fe97f5e9ffd3feb4bcf75ffffc9c5b06f2a68bbffef9f7a8f5fcfacf8d8ffe39b7dc77df203ffaeff93cf86ff20fffb599dbf89ba7b3fff9c4ffb7df17c614cdf11f67e419b9bff1fddb7cba7dfff657ed8f26dfa87dffe67fdaefdffe7aaaff017ffcefc5147e95e76acdff53e3ff4fad36aefdf157fdcfbf1af5fffab3d6e09b7c9dabff83abfdc571dfbe7f9bceffdb9efefaf6d7ff1868fefefddb3c84a7bfbcafbefdf5c7d3bffec57fffd69b7d7efbabc93dfdf1c473dfbff5d174e67dfbabf6fddb1b3cb55ee7b9a7efdf2653fbdb5f358ee3be7f13e33faafffddf816173dffee2be7f1bdaf83bb9efdf46a97717904706f3c435ffc07ffdb4bc39feda3fbe7f7b5e4c7dfc36a377ebdb5fb5c6bf9a7c83fbf38fa7efdffa73fc2fcd7ffdc1fd8bffa351fff7f76f6f998ffec1fdebcf7fd5ebeca3d1b8fffdfd5b2bfbadb56683e779f6d13f1a7f369b7fd4fffce3dff0fecbd972fe6e7ffbebffc77de7be73ffff7fe33577df7fc124e179fbf64ff7d37fffe71c2d3d633ef5fecffff0cd7fdac6c2f8e7af77db3516ff74a68b7fba4b33bb3976f6c6b7efdf7a7ef0f96bf1d358b8a96d16fdfce5d3223f181bbf9cf705f9f3f0f393fee9cd5858eeb7bf664b84be7f1b2d0cf41ead2afc6df86ecc3f67e4b3e267678adee7ecd3e4c9d15f5fde83e8cfe3f7f922f369fc4f99df78fbb497f879ffef1b7dfdfdc702de743afbf6d7e2d7f2fdfb5993080379fbb44f5f05e7f3bffc4f1bbe477eff359fc2fcd4feab5687b31dc058d8c13f3824ba56058ffcbfbf7fc36ff7edaf6f3f5f9a4fa6b2766c5f0e411cff839bbe8d9ed6bda9800dfe0a1a9cb7dc549687e2ebd899fedc3efda04ecb87819dd691f0642a9ba5b50d9e70506d74879cf5f2b97aaddb753b6cd4dfc2c6caf2add5dbc7f3fa6dd4d4c693cd981ab869f6f27d176b7373f6f687394e7c0fdfdf5afedbd2f4d1d66e3566665d5b99b3b7154d9aac4c45e63495bdcb9f9bd78fe7fddfcb122df5fe1a076c7677b8fe7bfae74aabf7432d6c2c0db5cfbdfaf6ca9e369756d8a4817ec1ef24c91b1c387276f7f98fd7b0f961d5a58f57bf1158f5c152e79bfc2bdfd8bef234d1b56d2fdf5abd8c931293010ffd66684e8648f73b35b33b68f6669d9aa66c803458dffd3ddac43d84a0dc2297d4b9efc2ebaab4854b74d4c373b07c6bd51686b2c101050e44a3c0f8a02370b859f94f731c5d78ac41f9e784eb0be396307e57fb401837e1e50fec0cdb5dcf99881bd79c3e7f4e6afdc18f91204273b34a1a98a943e6e63630bf6c16f19eadc563fbc0637f5abf2ab5c014e5ad2d3697fab897fe3e00cbf7f31c1cfc9d9f665de2d833537bacd5dcf9f9eeef4bc8543aa1517fcb4b562efe9e3d9360bddd1c0fb8ce5baf1d1398e339e8898420c86e091f9af20484d8b6da87c0dd0c0546083465040e40b2037346c90cba686d287dd714378d5e3726a6d65b4c54bfdfb0ea43648e84adaef46b968fb8f791b036c5cef2b5256c6da5ffd9133b208a64d6fba827e23d4bc4ca0de5c9197b682cb784f1a4f5fcf4f6f2bc781b3ba4017c96432e901c6f575a99f541dc74cdc6df89de679c789f017e9f5ecb1d4f6acf41624e022b4c9228b2dfad25c65283b190a6746cef26ffa0e21359115fb22770e0af4abfac6ca022e29f3557f64b634bf7edc28af72d76f45c4a98179a7c93cb09bad24dee0782fb7dc51cb0850afe6c4ed2ffd2422348a869fe2621145443b6d8f13475e89e41f63eb0fc266f28203c06f602d691049aaee6376b11b948579e9a44a48c38f24ac3eb891d5e53d05c53a4c014615fc4040440eed4094c48780871505284f4f892e48187e78d900976a595ed234f57df76ceaba6482b5ba5445eddec7775967a4b706dbf139862676a281bb099317141246e0fa23a7130554854fe3204f2e51a3a32c5a1fed67ad94b36b8b910d9e0d6aa3fff41f7d7d60092b9d385110b8c67ae61bf43a9615fcb3794bce7b52ff9bce8eebbf273d87c56f53ccfe4df168632b8a0a0e7b13d22adac2202ad678bdd907d52192963bdbffe7b26ad4cf192e2a847e652ec8476d7abee794076d85c5a3c9a9ae264c19e7f94f068f7fd8e12329dfbfe49e116f03dc26244ab8708018b12891526b3dceb2744fe6d3992a1d61ea2a104f9aea6acf1bdbea0f75588ef7b93def7783d49c11448a7cb900eedf7c9f2dff124d239424054732d7fb18d85f0184952c335412cac46fd09a9012244849c6bada912ec0b43c5be6c81a25c2bc797295c70390a2e48dbb07c60139c39463c74d85eeddab7bd82f507c006399fcb020fd26b5dbed9331ab3ad3402fcbb717130f6e95e5520115d99b37ea0f91bf4aa0aae351b365e95057a57df720b254c90d9acf79cf7aee0daa293bd0b425dedaf4dbeb135a0b1b606e4b9ef7b0a72389e33c541fc5d9e109afc06bd2ac8cb4b5ab3f19c0638925c8d9f2f4c8514282a20246f694aff17de5350243a83947c0024791b98fb48fc54ec07ec4c5ba1e09afe808849d5e550e3417c2a2a8e5861d544e430d70e9bebc88e5c621cf740408efd143f1e5785be11b2f866cdf2fbe78be61f22acbe20d0d314d1d2d805431e2c761f2366863394b9cfc7f83905058cf69cc13049cc0744cd23422a4849478910843849eedf8acf1d88d433b240215dc82464db3d71b3c2f69a884a80880807c26e6a7f65abd2873ebe8ab8e7390ddc7047172506390e84126a04681203b812025ca967daaa1400596634877b41eb4508438feedb43fbd7c03e842a71baea72a9751d9f2fca35180924860351887632ff42844a127fd76792abf38c5cbcf3617765d76cad1dd36f627bc3cec2daf29bff8bedbcae00c9f82d106b7ee235b66643f4de1da4ee95c4fd74ed79b80d91a59984ccdb13841de9cac62d23e072684f0fe9df355fde6604e5fd08c4817d0ede0dac16ac13e47775224607b11ab99b9e1c99887c47750cfcff5824ac1926847e60ff48f537c7eacaa12536b7004ebc09d18178cc6cbfdfd41cdd8830a3a9c89ea1b41744a8297d460e0912547446faba320c34ba4e1710e268477538108c73514fac215d442e6d0649e4e8f17dbbc06b9ff2156e410c6f4cd68cae151363a4f78d22218b12f89bc9cf256a30b08779d9a36247e03f5768ab2f49640875178b77d30d7657f2a927995a970c60f03ea729b5f519b5b6095e135dec60df0de241009983bd41db9e18db885ed776ad5058db8a3437d4fea7ae0c8ae4d30efb18c57d0bec530ce0d94a442c0e0071ab3e744df53922ed3e733c55d5bf08d877c244c2067b63d0f72efe793f05544cc7be871b05f691bd5110e80b1300ba1231a26bd5070b53697a20eaa7e4904f5dba26edc1339dc433c91e38ffacb435f0eba0be0a0d1124a7927e1eabc3be562c303e163b5bbb252c4c7ec8b01b5ccef9283d862bc4a7b9c48707f6637a3e5417ff7c9b6a64c8d400f118c13e8e6a20e2f48acfa922ff61f28d1c42f2341077c004a05eaed2481cd741af9f136dc7f886048eebccbb22c20826841d92b15a2ca055751e3469db23ac56ea5e28f5ee95e53ef7efbbf477c94ff8e7f4fd930d17002ecf23eda9d6d6b33318cd7d05b69ee2c152eb5da0be985b53a4df25d656ba28cf13df59b59fc3b08fc9330b31e4b8d67f194cd660a7f5245e77fad8afe5f7eb70a585d0e87a75df7d98b03123054461e18e3eb34e95c0afa5458d7bdd244e18f207ae39cd7c06ce00c13ab2582e169efe42dbddce15811652be7b5a28dab154d935196e0a44a63bcbec67481c7a9fe7e4708e3b2fe7087e562ef1c4b1da7d1971b952b8907d361cc1bb96c785ecb5e368a9b338d9b7986067945f3192e76fba06512ac001856b47576aaea110c170b33efcc4fb06c7921a15152fe2d3efcc51b15c4c6a0d4e117cc331809ccac95c771e4ae78e4a8abded6b963db81767f292e1694d454216ec2d795bf03c9df5fcf47b9cd0707d789f3f1d1290d4c56670887ce4c0d92d267879f8bdcae29ef6ceb9f5d2107aed61a0f388d394b533e625a8e764ee04e7477bf87334f2fe05f66d24045628ac698d09dbb879afdb0fa051b53bfc34d43747533673b36e6fa127602a84ba8ad746e6f133f059d046826f2b9b794f9402cddf04266f879a2a7c1aca9b63f9f28759973cbce78b0890eed9f7e7ce513981d29d752a29589af3bbb94dac457eafcc1926735533fd42b6a490f0f12131bdccf725736d5f99232042f3d7cf0f0cf0737455e2de0bd6b5f7f8a1c40e8da860b6d826f59dd1da49fa267a42503cd387118992beb600d7c8bd927a2e25a7abbc372334eb50bb6e246ad5d71fe37f825feac3ffefc32ff5e05d2fe997b23bac01754d8ae3b555694d7ae620271b403d007a04003b13d704bbf1be647b8888f836394394f1ffa7862f7f14cabbedb1d545f032a5ced3eebc4ce37985b84e6231e9bb128b7fc7b56a52c33114c8037890cb57fb2851df5e47366cb406bc3715de5fe139c3ffd7fc0069f542b59df3eedce262fca97d6d2b0d222cabc80bcd9743b837d437e22b7a8d9731d89902be62f9e7a7edc201528c437895c37b242dd69c2010faa5aba88efd2aab8c1fdc2a85013b3ae65385b577c7fafc0f39eeb78db01b704f88686b038e0e72ce897147380efc1ff7ae0a81c677e666d763bdbb2bd27b8bcffd33f4d132cc00c39503760a7eae07ba38710c5e6ed87c33d4bb6f0eb659f48ca4fb1c8b087aefb10fe7ce57c91870cf792c2cdc9ebfe67b85dc37aee6cbf3df268e12dd9aa97496afaa843465e86afe06f5443a461207657a64482dfabd0bb632dbf75c627d4eb81772f65a99fb3e678fa563e5cbd9ad2de9e347b96491f7b84fb08d318158ab81e78ac7f174324ffcda12ea06b98b990f8ced15d2d47e806d95c537432ad6ec684a6d65fa569433a2644ee4f7a08f99d9b0788ffcc7c6d5ade3791d539139436cfe567bcdaaf79155efd33c3ebecbdc95feb897f6df4bb33e5ec3da6fe327412cc3c6043e914bef9ed0e4d7cb5e1bee26f42e76204e7d6d611f88d85ff0fb5bb68a6370bd2bb936ff34eb897da86d99fe10702b04ebd5e1a8ef13c5dd3dd175ad5098ea8abc24647dae67f99d3ad83f7fe058bcbbb2958dd7131bab9eb85999be8de387a93ec27198fcc8fffdc6f9bfdee15e96204b7c7c089b9cf9bee2eb551cab1c8d2d27a72725efee9298e5e4f766b13fb2e9a38dad4c3275a3bddc2a2ceebef15c446eadf9f4b196f57fcbf4611fc3d967f6512ede7ef696161e28528b2a7f8f14eebd8ac696d74388df5925c4c317dcc702c945ca5b4a40bbb195ce3c939383efbff55a6f667e589e7a99e07e8b7011c9dc1ac95b97e40bf882bdaa51b2f6d47e2d920ffba2fd4ac9e5abc131d47b0e991fe0698b7a02f6713c99b48e5a92ffc229c581d13a2b66f853fb6810a18b6d01fcc2e9e3bf5e0ef8788f60e2fb12b5957c4c784518b8d4b82ac06ba69e77065693d5df9a2c27b1d614143212ee583c65ede8aa0bdc7e9a3a5c5933cf89f973aac6b865c7ce706d30ee158df71c4bec04d694d51963f18a9e283f017fa0dfe1ccbad420fde4c0a973abbc6dcc7f0e19c74d410eb583774519fc50611f32afdf2ae2782cd71fdbdb57273f95d7a78cff5cc2773ec96f66bdad119713d9c3ba380ce27dda5f99d49fc1e70d7219a47ee95a3ec1aa9e82212b91a339de73b2bbaff608e1413fc960e235c7c3d1610eb21c4eb04a049bf672a71c8a03880f555ce0e7eb7a70e1f917e8bdadb2ce7c0bfc0b6cde202e8830e73394f0a5849a351356163fa1bca908f020c04f43707551bc0b1c87a21cda5d6f0ee7987234b03c3ff3afae22b472207773a99c4d457bf99cdcccd7e464aec991f055b9976b731a94c9b154c46773462ea5b21cca55390baaca955c796fd118e1e6f6974cdeab5ceee370ce23e29160715122b6ffd454c9d5ea4364f980adf9b8957d16cf03c1b6453529c6f791ac63d1fa942176424de973ba2a05567d18684578f72eb5df2e29224cb9732be09c07eecc5ecb5d59beed9a3efa23caffd47b20bc65f1cde58ff330cd196e4d01ee22f07f4439a03edf16db3b5bd9b8d6f4f95353f0f3a599a6348277861b01de370159b3feca9c7a346fd59c9ba2fc41b016cf9fa62acf6d11ad4dc0e29077b742af6acc73e13925b9b9b693e14e76e02e57019b8aa03eabf61c8b474bbd2ecf35b5e7fc809ebc66a8f39da5a1060ceb00bc5dba2a6d4dfe2920785610d3425a7d18d8fec4f921d66a667718e0fd19cde5ecad08bfd7ad70d5b3f155c66b8df7e195f9ea498f42555c9b993c6565f348f832afc1edfec88d3d72638fdc58cefb7d756eccc88af3df807f7d0a67c0a1f326475ce5e9beca0bd60faf99dbcae651209e3b634cf7c83d47f9e3d338e46bf509125e796194e0643ebd7687127cbaea9ba38d92da5c645c491daeac9618decf1adff4f47163a1ab4317fad2bf92bb82f9ce9d344f30f8c99dec5805cad12f78baa207a62f43de35d9d371379c5b693cc60e77594a503d8fe7eea2b127894faa380bd4973fab76cdde17b0f550e725b649ab0fb25a5f55ef65125f7d24e2bc32ef7a2f7a01331693939cc29563a5ad213643bb55c9b356966f2d587daf883ed0e95a4d745f807e4855716033d4096753557a5bae2e0e435ded178acf2e334679a129685e9d8e85f0497811ab7a9e1c9ad5addf234ff1c8533cf2143bf7fc234f71f3798a4beafed4a55905bef1cf4cede00c1f796fad60ae2b363e7bac1ee3fc101b2b1b7ac4a23acb9ce1402956e003efd7948e70d5dccc99ba50acf5b7a766246e900eba4190e7e0de47cf9f78ad7a62ec8fff18ad1d9b479cd1223d6e9ad2e77a906b81f966cfb9971ac921bff5b29abebcbbb266834a7c64bcb6d5fac71d4fef4a08fa262af23d285760851ab12ef0da57f53c5b95aaf4c543b3fe5cd9d85271f8f437d0304e6a2e11ffa6c05cf636fbfa384bf57096ebdfdca3c91469c196ed77cbc5699dead395e97b2bd1f37652bf1bbe3f937e3cc94b9dacff5ba6de50a2f7e7f83db9bbafecd0accbeb5c3b8084d1b8d6ef1c397f39e7755f9de5802f99f3b9ac5f9959ebadae766a24cf7d1dfe439a63051df70af044c46fc46764877bfa1cff355d87023ea684ffd66bb95b5be97ff6c4ce16f8aadbcdd18043ed1fc037001844b727e2ef4533d3ef70ba32702cbeffa917c4555ed27f9dd077c6672d5b8ba4e7f1eae3bd9b9ac8b19eea43f8ce923a6827dd53e5efaa7df7d5e4045db443f75584974ce088638dbcf4fe9af7c4c8d7c57112c999a6f810f11e699f96836955cc431071a0a771a3579987afeefb66774ce2fc7c65ed308ad1aacf8f5c4e0b02f41f53fd123e604df3f20b5d1970ab447315ffd95e6a84bb76abf12e329549e57a27c7e6e5f01d939b2b7adc298f3be571a73cee942fb9532cd04b9f5710bbc41aaa4433767e262ea509fcd3d694e8d79b530138f12d9fd6bbea4283ec97b45e37cd43afc81980cf7e6a2af6f581cb8dd75529c9d35131a6256f8e9866bfb0829e5fb5e7d8e29f705fc21e5225965758bf8f18475d4a3b748767c2103b5ba345ee5ddb97c3a48ee21de5e1c9ba9d9b9b3b077fdb95903e3ddc9b9ec51318a35a98c026e671c917e6902fcc1d9f771e7db7017dd2a2fc44e6b7245ef2c8f924757e7236d37a58d83627ffae879a62933fb75c57ab0f6b9ab29ef7c4c6ca5410ec57e8ebe94a2be08c1765efc78de84b1bc07f2e71f81c426e2c8ba96c5f7f1e6ea4877d41f4c76be49e9e521df2e31a0cd5ec752fa55d7e81fd7db686f82d60d3b39af1fbb4ff17c9cf65f5fa214ef1e5ad599743b01d77d90fcaf08144f3a3b23cee5428c31992173388a005d57229d6c0a37de0c40f605cb3b68f3c5be9ccabd640a7b9710770d7914dd46ba6b8767e50dcc00f6a4388af0671f35217116f2860ffee526be68bb56d433da4f8dd2fc813b1b53e353f349cc973b3f5fc698af24c53d6011d17d13ecbc9117d75fea7dcdecee47eee33aff3b5fd13694c4c36eeb8b81e6eea79e7f5e9030613fad4a91e17fdeec8665b53c1d5ead2ca9ca145c5fb3a85fb4ff08e947de7aa62c7fd7b2d3dfea44e5e4a2728ca2b7eadc67e8cd9bfbead16d8b3cef037200f61d587aed912a277afbac63b60faafdb64ef4f736b8b9d643ef09e72193097afca26a8122fa6f1887bbf76ef0df86445c6d4db9c8145a37bb2067d9557ee5bfa30ebf2d2ee4a8d139fc3eecb7d7be6a856f697c5d1a7e85fdfb0eef555f9956e50dfba604f43613de90be9589fa89f7d21ddea23ba4686d82ca669d82add3374f63ecb9f9b67ec6b7e9a3c8e3b527761199db4f3f4d14ed4453b550fed880e5addac4bbf8aea529da54775191d2aa289d7b557963f4fd88292ba5367ea4d9da833758abe14bd0fd3e7f928cf3d8b01e403fd56740ea86ee9de1ce421db53550e12d6795a9b1b4aa38abc4d140b903ae3191c195e9b70a7f11b5ab38c7335a9bd5b2d7f3db37b907f4fd6630abdeb23e75832e7d80f2ae153f4e03967ecd53ee145ec0e5736e50bd47979a5d725d7125dd0b485f882cc33d4c74da513984413d74dc7cf95e5665e0c35a1ef0e31dbdab1c5669df619ce74a539b3fccedac03ea6b2c671d88cf8448069004c0cc1d145e7e2b1c74bf318810e6015b6798cf7c339b9c60989b9e74c6fd9043c09c11f6aca66a5f3cd9a159eb86f2ac5c39039677bffaae37a9c87b2bc5ee99c4b057c4666bdcfe1f51c00a7d619e723ca1536c35e279026d0973c44b7b3efa31ceb0bf084b1fd7fca7b3ff675595f66652b0dce9a55e2cfb0679de3d3b0efa018f39a6b401ed98a7dda6dc5f979be593367c3f03df2bb8bbde3a3165a2e6664fdecd7dfa704577d46dda8037e74ebcb7c68f2fc17b61f194efceeec642e9fc117fb018493ebfaf7ff049f0bcaa97096bd649c80e64c5e68be1cf644a9d1eb0ef1d8d686d85cea05f0a597b497b228cf7595cc631ce7457c304b5ba94d75b5e76833cfb1d39fbdbf7afbe1ba541eb694e00e1ffd3f8ffe9f1befffd9392f8772d3e9bd4874e4a7c24287b32ec1deb2b6c57be04e7e7efa3df0dd8c7d9b0f5a07cbf5cf4bd7b4d25afe4c27a7d9f3dd55066f5bf83bcbd6962eb65ff3e76efdd36b3ba45628903b6414d9edb2b5b7689c67d5e04edcbf3bf374624d2e3dcf7b6b732bddd7833d7d3077b80700e3e9eb3efa78ec8352fb6061f25260e6635bee701fb41d53694e0d057480887f2c621b28216b5ab28e9b59bfb3f101a7d575337bb1547d37fdbbc5ebbc99df2b73a71ea9fb663e5708eb7287bdbdc00777fdb84c9e78eb333416e4d198f5a2f2f2b4d7ed0736d5cd1f41bfabb4d4d5816341ff54a23fb1b25cac3c1ab3bc41e78477bdc3bc82ad4ac117e3a22136aa60efb6d331d859f87e8aa117a01fd4563a73c2e791d8ebd5e6bc76c616632008861f7a7fbbb26bb6042ffbd9472eb62c8f42d403592997c27958fe24df40676bf1cd0f4321dc33942781696a833db35b42bcf75a5fc78d90e84fc1f1eaca5625ec6fbb56bdbfd278e4daa00b4e780f286f24fe1cac57820be29efa03883dfc9d741267d2f5b85573f986c166f0fd227a0e05fb1d12679f707e16d135f868ef8b714ac5328571fc076c48ccab5f02cfbfcf8ff34ee6392dda0b7ffc7edcdd1365b1b8f8de4c72db52eef313b514cac4ed6578868efb84bb67bf2ead6cf539b74767d2917e4eb8c99173b77b4ef3cec8313f30e773599f307b7f97ef93f181c7bc467c0409ff7e60f930861be3a53881c3f5d01944f2d2503b357d240449ddc1a48637e1df474b8213694e814be4e5367a6672b9f43aa78fa92a6e940bc63d84d3e8fa714f0f3fe76cdf91f98562a407017c5b5a5d6a58dd618cab0d05cf506c64d5078ececb4b923f94bd9ed8e4a1ae99f6e3127c88ae6bf18ea3299b995997025b740bf5775db2363b123b5be325a525bec6be7ec29e130cf948f8b066f87d62ec614f1c063a2f6fed9630d39506e4cbb06f6dd675644d0537e57f27b82e293f976b8af6caf211678885f8c07f875a6f72cc533c27d4bfdad80a0af534c7f6c936bbb4ed3e68c377f7e8056bc27d5d1d7e9afc80d4fe7937d0f0b3468cb30e6d21c7e0235e5706b75de3cd9f27f0afc68acc1962d323380cfbd300eeede81c04562878ba2a05b62f7b2579f18f9f8bdd774de6258ef956d1bea3b966c75408a604ce97fa766a3f6299e7a7de03db263857f561e973b97fcdf7d66dc6a3767bf1f6d1e3f6f2f9ef1fe3de9ecb09e70aafe35ead3fddab69b577fc7b6bcda8df1b8cb8eddf2ff9fdf2e78cbf3f6e87171dbf8706c349adfd3a6ef30774bdf2f7f9a3be5261ceaf39af828366829f730ea79228fb4c4b1cfb5a26bf41bdee70d513259af74333d077867f6b438c1ef5595597df5b993106a84d34a7a91fd8859f11de537fe2686a1fb8c0214f89ff8d695517e043bc54de3a4f572463330e6b35898833f378317674ffcee1c5e87f9a758963bc7657e5e08058b4a086d14373eaa13975c4a77a684e3d34a77e27cda9dee1b81774c20ff1481ff3df0b9fc5e2e730ef0c4ac91c5cc97398770665d3471b5b9964354122fe5caa8bca7c8195e60748ab9788750bc6b8a5635b8869b3f95bf05d4e1fd33d72e7faf2d6129b4b8b4753539c2ca8ef584d0dbc2eaccc593fd0fc0dea7504d79a419ffc5939cd88c37b4439bbbb7d64b760ed5669eecfc61670e64ccb77f686ef0bd7063d011d416e2f7a3f3437d46183f669ae75558273c5f27dd8f7d055096a1c7a8bf9e71232b1fd85ef1aaeb23526b287e4a72fa9c3e7cf7b5c938fb9e4997fbed5d501e449b3fcad5628b039d9c29c76879f9a3a700cb1c3eb242fbcc6ff6e28526082be30c15f59a21c9238298a11e2b5034e6a1c9be177d9e03dc7d3f5ccdc7b243e7cefde151680c43aa35a9073c7edea0f5fc627ad161b909ee3cafc7dc2d57f153f9fddf321f3610b62390edee10531bc47730e697f322fff10fb974572103bdfb7a30176623dbd4c7ebb446efba4bc36b585318682e8b49c1a5394f1fd4b60b88fe73376f7d5ccf29b352bdf0e0c265e733cdcc951a4cf5fce79dd5b273ed0879af3b94c4f6a66ad4fd17021f744ad90ff3df6fa7f6779d5333eccb5fdef51e23ec4f7db08fb0a17f0c327702f923b9333c40e973883f8ce0dac307517e3cfe17bb80c7ee79a5a16fbe6057c1219ce1ccb21828f16f90176d7730cf5cdc9f8b1c05370616ecdaa30049ca10e2bc94bcb24877916771ccd83525e886160d585b9a67a8ea634bc9ed8706d1fcdbe468b0bdbf14d126b4ae795f89fba88b696b871df47826bfa100ff186625f93d71ffb254fba3268f666c3d0deed9b3c8af3d2551d5933c419c067560b4c9ff04d27fda50bee43e82de87f54a08bed516ce7cbc935927cecf86570f82d3a0fd44728d0cf771b3d21788c740d872d4369b8194e9c1cfb9187c5d3035394890e468cbfdbe937795593b1f7813a79798edd52feef3e5b37f4113efb65f47a8adcbb7f47fa20e4bef5a16750c473d10cf59110d82da1aea96f0e9e179307ed5bd70a05b6a7a29a18f48d2b43ec7f3986f2e46823781efccecf59b65fa0bfd2c5c93f5ea7c2c4000c09625a4f649d680c6ef3686eb68429c5d6073adfc0cf8fe2689dcc49dd10e565fafd092e45e39bf87dca627c8bfb0aa7fb0cc9f329c23bb7619d991f7fc5754962dd9eb06f827dab20d21123ba1ad407b303535ce7d63c218e10f1d99a3836ef2296d3a76b4230330a5e67d92b1b5f14f4670af93539b6fd92fa7185ef953def7226f6eb0c5db9837e5165fa725f71debe5677ae55ec8ecd3b0bf7844dd17814e5cf2ae1e515937a5c27e6dfc5f87b48ce3bded3440b01514e17f057429263c171035a467f6fb9d377d83b1dc82deb5381e804535d60cb6f6ead30a5c11a54ae5f13af4daceffb8563bf1fcc4c27d47999abae478dc48057eebbaba2b7cf33f9b785919f9bbb4a2eddea4a2bab48afdde15cfaa307e8d103f49fd603c469aa34d3d52af226a93bc7b57c1bd9a7e750fe3148e928d03aad2fe3b3896c725f91fea0d4fd57a52e44fe7829666a99e09223f9c8ae84f05aebaa8eef4faaad9ff275eeaf27e76b793db6ef6a9fd3156e61f132be1302bbebe1e7ba80af1c07a1c937b99f23a9a1ab6f156048fa0dab3e44e64818eb4abf66f9802f18986267d96bb9e349ed39380f4f127dff36f1fd6bfcfdaf2d616b439f4b07e21db3de47115f882221bd2504e654f87b24f727bd4e7fd07b71d66f2d6ef377013b7d495f7552475b5b9417bd4e1f619f01702c1d61ae294fce8f4e7f3c6979b10f7ba5f1de8b7f6a2a32a729c0377965ac353eaba0d7bab6fc26c94dedf88fed4bfa8fd1b9d578d7b5fcce078e390cb5cf194a3f07cb709d67d39ea8a49dbff23c83bd0d4d7efd05cf965c8d9f2f4ca5c3e1b9ae5c6bf2e13f3ffce7fbf49fb1af049add380625f9f0ebd7c247d83ed425aed711429387bcfc399c785b96e737d8f79275fa39e1fac2b825c4763fd5870f5848826da0f7b6547f2358d1aeb4325ba4b6077a5645f05417f5bdd99d250cd8bb47f80cb5cfea4a6ced487da3dd1c0fb8ce1be8fd90394df5df27f8a1d91d31b342b2972dbf39273c613268eadd6a9eebc121f4e0107a7008edbd23bf9043c8c5be682e0705adf765fdd49ae57b8b2496ff0b71829fc01f4fb0eda9fe820b600505a29d3967d8fe04272060f9937ff72dbf33237f7efed4943ef062beb684a5c9d782a88601f63d405a7d88f45681bee382f753e97b2a795ff96ec312e590f458a47a1a12359b2bcfc33df60351bfe355e97f6aaae4e2b1583efe37f4618515f4cab37c453be7f905f1ebb9b94dd6b345fa7c504fcc1b5f5c978fe62199f710116785c44f7d6d096b5b95d666bd8fff0c18c2444e0cfc3ebc4f7ae206d9be3cafba46796c1e99ae17fe1e4369b09afd87217642fcdeba2a05567d1868f537e8fb21b877961f5a3b565dfe30086626b0bb6f14f7b276acae1c5a62738bff0c18d06e22ef24621f123471e6baaa23b355a556ef1e6c79ab702f3e1d7ba57d3b51ee84cc6f81e716e4beccadf945671fcee282f20c5f2e4f12ddcd695faf60fee9267a698669bb7221bfb9ed64ec153e5f6b88b79231e1edfbcd7b39ab4f1cdfa39ffd8c7ef6c2e7fe32b5fea2362d7556abeb49045faf32fc842e76387d54736d75f869d6a5e0ddcf8f9f2e99678f6b36b52d60d8d4616093bfd3fbb677143bbd73bf1cc5045ee3fec1f6096c6a99fbe112f31698aae06af5c1c214655e57d6d7e6f7c176aa969333bae8bd0e63512557e765ef55e9d46cd15d59511ffcd3f428c675f7cc14d84757e0f35181673034d48072fad4a85de884ef57f68d4c5fe66cbe191a61cdb5fcfea7a10e719c57b3fcabf332b9b6d85ee8fe666517cc2d9e7cfef67041dce2fe78e45d1f79d747de35e7fdae9f773dd6f31df1a9e2df8d39cba2f8392fc7b0d8637b16062f37ac2cef2aabd3281b6c8357d65478b2f01e7bd9d1a848719dbcaa84eb64174305dfe71b8a3cd75bf1770d48cf31e06e737a2c6b9427e8cc3c1bf22ae00b1fd33c8293a82f7fa4307ca7f6ff46eb9caae353fc5daab617c5801af6858966f327f46eb35c553257d4058c52d59a4b47e689e1a4f6d5e3811f28953fcc60a4a6efd01b86b607b156f7a9df74303f93c7dd90e6d7aaddaa4e748233adcfb87ea37d42ec6b795e95de9e3c750aff41f322c6ee5e4cec2f3d34792ee216677a49665d0fe0eec89c4b9bef6c939cb165f9107be538119d5379117bbb789868ec31a631ad3b9d388b2c9f1de4ac5d6c8f66d2ca84fe57f491d0ca5ad93ea2fd9e29fe37e8174df47196cd4f395fce65be5bef2ca2d7fa67510ee8dcf39ae1b38e6cc769ef92de53fb75a939bb2b6cff9efeb9d27dd9b3fccec26a3566665dfb3df46951766fcb61af6bbb5698eaf3c6778da82bc3d160521be0736ee5e4078fbe7bf93d7efebedf1933f3ad52eb7d31be76a33be4aceedb1faf6133d0d5a1ffea37433d6c86baffb6b27cfda3ffd20edfa605b8ff779f79aa4e6f7a9f9fa9191cefc3e77f0c46c06fc9ebaab4d594cdfc7d14f35d8e26497bf7fc29cbb2346c790ef4c9130e72b6af4643ef8d7b1bf7c2ffd87dc5fa2ed27a0d05fac58b73ea67e60ac71b457afe8bdc17857afe598c98e849b989de135a0bad108b007f777eb4f59a29aecfe929019e2e7d26cf4d3aae0486978defcb629e31ccebf3e710de2fea0b29face8f5eaab3f6738dea0f7fc1beee109d811f67685424f493e91ed98d85d3581ae8d7fbb0fce6f25de1e6116f2ce403e4c0163bd33c5e31cac1e269ead0ed75872e70d802f60aefbb1ae16914d1b67a5edd289e27dc332d774ce623d55f05f34c7362793992391e076844e15803fa31fba1c9371ae668cdb8ef022bc4f388382de6f14bf2990526f43942ddc061f308bd9c7579612a90139e1b6a9fbbd33cc3d7ea4427fb1e79e0dce20c5587bfb39a61057d8f895ebe3ed8385b443cfcbd4df066e7de51a071e777b0cd87181f7f4f367ece8cdfd1f80ea72b76b2b698dacf691f129eedf64497d66413319bd80c880ffee7e6adf5c4bfbdf49e5eb98634a90d96430f0d26e1d3e6efb137fde9e9d2a4f3b6781b7b9437bcfd8fca717609ccdf24331f63b21f52f7e8f5e7551047b2307e1db71b7f17a983dc06575dba0e79fc8c2d323efb4e3d24e30be7d99d43758c7cbeda9c7c4ca2be119dc957357d265f158a0155323a64d979de972b3994673d12db9a62b37e011c7ba91c97f5d2107a2d7b6ed6ad59af9bb14f0c0f9bf2058648c76353884e2239e31c3ee3d8af5c1f8e612e8aaf4ecf63aeaddeab25b730f921d108cdc32a16cf0794ef1b84b8fe79662a4d8fbcfbe43f69de3f0dc5fefca23d0ecf96422183b762f8e6144eda239a68b4f6d58eefae433994127992e3b99063f98e43398d03798b0235ce349eabd27a6783fcecec5a67022b2f0e11f41274b18f2ead6c75e068ca66de1333e3843e2339d2c4d05409f5ba7dceac4b48c77ba32bad345ede5abcecbd929e13cef23b4b8baf05767798a817ee89a1ba4268a8baabd5715c941ae71cc7573ad4349a5b7d94dc7b6849c6d7760c8a374ae43f3d93f796665d9abd6edbebd70f6dfdf6e1acc61e1acbadc678d27a7a7a7b795ef43f04fe6dd6dbf43e1a59be07fe8df451bb3fa75f167f4929bfea23a7d7e1ded7af0dbeb033a93d3b7fbf3caf5fc7dafa56fb631f78e36af0c699fdb3203ca315e07d4fe77f3bd5ffcee927499fdb5715f66e05fc5b197bd129c1237bc21d63f20d946fa326e9dc90d80c75653027fd887d64d5fb60afcc7acfb1bb926bcefa0b431d72ccef3bd0dbb5b67cc46b4abf917d2eeb79032c313f49c6a081393d2db69fd49e97cc9ed91f52f836eafd83dc3dc278d27aa677cf33ccaf36ae1c1b2465e2f54992ff36d95fa88b32a729686e85828bcf86dd1256a63fc9da78c6054cb8a20926e871b79cc0bd90f1318a61f66f431375a75fea22fa4c784d93df3b15b6b62a000f498273e3f6f599bcccd98eb53c4e1bdf03137c0e26b8a8bf95c96b125c1fe05c0bf816d93115e83db8026f70c53ad57c73a9fb0ca7d799939c21eb95be6e5f8ba134385db1c32a9fa9a9ba6b281b97e96a9efbdcb3757b1f1abd0f8dde4b7372b40e639f593fff3d6846e7f9bdb1decab97c7d09dd9a185792ad8d913ba40456f9ba1c7d693f5e267e3cd3168a35eb689d3fe2cfc88fddcae0880be778939c4867f7eee4c7d78bfc9c432dd05bb55fba8ab6d93dcbf4734d51feb001b3e1ae3575f8592c9701bc1bf9b55a1f21531c38ef5dc1b545a7d9f3a25aeac5fb760ebc5b051c85b9fbee94fb229717ca9c6631c59d9aa66cc0b626e34d9d47bcae3ce5f625e0f706dda87183ad0189d7e1df9ec0dee9e9bac86e0eb96aec4e7e1ec7c9e5e2049ef1744f85a5caae49e62cea6bd247c2cc5075949ed3dd1e84c2f3711f75fc227a4ffb39dba21ec1dc7bf1681c5eb5a6dcf1f3b8d32f74398d29d45feb4a3fd327949b5f2ab0ff4ac6fe257cbed2e731df073c763e777a83d83d3ca90b48e3d33d4179be45f24c6b3cbb9fa39a520df270d7d561db398385b0e170a7ca4b8217a9215391908548ddaa84fedac9cf4fbfc709f895c36b5fb46fa364ddb25cbf42e9bec3fd6339b7df215a27eb85e892eaad447f3f8ffd2a98a3d43d6e85296e7eb01b9ab276265d796a8af1d961f9de5e475f995d79816dd968248c74550f889d7fde1cc0851c7cdfd2fa6e876cce89fd5845b026477e37d455d8c71f857b188bf764a4e78a9ee9a3bd840cf72a1fd0863f1c1364d62871afe7c7bbd7c0d4e5d4f4fa2bd3d7d93ec6fe55929fa70a6d9d9ce70b127d7e02db792a4738dc45e8bd2b50be508619a2ba6ff43980c5513624afcd7a7da15e272f137c38f8f73d43ed7f9862736bab1289a5b335bbca75f276f39abd76c401f906e365fa3d9daf998f5bac6bdd006602fcf9ebf36e6de85a5f8ed728d2cf5486ff6bab7d8e3cbf067f4ef976c5b8d86e827372901a8bf0233b9613f4acf3e27f498ffd88b9aef4011f90e4b4a5d86be8d1d145e453bd6f2e750e89cf97f77b73c6f7a1ed70f10635ab9ef6e313bd311f86d859eafce416f98a049dbc3bb9bbda3be388b9096e7f6e1f5c9b67706d1eaa415d541b6536447a9df446441cd3d7c7d34a89e73a23f6dc0bf51ae9aabb6667829d0393d7620e6dd0f493e7942bd6b7fce682eedf9ae9c77c86f0fb4ad34bd9f91bf08346891a6b85fecfc2e4d3e79ecc692a475465dfee3e0d87a2fec2daf29bebeaf09b606bafcdff496b2117e58665b6c24dde4dafcace3d508cb7f236705205eed94bf028a2a8af3df64d53fc5cec4c065628603b4374396603c625446acf7e67ab8ff27e0f7a7803a671a4296819e56e67f23693a385bede48ab4069cc0a693ee5dd6d57c568753cf2eec4ff1e65c711d54dee606e1ff8b0afe08c2c9917eaf09a82e69a2205d5e784b2cfbea17c1070244835c6af8fef7a4de97fe86a7fdbeb0e57842341c667877c5fba06127135646b4811b6b8eadc5106237635bfa982797be4981e39a6478ee991637ae4981e39a63bc83111bb7cfd9c12d4af590ea9d7725f4cbee1334c99a66cf0de9bf7da68698bf28cf8faa4872deb1b9cc35b2553be5c6aa7a6d0130731c6f3675efdeab52524736144f7af9df50bbd9bd2821b909889f84dadb3c695e2b221bac531b735ace739eb988eeb22df8dda9fbbe198cbc923dd1e5fcd9ef7cafa9d192e887c1ebd727c1dbea10a5bc24f549b9bf54b68cf97ea2958fff4da8ec46f567668ed702db13b32c3ab1498d32cafd2f3415b7f59cdf5f45ce6da82bd5cc87a607529cf88525be9227ce612dab6a7f0a5243872fed3e6de0d74def9a2bd0ecfdecb0994e5023294a79be4023a84c13a80b3dacbbf99880dafcfb999f0c969aec8f9d1cec318ad9d64bd88f67e0bb6df094cb13335c87d7a36076d324638e73d8eeabb56cb0113d7532ee45726724c89fd725ddff02e3839f7e6596a19bc6e857c9d692c6492b393edf587bff31f75e73efc9d87bff3f077627f67bfce69a59cc539b59cb3f2376213f44d4d719dc20f25714587b14487b1c3afbb581a72b78b9b9545f5f1d335a3afc51b25398973b05a89fee4db9fb7bba99d25388b4d5efa5f3c7f86aaa35725cfb72ecdcbb6ae548779ef58923ef3bd8e21eb8f7fcd382acae5276d3ee5c01806b63f59e471ce54c1cb9ac8effe4cbc0fe1e7cc9e93f3f428384d9566ba1add71c4dee48d3b5fab629ad35f97f6df76f1948e8d7f2ea2e5576bba949d6782d102bd8850e7658e719613fc6c6e2f548ca14a700742bca40c1c980bf2b38c0fb68bc7ed75edc016ddc0ccaec1ddc6c2c5cfdc0e277c859a34a93edfd16936e32b38ed751fad2de2ab2f6e95dffe5e628c5eb9fcc55d70dcffa6737fc33cf7597e7bb4fc8fe0b72fe62757515b88e2bd71e23dfe9ea6f2d1e7e97ce7fa05c97156e30f7c551c7d785e99bed7d0b57c1bd9ad5a1a839ae89dcad5fc823b119f9be632c6c8a7ce591ef6b46ea8c34f6cdbd2737e375c4127c49c37595b38e5bdb336219de32bc6a7542217bb59d979bc2b55dcd762b37ef7f746599f34f651be28ff1dd73dfed3e6de10d1ccc8e30aab60af9367df7d9d87dad074dc96c299e571ceecebd749eaa229cda9e1034711af8f6a6e064b50710d22f12ee3cf9ddaff393c8a7bfc80ec78abf1052ac65f94985fc6e59e9fa7cbf6ff5493a3bb3f7c69f1f3757b18d433defd81dbb8ab3bc579e036ee65ee1fb88d5bc36de075b7d5b72afc233c2f356b7b7add6d48ffaef911dfeaca12d99e6bb8664b60e38979d1bfce5f89c64bea5fc3a89f8571079875213a539ab2762c3cdf5d799be0aaff0affa10c970adb47a1aed45ccb5f6cefa92f75e2cb0b4d957e15dd93c7f6e740197a46bc17f15cd37d2235123ef7ed6b232109994a2734ea6f51fe51178701d802bf33879a2dbd5bac9997c8bf0aaee5c3be088ad6584bde47e9b53fd6f398de5733cb6fd6acfc5eeec1c46b8e873bfc3b690d9e1c4e9bbdda0f47b410b2f76bdaafcdacb5c5cb1b5b91971a5f5c03046c89389902bf00febb8fbf0385781ce7dfbf857a92f7dd01e802ba33d06700eb40f65b7c0ff85664476f45d36342d622d5df58e4dd2fe8c73965f8b72fc2b77d4c3b3e7df71de30f2fbc3fcfb67ff1fbaf296f4ac4670ffde96cddc40db6e96b3ab6a54e78b0d796dff46c3a6787f29c39eb57ba7fbf700f7bab602eb4c4fa814d547b0b1de295cdca221c4df7b38ebe0ce70ddfbb86622f41d3541c422c80f726d334a5be343c575706fbe3aebcb92e61274a9ce3ccfa1f8ccd766dd7be386d06dc4ee1ab52730dbf19923839c96b75845bbfbc4ec649f634bd2f9e698f7da4a51058a1001c0a966faf081f4f1bdfe9ff8bd752e35dd7f46df4da123cc89d8acd35f16353fab5c4cf991e88b1ef7dadfd6160d58515e41d32b8aafde7afa446c1799a047f5a2fb49790e66341c3566cac7ae26685d7d09a6663bfdf79bd9a9c21cae18daed3d8e4415f8dbc6397f878777bf71dc2f1e47dee803f7550c3ef54ac400e56087286aae4eabcecbd2a3167edbe7cf6e5b9eb2087166a8a8df49620d8eaf0d3ac4bc1bb5f8adf29bfde25a6f14204d3d3c1efffa9ab3d27d32312ddf194d7b16e88e8c3003d6ad0c08eee09d37791e523ce0a850f4d15582d28d0d537a677bec5f367f17a23d587dc9590a5ca81e5139fc00a9f9c81826d828b6d12a7abd222ae27619bd55f997e1f59dd01f13b46304e648e1b901f807a02df5cda5d6965b6c07fe40d65089a60e473956b9143df94e57766ba327006f1fc663837db4e2667417b6ea2b970e37d207b89b9a7fd3df6a7a1f43f19ef53c2ce2fb11d31d4219e3bd762751a91695175b85e177c92ad3e4bf73bc7312ed8f5edeb54104c663bbbd827e0a2ba28e39ad278794db5ed5d9ad7c07e2ef07c5a7e93e8dcd7019f1ede55cf50b57c7ba9f156c7a3bc094c7f5e9996b2257642c28d9e930bba2477b30ff98245dab65d4e3739ca11b1fc67588cbff0602eae604c57387fb4efae49e5262fc1cbdcf174114539787c36a98d0cdf4789dabfd8a17c76a868cf4d71fb7cbe3f86edf688e5e023fcc3a9f9e80757f1b5b88ae3f392a751e923fcbea01958405faf9a9ced8e46f6b99accf2d2c077db28a3071bd7bc228e6d12bf53ecc6cb6de47273755b3ba78fe9f2b5fa84167d71ad7aa2913d156a24c71bf9b8d9fdf8f7808335ffc2fd78216df0785f37604da82db455696dd6fb08c71880bb980d11f18d606e127565ec170ac89a01370fb6a11ce93fa7fe265be332faa757d5ba67f346f95ce93e7d5720774deeb8ae1c5a6273ab8f04d7f4078e01394ff09940cb35b19f412f435725e03702bf88703831df9f69e2df8afe78491ef85cffebfabd362c066aefc4f0ce50ec70fab95ca4228c8b691944b1b2e5cb1fba8278c0bd40dcb5f3fcca7b8cd9bbedc49f53a14d6b8809ae89b3c67517b84c724f406f64757d2979bce43beb51a3be16f697af7f4672f6432b7afe793dfd69df620a58e84cdec8cedb430e8d9f5d6b06bc6c6b869330bb9e63d5e5359e73b2b7a886bb380c34c50e35a50638264dc5b67633b701d385d798ea91ec8e3531d755ebd8ef8e7b108f3bee53cbcbd765723c52fdedc8d8d68e5917684cb699bf8f84adad0ac93a9ca3cd3c471791abd725d78c737681296e6a567d48f09de4ae72b3f9c89e487201380ebad59c0e3b6f99f52d9677b80d5da576da57bf10c66af79c92bd5197b8a41f77f3182b2f7397c63d0ba78def11b39f13b33b05f39c15ebc4a5ce6a65794e53444ba3484ef032b963cf503a33cbef2cae32af513f489437bc276dba644eef121a2927e3388be65e7ac5f32fcea9f80fc0d425b0bba41e75721ef7a11bf205ba21d1986751ee2cd296ccfa6baf4ac25f5398efcc2d0c5e6e58f9fc3e8c3378654d85270bafe9cb4e8d857dcf6eaf1aac851ee8cac6eb75ddb5a60e3f7f8ea467236353e9f86aa68f36b6725a3c15f9b015c44e43f6acf3e2246cabd786883e58ec6275a595ed234f87fab6c01b6abf06fd0cbebcb67c799bf04776383ccc7acfb1f8e602fbe9565d40a0c9c16b8ea10eaace39b4d93d94f0c5aa1ceb2df777647cd23baa17eefad917b94777e2dc6ebf66758595352338ee7bb94787e9f3bd3f8e2f38be47bfc719fd1ead8271c14c08cdfaf3ef1a0f7c686ccf5d5eb7fad1a7f6e8537bd8ad4bdbad33fad4004b95d3a3d6ebc25c917e23aff132c69fbf002f64a1fd78c8771e09d2b020a7fce133f8e418492c41ac1b4e35ca892f7a2b3d6cd9f1d3987bd91353f89014be328e6d4ae4278bf7c85f1d57adf19df51e4eb5cbd7b5d8b30ae6c9f7c46653cb47489f0af11d0adcf751ccc06a22a5f6d745f52213e36438626d2605baa239f17c0b9c190ad11cb37a58a9fd74020f21b69befa2ecfd1c499c359377f8418ee6687cc0e137805fd2b7b07f313794064ae5602e89fbf765cee69bff1f7b5fd69e2ab2bffb5d727bfaeca5b8dca7edbbc644d01de9562343dd31f807b540ce7248f03cfbbb9fa7aa188a494191903417fdacb53a51a8f137bdbff7f5540ff934c20ed969a537efeaf6b206cc7f1f1abc71d2edbd3993271b15e7d3848e214f8af6f716c7fbc7b9101cdd638f409ef7b4dee4d7981b790a63213bbe3178d103d5d60e2f3ca7eefaebc5f9ceab1d9d4082d76ad29b9ad1be6193fba6d2faf585e77cf57c4726f6bacd77b4f98e366ec8fabdaf95ef889dd522b9ce6af21ec857f8555f6d39aa7f3c625edb1e93b6c7a4ed31c9b5018fec31b97637e3311b52df459f8d30cfa17f89ce6bccbffc7e35d751475974eda4becb8374a95e14796e8d5fc05eebe977e92464f5db62bf84fb380106a2793681fd7132bc323cbe04ebaf4882a7f58433ba7b742fc262aa9278c6faccbc7fc6b98fbeef1bf9f38a7b23d62b2aa710f6e97270aff1b88f3ec067439d599277ec4d6bafefc6d7e1325e152cd8bdc6182eb2cf630e7fa60cdfafa948fded981b6d747b70d63dd635f8698413b621d4bd0ae354dc9b81ded128c41bd5e2595b3ceb65dfa9c5b37e71ffc06cf1ac2d9eb58177688b67cdb40b2d9ef51be359b7c8ef7c95b00f79886a58dd5f4086e7cc1a9323a0f3be31b88147c542b13b8dc28d66d7e36c08356e66ae78d632387330deb26ee24ef36348ff7d6fd400f6fddd03cd93581bef140c639809b6e7b133777b1d7549613c93febe82fdf0df4d15c58e7c9a5732c117f9697db38bf47a0431cf2ce498f25231a2856237cd637728de31d2dc8a2e35cf100cebd483cbc19614f53dda1c72f5fe9c239e813c2e10c35534a7f86e1f1cf1fbd4364601ea0e70156659dbdec1bc0bf264a331fd2308f897eb1baf7fdebbaee60074ce4fbab32de663b6fe6bebbfb6feeb77f35f2ff978074316a0bebecf9725df51ad1f7beb78681bf32a1de02aae8d43fb237b74376bbd71f46e091c3b9e67a68f79d13fb3dee1cf6f7dfc3523ec179833e6c3d28bd650f3b4a1d11e25ba845d9dc13c9e3ede08db484be9cdcf44d3d94cfaabb47e9f857ddb9e70521868611c133f3969dcf2d3fc7311af09fbac71a3737467d632de26e2aeb27cd98e2acff760510c377033a727639d746746ec7b85cf2a5cef68aeafd3d63bf2c6d6d63bda7a475bef08e6d4d3980ff82ac18c757f79d4bc865c54409a1d747ee21a36dc03c980e3abba05e9b5bfaa91d0d66cda983765dbda98f72bc4bce3cbbcb72896c4dca6b837581e75557982c780fd709f77f16d2bfc85f971efd70b2eb41f33cea0886381978ab998517c15e200e37d7c3ed6c8031280e81c2a0cd15c55e5a949e24976836317af21fcb690c49c99fccc2f158df30bf630eaf6600f165db716fe5afcac885b1873608f2610d8a247cee55dbd8dd41a2d710d8ed80914d7a235c379fa008b88ef59b27e75ebfee2383bbe0fd7ec827af7087bc85373b3c07537621fd03cca53139d79c3f67bae48dc8073027562fc2ee8f5c7eda76ca19f9f635a91397ee2ab94d0c54fda8784b6d28c191c0d2e7eef5f8a1b2ed5b0637a4d911dc87fb764add2118f648c5da84913a8433477e2f90a5f7f21edcdbb7537af68362ab27006f2eca0f58c2390c797b41a4beb34deacd188f5d9471b851974d13e56ec0fe8eb2741cd11ba64bc011f2e7e7f5c67d7a4d1d1d79b72b5356b298c70d2edb9a5d9020cf2635a6fe228523fe411c33c4ddc60af4a02d679c2185d9ef534468080173d204f2fe9bc27fcaf32f6a944bc7e45ff3d3de789fdca034be345cca3a6f704680cbb1640b1860d7d1cf6e0a28e5c690db9dbf5e37ed79ffb0b200bef1a83ee8d09b21d98034191e6284673f5de1cfaeb6fa1fbdd18e2bc281917ffadd6eaac31a93ac3279e47ff6e73623afa91065aa47b7bd29ca9a930b837d81b0fadb7b7ced42da2fd7783ee5f89b8a78cdedf159d627bb069d0791180d45d037972a6fa14a81ef5dc75f9ebbbad8b2af537843f6576d06df1ac7383a3ce64ea9234e70c71f0a83024fec03a823df6a439c85ecda142f200dfe53edb01e9e3fd5542f1e6bee16b62418dff93e8407b0534646fd08f2dd3f75d4237f68a66ac70d26ce0825ef8b343e033915c6e770fa4d1b641775ba62f40d6283516333e16ac47b301d83f9c9a801930409ef85a4bc24e91fa0ef0719be4fb46679d113b5fe63e2ca2497b458f96c211847b35c89bf9315e4c2f2707ef1bd3f47c95594f9581ab71a2036ae0af5d5279fe3b3866e8fcc479ccbd98988b9541ffa67448797a6cec0ee3349271f890b5346e80fc53dc5b39e64647b2b7061b551ae11ebe64cf268a395e998137e6fdfbd51ec5f77aecb975e72ea867bf05b9333a5f86396fcf3a276ed0bf155a6b87aec1a03b9523fd8b644c3837b71f73a3bdc6f49d203e53a49f38a6d318c15564dc479aac9d5a9a3d3b61dedc30860be3435fb32a7aee97ef7d6c6e0da8c502e4dbbc160bf035b100b621f537be86158a9bf07e06d2ac483d388977bfb8f7d17f65eafc77d4b38aea387ebeae288cd9575c5f2b595fceb2ed4b35e0165d44dc6734cf26c0be226454e90302a610fe2f7c5e217e95f23ef0efcaa63fa3dec9c45ca781fd1d91181faf6b14f3d33aa3db94cff005eb54c0118fbe5f7bd039d123be9fb8ad819f830bef01676a2ea967dfe16306f6724d7ca63f4d6a7c666c7cc497b1c69ce11ab678a4f5e590ff18f7ab88ff79530db6522e42d0d56c529fd03d7646dd9d416dabfef1d7d687965f938a7f97f813fd5c6788b69d423006b1bb37efdebf5073ab50e3147fc749c3189b3af86d235cfdbdfca0c08647cc8f42f783f93869854131d884e0871ca2afa160aee5585f6618e7d5cf7f1b9b87c84f9480abe15a2fbd2e018f8e60a13de4fb8a1d6c0770ac49f662c8cd1962c11bda9719e9ebc639770ae0069bc2c59fe68fac821f2ecded447857079ec151facccde7874bc58901fee6c6f1b5b8b83b707159fe56660f043f39e999eff710bc70ecacd687c5fe70357b5f1b065b47772a2f66e88c64de6d3763afe339f32ec6b1b418e86c1bd162a05b0cf477bdebff0118e867aa9f3685f3bd5b8f65c1063db699ba2cca82a5fb799b9237ba3827d7b0cf58ab857b89c5516538cd0bd4b583b147fbee3be632b7b198add25c26bd3693ded45479f1a0483f0fba2d5a801badb530dfd9101c7ef65ce038570c6af9e1cf8df398b3ba9a343abeca13a84801fe13fb0a656cc2757b108e79ded16db836e479663c4bff3c3b57d2c57b2f735f36e46e2436ae923b7183ebb2cc00d9ee607faee9da95214fdeb59e40e7a61b7f4f06f313ea0f31a30e908c938ef976c91c2814ee58e7454fe70667baa6f0c03bd32c8a171fdf8749bfe979f1e7de81554faf692ed64f6706b6c11b5642d7e8d27fa5716577dd7bd9637aff7b3b3aae16ec596340c760468136918feb426728ae0d0c6ce869321ee7751c5ac67d5ed67f2fb92773ce6b21ac5a6a6df2716b96a5dbf39e224f60aecf5c6aef889e61c34da67660fef7959d8bf8d86e5c8768fffd89eede3390278c2a617c28ce6d6bd2a88ffb157ac005dcd29c89ec442f8259fcae7bc5614f1a0737abecfc49d9efc27d207a6f9a8b4f48df11b9f85782479488165b15dfa771a3749fd40de701f4441770a3a372192b9d9ab786dca58e21a118e6c3d5ec25d153b7c54073641bf25cfe63cf83d051f03c4cb2737225f70afa5e550a392cafe6cd080f57dc27b85a8f7004c2292a5ed0b8f2d708c5b117f1b117fc979b710cd13c85f981481f94f201e510cfefa218e655c67da0f7e9a53899df59984b8ceafdad9cf737b44d8fc767bc05cfba07f39be4b955ec41d718629e2c57b3e7ae61c3ad218df67e1fb18b7b8cb3b53d6ae70ca3c68fe3e8459293589a9c0c79e6d7b9fb5b55062ee0454b1bd23e84e1625dd2841e648b99bd7837b698d91633db62665bfeac47d6c3d19c7634463869f5d5e0a3bc5d81b52c589f0eb914825a69c1ef6e04ae87ae6356724fdfaa8bd8b47b3aa68549784b6ead5d9789b35aaddc594e7f5f0edece3f2f547c13fa502a7a5f1ecfcbf5dc6cf17357f8cc659db7aaebb7624e8d33eaf3154e68cfa92886b475536326ff174842a721f589186752582fbb7d4c0da99be13fe37b6fdb7f7e235cbb9fb6f782fe8a7bf75cb8871d486b847775873de9ccd2d7808418278efd205e8cd59030ee8e133d83dfee43bc726f6c6abdf98eac3359cf32b89f82989fd279eabfb9f1ff8af5a5447da1fdec7ae0e888b9799c3924be0aae97527c22ac876b21cebcff3a0c71cdde981b74544e447fae555bdc18453466927bb501fd2c686d0d6eb0d198f71a7490d05cce4f0a33d83f204712ee557f3c182b048698afec3dd012c27dd461ada5febe656afc177324d1de23bf8fcfa434c3dc007aa0fbb4207c437e1ee82b71a6e338f9559e589a6d14f2ed2fc66977f81c019f7ac33064556173427bbd9232710258531973f6137f119f190a2381e368204f3aabc53bc6421a43f6a4afd913d6485eb327c576a1d26b0c7e2286e3a9d3eed58545bb954f3023fe8d9fc1c7e7c767e879e31179de1df7bf8cec2edabb3acfee554920582cbfdf4e25fad370fc0267c66666e2de8d21eb616e1582ebeda91cdca881bd086d018bd75a91e7b0f63e45c89ed0de5adaa323887837eb19674dfd57997eb72374b03f15c7491e35a6ff17900cf42c062cf1f9747278206bea0127ef59c57dacd97317e3b882f5e3c97713df94ec03cd110f8a8d7c4b78c4fe0abdb66fcdf0b197bd39ba0f83bd5ac9b81a82e7859a9dc843d8fd93b6ed43c08c3aaa0ce002db4b23ae5594b81b1f1d1bcea57ed1beef72fb11db42ec2b60fb30e6fa5d8cd55b13fed2602df5f0ae6a0296573c82e730de43efbf21f71bb9fb906ff305f76107cdb1dec3effc8977df1ccdcb19cfd17315b908b41682657084bf1c2c587a9cbeae544330e289b1e7ed2f839f589a2390f342ee8d6a31e1c314cff5a5fadeef191c6ca6628fce45e29bf87ce5e2bc96b3ee9fd7705937e1b1eec2613d7fbc076ba649f0ec731a607e02dd1eecc7a358fc7d8dc3d2bc89c77258ae6e3b2ec96759606dc4f9a8a96b43b40fe6dca8a34886a7481d7319e56b8ae1e16ec4c195c4bf95e2b72c8827bb8e23bb9cc3ae8e53c30963e03a727ec1b3eed057f4ff8dfc90740e83e2246c1c266a16e499839cc43cecdb08ed1f958ba6f802a3780d7336aad2cf848ee26362b731d775579cb8c5fe8723a66cc4d5be535b64803ce9630c97ad1f54a9bf57a57e1c235f61fe3a5383faf1b98c89e6cca18eb96bfbd0b7b177ed6f831bb91a3f35490e388d8f0bb5fb33c65b3737cc22e31da8fddd5124b8d7bd50df33895b0c75fa33e6f02be5b03d20754f06b73c841845c9af2356a5419ea97b8e7c983f6bc318c5ee8e756db81f7467fcaa4f4b3e895f662ddd99f75b7e8acc7769f9295a7e8a969f228f9f82aa239278a0ef7c621d3189d7b9375f28e6704fd0fdc647eccb90bee4a03ed88c7cce36a94b8873d7b78fa909788f617edf4fa6af98eaff21b6ee553ac0959cd2f609b8f3f6e8f328ce5af1ac6570e6357e278c93c9e87724f7a30d31ef7af85d5b96d2e64dc709012fc86db12eb293830e5874031f3ad0507fbc0e802d1eb4de1c8e5f700dcb43fb48b3c50de6401c857e70995a7f612e613d783697f16c3a86ac5773d05f0b36193f413064df8218a700af70e07ba7e2a12467665d3d4377e90fc6b1aea93313cb1b2d3196328ebbad120f16c632f068209f891b78ab3ace4aa067f1423df73e1d4eacc1a7310afeb9c20cb6e0adef6a0e40fbe0a43bdb03c6b293676c34660effc65a7ee8fe25b91945c631d1bb6e8be780bb152cd88322f52dc088043b12ce118a67715feb06c8313db24f3a6be1fd32a1c64c697a863a75e939593c781e9ac8f99a99cba2c7d5c5b1c343b4e3db98ae8de9da982ee3fd1e1fd35588a7cbb8471f6f3717529f41efa6f526fdf10bde2f77e4a15f4c9d8147c07c4074a769f6c841fe944a3f83ecc9a6d45768db662e7c7b1ef06555309626e6a283fd96e83f4e9dab8fd439dcbce4d5854bd5830be34986793c84a99eea4aecc6984bf0b5f34257c7989f398dff6dbcdd4873b7fb3edb8de36bfb19efe8671cb67599b62e732b2f405cf7e2558a69995cc5dba4d6b4c0b8ef5cf3b637beed8d6f7be31f654beeee8d17318653b7d1e7a107da7ef9b65ffe53fae57d5d6a5caff90abce7e47de31ac1e3729a4899f1f2c003cce8a8caae15dda5feb3126b6b709685ee51dda3f9fb7fd2eb0d57fc2c2b5f6a8a9c853e7750e4ada9d84b53c1f50f00d1dd8cb18ea15e78e299a4ffd9f5715896dec339df8e6e8f362a836b9921aeccd70e600ce9e308e489a5d870afcaf3fe9847fe4cffe8f7ce9f34e6bd29bd9eac3f9ecc33f6d69b388ad47757a11ef33bd67006f22c59e7f5b5cbe079ccfb5c830b36e49f23b55ff1a79f2b8f73d2add9a58a3e87fca105d63db3b01f688b1ece332d70ef794adb53c76786e4cd232d6eb133e6e79e2209bfe29ccb2cd11de44157e3fa50b7476b55fa700d7e6be278c0eefbb1dfe0a43585836078b1261de65f5e259c7f39e8b678d6b9c15167e05ae39607dc67cc6f2be6a4f4638754ef38fe3eb477f660187dd78cf7793113311aa54f8fc675d378131a7f87183fe77d7578522324be1904c32ecd715f988f33fe3e0fa8c95f8e8b6ac899c635162bd27c5cfab86d5ff7301a1390e7611d0df38527f510fd3e34c04006483f236dff445ded337420afcc55a49711d513a33d678b1d82d747f7ebc8c3f76a6c7ffa3d8581a66a0c1b1ce5750b732736a56ed8e682fed9b9a0b69edbd673db7a6ec6fb7d3a4697f6870e85722a0de081a36d6e22863597b6680379426a87f7e37bd98cf8c5cad67a46714fd28f199dd37ad6a97a6b53e2c77c4dba35bba0e26b0a3355cbdc3423c7e388e7cfdcf3b4df1970a389b200c7e4ceb83f770309f700e97944fe3abd5e23aa2efde9fb7442f9cc01e79da833cbb83ed8a8d0783e9593c0d7c5303589f06fe0f797a7c575b88a3f2ff6dc4b5c08977a34b2ed656edfbd6748fdf3ab2c9c80e3eb4215d56629e3dfddbfa732e7497f26f16b223711d38f23f7da8b39e945639c78311dbd20cfe9e7bcd2581b15dd831c3ceabdb9a5711f2806c41c74862cc07fb646947806f2f4a0225ff12b6ac891fb3419dfc7f6862a4f4d65f1a7438dd1c9b49fbcff5da91c00bb53e429da5767831bed3562578f84b3553ca39841cfd096bfb2feb79e9de27e79d69e8def83029fbba29745784437680fe9dc60af4a42fffbde3f819e9a1effb99f63f36b21a9dc1985973afbfb06122ed97ff8dd43e763f9e941e727278511cfa9dcfbe53df0e95a8444b737e977c7ee1757473efbd020ba77b2702e6bbff49ef88ef9a0f8a9cf1f2a1e911faa7ce7fb27c02dc4fda8ab989642bab0513de512c7da259fef66bed4f190d2a52575bf08cb9d5f47f9faf5aa923d61b8068abe7fd875d3b1c8e3eb35b3f0f96c3a162a8831c9c296c4b87838eb6478f1faee9817d033ce3827e011aeeda8c64138c56ae78add62ac80a731ef66468c1ce42a024daf3540fe1237e825b0eda68eb92c051bf778114ef4a86e85bfffe3fce535d752f8afc6e4d85bcdb55c5bd36aae7d51cdb5a4cdf4d09956d15a4837e19d3f2ac63b077dd459bd36d571eb25b10d72888b23bff7786eb290eff2559a581867348abfc31d188792766574447118e020a34af3ae5f23f36df9a7d9cd03ceff49337319d67cf0bade683baf8cb189988570af26fa89be10d63fdd2355a21e30ccef7f4cecc728dee328fd8c743db7689dc02c5c2b18de9c5bf95dd9a4fd8ba027f2c6f1b5f5ea3bead5e382381eac37529fb666ecacd6a795fae16af6be3e6c94b38de12b3f0faf4434d10b608f92f352c06faa7ede30be5f662ddd1e65705e3c6ace04745f04fee223ce41dbdfd6f6b7b5fd6db936fbb3fbdbda5eb6b697adee5eb6282efc4278c0301f4eaf098af3437c5a05bab1b38c3e336511e5be136bde14bc54a4f771192b19e414cb8eb1ae7d7bed4efe9deec3299a7f7a9526fd78bf4df71790e13993e7df1190bfb631b88147f5075df1af0bd6ab6275d9ae9bf0dffc5c9d5f972b5faf4be41ebb497e529f6fb452ce53fc9df5f797c57bc9f4784eeb40fbf1778ef70ce419ae752a52a7702f99fffb8f1f27ce9d057bfcbe71a233ed7f6ff171c69eff081edb586c54031f270b1506d995a9b9a4c6768f6e3365abce63ded8a992b0233a81f3007b127171712f541e15eddfa5a948f32daebd33e2b6ee3eb80bf311d79a25b5e2407b93da4b73346617eba2ac7ddcb85fc7253d81a32de02750ef0910b479e35cfbdee68ddbbc719b37fed4bcf127f77d7ead3c6a2df9e7b6dfb4ed376dfb4d1f760fdfd16f4ac71287548eb359b9a437ea5debeb2bf57d603a7e1a73046fad7bac9bd6af69507e6944c764257b46cb8dbbd939a7586cfa7d732df118ffebe6d14af29a67cffde3716c8bf873d9057aee1df987acb378d2ec25e63ed3a4810716448708c7eff27c37e669dfd3e743231aadef409ee0f7c5b853eec504c846f9fda5ba2deed13c1836cdcd169ef9ba39d2f3e63137ffad317d38467b95eb9e747b69a2bb0ec87e6e06c504d1f7b91a073b2b5f8357e7448fd8171c135a630e7435dbd764e5275043ef290338e6e727bfb61ce6d99b8a356f40bcf58fc0e9843d34d975ebbb9f19dee1814fed1558bfa6f0e5c7f00d55e4ab6e8e239a96afa26347729fdd8a69697b04eee911b884ad372ff38c44bed957a8bd2fe3bd7fe612d9c6053b993f57800fc179093c1f345f6cc2ffa2f4eeb949176b9cc8c299b6b565721905f318a573187efe2277ae28ce12e24ffabddbaa3c3513fd95265a03ffdcae0d597035f4738fb50da9bf217d400de13d2ddb5799f4f96be90d897a9d1fd85769ab521ff9d13bad17e89250be77baaf9fee3f37154abb2fac01f2d3bafde6527345f27373086c741e637d23947f9dee47a7beabedc36cfb309b85ab6dfb309be4639905e3c577dd1ebcd71727c6ce6a6df1a2c6c1a35a2486ab2606cfce8135917b36bbaf021a43acc96d698bbbe7ec765fdf4ee52a31ef17c93112bc5e5243ff6d2b607dec4fd4d08ff90135d44502dd8114af918ab9af221c5c987bf479c329bcd449a7382a6218ab227db7256dcc6d5afc313fa868ede4f173d3843862985f8348c60c693d7f3f9eae948b86602e0a6321719c7737a677bd5a247877be1296b5acee3add6ff7f838f00dc5574b3c9e2e3438d11b8f7c1ecbcaf09da10f686992d8a134707aaaf4b11f731338e680eb7340bada9a5daf16e47ca3f3ae7103dca3ef739499917dae5d471d1a4376468f4324ef14dc53f58dbb8998d04c7f83eca5225ae9d34585fe8513dc0d8574a9fe9a75f0e73e4f970a92f705f21ceaeb6a72884b6ee012acf1fc84f309f419cfc61fef493d2ec0634775394582477a2f1a0cdc6b43a273a4f70417307d82556e823f91319724c7c89e54a98f754830f6828ffd1eaef3aac83fa06b9143fcbb01869bd2811ab91ada473ee72f9a4f8d7b279a5cb270562503cd57537a844af617f8637abced910867e9edf94592276777ba3d3a03a28f1568cc0577ad8dee5addebba742d2b3c0784fb3388c73bb8b6ede728635c3d65fde64aed4e688f298d9d4f18736d3687e48067446fed1216fa27fab9cee0bcd35a21f1634c6730e5cfc53924317e2b915fb9f51c053dda81cf1af46527fdf88dca0ddc9c7ee87c5bca4f4e3ab3fcb7fafc92e3a3e6e648de757b70066fee6eba4edbd7cbf90ed6d37a02fccb36cf3918a402ef9bd73775fd7d850c7fa0e0fb32b7beaf9e91e328f44c47dcdffa4c8d79bf758ede753b2f16bbfad98e82f3571971992dec34066e121831b2bfafc42e687f5ea935989a047f026936183b73cf48fb5c9772b2c1bbbb1ac6a488e7acdeba2aea71eaf3f89b8c63fa4dc631fb26e3587e937128df621c7aba7f365e9b59b00755b62078eeac0d7ed24de14d2ef2b304f64864803ce9e378cbd6511cbc57a53e7cd898f84986ef1ef767c65cd75d71e2f6efc5a4a33b622aa7ee7f86d88145c9fa516e7e3ea7df23b08312fc79535dc3ffbc92973f48d8b3444c13f56a2cafbc5f8ff571721fcf1a373aeb5ea6edac803774b0bfb67ef7f7ef5eac67e6ece30f37ede35ce0f9a9704f6bdcb692fb4661ac932a09b06c6d32b75678f9fe82862d7a2b9c57e83baf123c6a1c3c82f43e2de1db0ed27e668933624819bea65f93be109750750b91bf7cd70dde837ebb19f361e9bd69567e3cb3fe5db217a1ab5dbbbbb3ce7b7e2e31eb59177bcf72d67caf96cb635698b7995b8a9dd58fd180bbc3997b9f757718fc555f3e6bcf07e7a16c8dfc51f357b0fff7a6efdee5ad4d705f3e68bfeeaaf1532edb6d2003a83b844b04785ddfa75c3eea5eea802fef53faf319fa2339cf4aaeddb53a4dbdb6f7a0cae6054cd1e53da3138e174bbb092714ac5146ae2ecfd6e6dd85c13a91b15eca37e2f126efb92bfc8bc17794c487e58dd7f76fe44c9b9fc293e6e79592fb2ffade92e37bdc1d9eb76feef2ed8413c8c05664d9b63c7f53bbebf9db7b9e7dc6989a8c9c7b89ef58dfe3dbea3df1decf67f30714cd754b5da7b41d4ddf99be0d2567e08aadf968669c7f759d371a334ff76c97986b9081d529f1fc741c5be2d94aba8e52fc8c612edbc11178777d47f7ce77e866d539f2722515fa4664dd6bf0f9327349cd8d65c3bbf30be638aef85957cfa255e2ce34b3303ff3cbef7722f5f9bea5bd087b45161e964b467752bb7e5f77fdd48c5afd0d715bd53ee79538b0ebaeea8a519a7d87ae9be90bb5358f829cb6c8a7a9e2fc35716f9e0df9cf6a6c4313ef4d14f7dc9073ceee0b1aed8d1c0c4e36ce57f014ef7aef9022f5fba238993c6a0e9466da8ec6e42b727ca40cdfa7d49978dcf91866f93395700716b4ab14df395abb7525f76e326778d63971a34aa374bdb9ee5ceed5bd068f3a237a5977c395b8b544de31eb6eeb9f813cc9e063b8f17ebbb12fa10abb947536282e249f67659eb4f3573f7bc147b8fa59bcb7b7c81fc9a8d165da070bed8f703ed27d75becda7d7d51108b782e8df292157c1a803c4b9ab49cb03e133eb7654a90b57f6e008d2f7f9555efd3427437fa9724b93fc2c7c56c09d665178ebed18dd4592f86f8de9c3aa381e121afd26d63af5ed21f53ed97d73dca86370a2a7ad598660f43bebd7f561f9badeef24e743fb8fd7355ed77b37cb9e269e1bb3a701b63bb6672fad91d4b554e93dbd372ef55ae660eb67d24fd3ffbe483fe0fcf8b9d67b686ff69d6c3e4863a7ca73b8ecb116e6dc23fd35a43f9afbb0745ec8e3b67c47e703c89363d083f2f7627cfc4fe7cfe37f2ad0c9cad8cb7f0149dc622d065bec901e22169d3ba8db3f1fd2e712eec1f45a7840c69a601b7aad12d8fe984d4cedbda8b7b4abdb19d8a25bf6d7821597db6d357d12b8ef16ed1b9f33919b58c45690b95b89e26291ed43f6540e768028bc2bc83e877b63b2d1988fbd22b3e70cfc51ee999779f6ffbcf15dcdff5307c383fe2abe1fe5c5eedfafeb7d05fd72e9790ab59865c2ffa33016a4ee4d348e93867937c7e6720b9ec7cfd3fe5fcfca23fab5c33396aedbc4d727e67bc5ef32daff8aedcdc827103d75d1a5b937abdc8fd8ff0d780a5e87ecd99084dd981b118e218a9f541427d302e7f8f2f925e38c9fcf786f8ea53910bd57a6dd3118cb3538f14de7461bb088f6a1c20cf61a377ad7994c5fa8cc7d10acd146e5c483f2f6f33f4fbf3db9eaaf957378fae3ff3dfdbd359ffe787afaed4950ed15fadb7ffffbdfdf9eacd5af15fae9f3fad7d31f4f3fac9dbdfab187c7adba5f6ffff7ff30831f867a507ffc5a19967af861ae0f3faca3f6c3d8e9dbd5af1fbbbdaec2edfaf0f4dbd3d87677bf0e7fab072bf60cea379e773af9d19bfacb5c1dc8dfe7bb9dffb7a97ad0ada73f9c2384bf3d2d0e2a5c3dfdf13f2adcaffc7fcd57ea7ee790dfe576a3355ced83df26cf0efff9bc72c3bfbfadf687c46fa3ff95f8c474671c219e057f00e6fa601db57fe93b3b63a85375ed3cfd71f8755cfd76efac71bbe9ceb8f90b7e98bb7fd93b037f8fb8fab55fe3f9e9feabdb434bfbff010000ffff010000ffff4b120e7c403f0e00`))) diff --git a/pkg/oscal_source/validate.go b/pkg/oscal_source/validate.go new file mode 100644 index 00000000..6233a9fe --- /dev/null +++ b/pkg/oscal_source/validate.go @@ -0,0 +1,38 @@ +package oscal_source + +import ( + "errors" + "github.com/docker/oscalkit/pkg/bundled" + "github.com/docker/oscalkit/pkg/json_validation" + "github.com/docker/oscalkit/pkg/oscal/constants" + "github.com/docker/oscalkit/pkg/xml_validation" +) + +type validator func(schemaPath, inputFile string) error + +func (s *OSCALSource) Validate() error { + validate := s.relevantValidator() + if validate == nil { + return errors.New("No validator available this file type") + } + schema, err := s.relevantSchema() + if err != nil { + return err + } + defer schema.Cleanup() + return validate(schema.Path, s.UserPath) +} + +func (s *OSCALSource) relevantSchema() (*bundled.BundledFile, error) { + return bundled.Schema(s.DocumentFormat(), s.OSCAL().DocumentType()) +} + +func (s *OSCALSource) relevantValidator() validator { + switch s.DocumentFormat() { + case constants.XmlFormat: + return xml_validation.Validate + case constants.JsonFormat: + return json_validation.Validate + } + return nil +} diff --git a/validator/validator.go b/validator/validator.go deleted file mode 100644 index 55dd97c3..00000000 --- a/validator/validator.go +++ /dev/null @@ -1,64 +0,0 @@ -package validator - -import ( - "path/filepath" - - "github.com/docker/oscalkit/pkg/json_validation" - "github.com/docker/oscalkit/pkg/xml_validation" - "github.com/sirupsen/logrus" -) - -// Validator ... -type Validator interface { - Validate(file ...string) error -} - -type jsonValidator struct { - SchemaFile string -} - -type xmlValidator struct { - SchemaFile string -} - -// New creates a Validator based on the specified schema file -func New(schemaFile string) Validator { - switch filepath.Ext(schemaFile) { - case ".json": - return jsonValidator{SchemaFile: schemaFile} - - case ".xsd": - return xmlValidator{SchemaFile: schemaFile} - } - - return nil -} - -// Validate validates one or more JSON files against a specific -// JSON schema. -func (j jsonValidator) Validate(file ...string) error { - for _, f := range file { - err := json_validation.Validate(j.SchemaFile, f) - if err != nil { - logrus.Error(err) - } else { - logrus.Infof("%s is valid against JSON schema %s", f, j.SchemaFile) - } - } - - return nil -} - -// Validate validates one or more XML files against a specific -// XML schema (.xsd). Wrapper around `xmllint` -func (x xmlValidator) Validate(file ...string) error { - for _, f := range file { - err := xml_validation.Validate(x.SchemaFile, f) - if err != nil { - logrus.Error(err) - } else { - logrus.Infof("%s is valid against XML schema %s", f, x.SchemaFile) - } - } - return nil -} diff --git a/validator/validator_test.go b/validator/validator_test.go deleted file mode 100644 index ce1c93b1..00000000 --- a/validator/validator_test.go +++ /dev/null @@ -1,153 +0,0 @@ -package validator - -import ( - "errors" - "reflect" - "testing" -) - -type mockValidator struct{} - -func (m mockValidator) Validate(files ...string) error { - if len(files) <= 0 { - return errors.New("No files to validate") - } - - return nil -} - -func TestNew(t *testing.T) { - type args struct { - schemaFile string - } - tests := []struct { - name string - args args - want Validator - }{ - {"newXMLValidator", args{"test.xsd"}, xmlValidator{"test.xsd"}}, - {"newJSONValidator", args{"test.json"}, jsonValidator{"test.json"}}, - {"nilValidator", args{"test.nil"}, nil}, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := New(tt.args.schemaFile); !reflect.DeepEqual(got, tt.want) { - t.Errorf("New() = %v, want %v", got, tt.want) - } - }) - } -} - -func TestValidator(t *testing.T) { - type args struct { - files []string - } - tests := []struct { - name string - args args - wantErr bool - }{ - {"validation succeeded", args{[]string{""}}, false}, - {"validation failed", args{}, true}, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - mock := mockValidator{} - if err := mock.Validate(tt.args.files...); (err != nil) != tt.wantErr { - t.Errorf("Validation failed %v", err) - } - }) - } - -} - -// func TestJSONValidate(t *testing.T) { -// const profileSchema = "../../schema/json/oscal-profile.json" - -// type fields struct { -// SchemaFile string -// } -// type args struct { -// file []string -// } -// tests := []struct { -// name string -// fields fields -// args args -// wantErr bool -// }{ -// { -// name: "successful-validation", -// fields: fields{profileSchema}, -// args: args{[]string{"../../examples/01_identity-profile.json"}}, -// wantErr: false, -// }, -// { -// name: "failed-validation-non-existent-schema-file", -// fields: fields{"./oscal-profile.failed"}, -// args: args{[]string{"../../examples/01_identity-profile.json"}}, -// wantErr: true, -// }, -// { -// name: "failed-validation-non-existent-file", -// fields: fields{profileSchema}, -// args: args{[]string{"./profile.failed"}}, -// wantErr: true, -// }, -// { -// name: "failed-validation-not-oscal-formatted", -// fields: fields{profileSchema}, -// args: args{[]string{"./notoscal.json"}}, -// wantErr: true, -// }, -// } -// for _, tt := range tests { -// t.Run(tt.name, func(t *testing.T) { -// j := jsonValidator{ -// SchemaFile: tt.fields.SchemaFile, -// } -// if err := j.Validate(tt.args.file...); (err != nil) != tt.wantErr { -// t.Errorf("jsonValidator.Validate() error = %v, wantErr %v", err, tt.wantErr) -// } -// }) -// } -// } - -func TestXMLValidate(t *testing.T) { - type fields struct { - SchemaFile string - } - type args struct { - file []string - } - tests := []struct { - name string - fields fields - args args - wantErr bool - }{ - { - name: "successful-validation", - fields: fields{"../test_util/artifacts/oscal-profile-schema.xsd"}, - args: args{[]string{"../test_util/artifacts/NIST_SP-800-53_rev4_HIGH-baseline_profile.xml"}}, - wantErr: false, - }, - { - name: "failed-validation", - fields: fields{"../testdata/oscal-profile.failed"}, - args: args{[]string{"../testdata/fedramp-simple-profile.failed"}}, - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - x := xmlValidator{ - SchemaFile: tt.fields.SchemaFile, - } - if err := x.Validate(tt.args.file...); (err != nil) != tt.wantErr { - t.Errorf("xmlValidator.Validate() error = %v, wantErr %v", err, tt.wantErr) - } - }) - } -} From fdc40ac5eb5bd11e575f58861e27177805870285 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Fri, 17 Jan 2020 14:34:22 +0100 Subject: [PATCH 089/110] Generate Go code from oscal_implementation-common_metaschema.xml metaschema --- metaschema/generate.go | 1 + .../validation_common_root.go | 76 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 types/oscal/validation_common_root/validation_common_root.go diff --git a/metaschema/generate.go b/metaschema/generate.go index 412f22f3..ec26c5db 100644 --- a/metaschema/generate.go +++ b/metaschema/generate.go @@ -34,6 +34,7 @@ func main() { "nominal_catalog": "oscal_control-common_metaschema.xml", "catalog": "oscal_catalog_metaschema.xml", "profile": "oscal_profile_metaschema.xml", + "implementation": "oscal_implementation-common_metaschema.xml", "ssp": "oscal_ssp_metaschema.xml", } diff --git a/types/oscal/validation_common_root/validation_common_root.go b/types/oscal/validation_common_root/validation_common_root.go new file mode 100644 index 00000000..0b84ea72 --- /dev/null +++ b/types/oscal/validation_common_root/validation_common_root.go @@ -0,0 +1,76 @@ +// Code generated by go generate; DO NOT EDIT. +package validation_common_root + +import ( + "github.com/docker/oscalkit/types/oscal/validation_root" +) + +// NOT TO BE USED IN A METASCHEMA +type VALIDATIONCommonRoot struct { + + // A reference to a control identifier. + ControlId string `xml:"control-id,attr,omitempty" json:"controlId,omitempty"` + // A reference to a component by its identifier + ComponentId string `xml:"component-id,attr,omitempty" json:"componentId,omitempty"` + // A category describing the purpose of the component. + ComponentType string `xml:"component-type,attr,omitempty" json:"componentType,omitempty"` + // A reference to a capability by its identifier + CapabilityId string `xml:"capability-id,attr,omitempty" json:"capabilityId,omitempty"` + // A reference to an OSCAL catalog or profile providing the referenced control or subcontrol definition. + Source string `xml:"source,attr,omitempty" json:"source,omitempty"` + + // A description supporting the parent item. + Description *Description `xml:"description,omitempty" json:"description,omitempty"` + // Additional commentary on the parent item. + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // TBD + IncorporatesComponents []IncorporatesComponent `xml:"incorporates-component,omitempty" json:"incorporates-components,omitempty"` + // TBD + IncorporatesCapabilities []IncorporatesCapability `xml:"incorporates-capability,omitempty" json:"incorporates-capabilities,omitempty"` + // Describes which specific statements are addressed by a requirement, by pointing to a specific requirement statement within a control. + OnlyStatements []OnlyStatement `xml:"only-statement,omitempty" json:"only-statements,omitempty"` +} + +// Describes which specific statements are addressed by a requirement, by pointing to a specific requirement statement within a control. +type OnlyStatement struct { + + // A reference to the specific implemented statement. + StatementId string `xml:"statement-id,attr,omitempty" json:"statementId,omitempty"` + + // A description supporting the parent item. + Description *Description `xml:"description,omitempty" json:"description,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Links []Link `xml:"link,omitempty" json:"links,omitempty"` + // Additional commentary on the parent item. + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` +} + +// TBD +type IncorporatesComponent struct { + + // A reference to a component by its identifier + ComponentId string `xml:"component-id,attr,omitempty" json:"componentId,omitempty"` + + // A description supporting the parent item. + Description *Description `xml:"description,omitempty" json:"description,omitempty"` +} + +// TBD +type IncorporatesCapability struct { + + // A reference to a capability by its identifier + CapabilityId string `xml:"capability-id,attr,omitempty" json:"capabilityId,omitempty"` + + // A description supporting the parent item. + Description *Description `xml:"description,omitempty" json:"description,omitempty"` +} + +type Description = validation_root.Description + +type Link = validation_root.Link + +type Prop = validation_root.Prop + +type Remarks = validation_root.Remarks From 3998c70faabfefaf2442737cc97fb61d0c0de237 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 20 Jan 2020 10:24:27 +0100 Subject: [PATCH 090/110] Do not hardcode "validation_common_root" package to be skipped Even though it is not used in SSP and shall not be imported. It may be used by other metaschemas (like component) and thus we should reason about the need of importing it. As a side effect this re-shuffles some of the existing imports. --- metaschema/metaschema.go | 14 ++++++++++++++ metaschema/template.go | 6 ++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index f1b275ac..97d1da22 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -74,6 +74,20 @@ type Metaschema struct { Dependencies map[string]GoType } +func (metaschema *Metaschema) ImportedDependencies() []*Metaschema { + result := make(map[string]*Metaschema) + for _, dep := range metaschema.Dependencies { + m := dep.GetMetaschema() + result[m.GoPackageName()] = m + } + + ret := make([]*Metaschema, 0, len(result)) + for _, v := range result { + ret = append(ret, v) + } + return ret +} + func (metaschema *Metaschema) registerDependency(name string, dependency GoType) { if dependency.GetMetaschema() != metaschema { if metaschema.Dependencies == nil { diff --git a/metaschema/template.go b/metaschema/template.go index 2fede513..19407042 100644 --- a/metaschema/template.go +++ b/metaschema/template.go @@ -52,10 +52,8 @@ func getImports(metaschema Metaschema) string { imports.WriteString("\t\"encoding/xml\"\n") } - for _, im := range metaschema.ImportedMetaschema { - if im.GoPackageName() != "validation_common_root" { - imports.WriteString(fmt.Sprintf("\n\t\"github.com/docker/oscalkit/types/oscal/%s\"\n", im.GoPackageName())) - } + for _, im := range metaschema.ImportedDependencies() { + imports.WriteString(fmt.Sprintf("\n\t\"github.com/docker/oscalkit/types/oscal/%s\"\n", im.GoPackageName())) } imports.WriteString(")") From 1a0e85352e77e65ab83caeedb48497061047ff30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 20 Jan 2020 10:53:37 +0100 Subject: [PATCH 091/110] Make sure that order of auto-generated imports is stable --- metaschema/metaschema.go | 4 ++++ types/oscal/catalog/catalog.go | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 97d1da22..0fd0d7e4 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/iancoleman/strcase" "net/url" + "sort" "strings" ) @@ -85,6 +86,9 @@ func (metaschema *Metaschema) ImportedDependencies() []*Metaschema { for _, v := range result { ret = append(ret, v) } + sort.Slice(ret, func(i, j int) bool { + return strings.Compare(ret[i].GoPackageName(), ret[j].GoPackageName()) > 0 + }) return ret } diff --git a/types/oscal/catalog/catalog.go b/types/oscal/catalog/catalog.go index d6d58f78..5381cf5c 100644 --- a/types/oscal/catalog/catalog.go +++ b/types/oscal/catalog/catalog.go @@ -4,9 +4,9 @@ package catalog import ( "encoding/xml" - "github.com/docker/oscalkit/types/oscal/nominal_catalog" - "github.com/docker/oscalkit/types/oscal/validation_root" + + "github.com/docker/oscalkit/types/oscal/nominal_catalog" ) // A collection of controls. From 134ef80de95fad7fe11e6247c0c3e3a7a3a9ce47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 20 Jan 2020 11:03:52 +0100 Subject: [PATCH 092/110] Generate schema for component files --- metaschema/generate.go | 1 + .../component_definition.go | 151 ++++++++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 types/oscal/component_definition/component_definition.go diff --git a/metaschema/generate.go b/metaschema/generate.go index ec26c5db..d96dc1f2 100644 --- a/metaschema/generate.go +++ b/metaschema/generate.go @@ -36,6 +36,7 @@ func main() { "profile": "oscal_profile_metaschema.xml", "implementation": "oscal_implementation-common_metaschema.xml", "ssp": "oscal_ssp_metaschema.xml", + "component": "oscal_component_metaschema.xml", } for _, metaschemaPath := range metaschemaPaths { diff --git a/types/oscal/component_definition/component_definition.go b/types/oscal/component_definition/component_definition.go new file mode 100644 index 00000000..b408b2f8 --- /dev/null +++ b/types/oscal/component_definition/component_definition.go @@ -0,0 +1,151 @@ +// Code generated by go generate; DO NOT EDIT. +package component_definition + +import ( + "github.com/docker/oscalkit/types/oscal/validation_root" + + "github.com/docker/oscalkit/types/oscal/validation_common_root" +) + +// TBD +type ComponentDefinition struct { + + // Loads a component definition from another resource. + ImportComponentDefinitions []ImportComponentDefinition `xml:"import-component-definition,omitempty" json:"import-component-definitions,omitempty"` + // Provides information about the publication and availability of the containing document. + Metadata *Metadata `xml:"metadata,omitempty" json:"metadata,omitempty"` + // A defined component that can be part of an implemented system. + Components []Component `xml:"component,omitempty" json:"components,omitempty"` + // A grouping of other components and/or capabilities. + Capabilities []Capability `xml:"capability,omitempty" json:"capabilities,omitempty"` + // A collection of citations and resource references. + BackMatter *BackMatter `xml:"back-matter,omitempty" json:"backMatter,omitempty"` +} + +// A defined component that can be part of an implemented system. +type Component struct { + + // A unique identifier for a component. + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` + // The component's short, human-readable name. + Name string `xml:"name,attr,omitempty" json:"name,omitempty"` + // A category describing the purpose of the component. + ComponentType string `xml:"component-type,attr,omitempty" json:"componentType,omitempty"` + + // A longer name for the component. + Title Title `xml:"title,omitempty" json:"title,omitempty"` + // A description supporting the parent item. + Description *Description `xml:"description,omitempty" json:"description,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Links []Link `xml:"link,omitempty" json:"links,omitempty"` + // Additional commentary on the parent item. + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // Defines a role associated with a party or parties that has responsibility for the component. + ResponsibleParties []ResponsibleParty `xml:"responsible-party,omitempty" json:"responsible-parties,omitempty"` + // Defines how the component or capability supports a set of controls. + ControlImplementations []ControlImplementation `xml:"control-implementation,omitempty" json:"control-implementations,omitempty"` +} + +// A grouping of other components and/or capabilities. +type Capability struct { + + // A unique identifier for a capability. + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` + // The capability's human-readable name. + Name string `xml:"name,attr,omitempty" json:"name,omitempty"` + + // A description supporting the parent item. + Description *Description `xml:"description,omitempty" json:"description,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Links []Link `xml:"link,omitempty" json:"links,omitempty"` + // Additional commentary on the parent item. + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // TBD + IncorporatesCapabilities []IncorporatesCapability `xml:"incorporates-capability,omitempty" json:"incorporates-capabilities,omitempty"` + // TBD + IncorporatesComponents []IncorporatesComponent `xml:"incorporates-component,omitempty" json:"incorporates-components,omitempty"` + // Defines how the component or capability supports a set of controls. + ControlImplementations []ControlImplementation `xml:"control-implementation,omitempty" json:"control-implementations,omitempty"` +} + +// Defines how the component or capability supports a set of controls. +type ControlImplementation struct { + + // A description supporting the parent item. + Description *Description `xml:"description,omitempty" json:"description,omitempty"` + // Defines what sets of controls are supported by the component. + CanMeetRequirementSets []CanMeetRequirementSet `xml:"can-meet-requirement-set,omitempty" json:"can-meet-requirement-sets,omitempty"` +} + +// Defines what sets of controls are supported by the component. +type CanMeetRequirementSet struct { + + // A reference to an OSCAL catalog or profile providing the referenced control or subcontrol definition. + Source string `xml:"source,attr,omitempty" json:"source,omitempty"` + + // A description supporting the parent item. + Description *Description `xml:"description,omitempty" json:"description,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Links []Link `xml:"link,omitempty" json:"links,omitempty"` + // Additional commentary on the parent item. + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // TBD + ImplementedRequirements []ImplementedRequirement `xml:"implemented-requirement,omitempty" json:"implemented-requirements,omitempty"` +} + +// TBD +type ImplementedRequirement struct { + + // A reference to a requirement defined on another requirement set that should be included here. + RequirementId string `xml:"requirement-id,attr,omitempty" json:"requirementId,omitempty"` + // Unique identifier of the containing object + Id string `xml:"id,attr,omitempty" json:"id,omitempty"` + // A reference to a control identifier. + ControlId string `xml:"control-id,attr,omitempty" json:"controlId,omitempty"` + + // A description supporting the parent item. + Description *Description `xml:"description,omitempty" json:"description,omitempty"` + // A value with a name, attributed to the containing control, part, or group. + Properties []Prop `xml:"prop,omitempty" json:"properties,omitempty"` + // A reference to a local or remote resource + Links []Link `xml:"link,omitempty" json:"links,omitempty"` + // Additional commentary on the parent item. + Remarks *Remarks `xml:"remarks,omitempty" json:"remarks,omitempty"` + // Describes which specific statements are addressed by a requirement, by pointing to a specific requirement statement within a control. + OnlyStatements []OnlyStatement `xml:"only-statement,omitempty" json:"only-statements,omitempty"` +} + +// Loads a component definition from another resource. +type ImportComponentDefinition struct { + // A link to a resource that defines a set of components and/or capabilities to import into this collection. + Href string `xml:"href,attr,omitempty" json:"href,omitempty"` + Value string `xml:",chardata" json:"value,omitempty"` +} + +type BackMatter = validation_root.BackMatter + +type Description = validation_root.Description + +type IncorporatesCapability = validation_common_root.IncorporatesCapability + +type IncorporatesComponent = validation_common_root.IncorporatesComponent + +type Link = validation_root.Link + +type Metadata = validation_root.Metadata + +type OnlyStatement = validation_common_root.OnlyStatement + +type Prop = validation_root.Prop + +type Remarks = validation_root.Remarks + +type ResponsibleParty = validation_root.ResponsibleParty + +type Title = validation_root.Title From f1e498f2ad708fa91cedb81cde7999ae2731ea75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 20 Jan 2020 12:40:58 +0100 Subject: [PATCH 093/110] Implement `oscal info for oscal:component-definition files --- cli/cmd/info.go | 4 ++++ pkg/oscal/constants/file.go | 1 + types/oscal/oscal.go | 11 +++++++++++ 3 files changed, 16 insertions(+) diff --git a/cli/cmd/info.go b/cli/cmd/info.go index a885be9c..bd4e2d1c 100644 --- a/cli/cmd/info.go +++ b/cli/cmd/info.go @@ -29,6 +29,10 @@ var Info = cli.Command{ fmt.Println("ID:\t", o.SystemSecurityPlan.Id) printMetadata(o.SystemSecurityPlan.Metadata) return nil + case constants.ComponentDocument: + fmt.Println("OSCAL Component (represents information about particular software asset/component)") + printMetadata(o.Component.Metadata) + return nil case constants.ProfileDocument: fmt.Println("OSCAL Profile (represents subset of controls from OSCAL catalog(s))") fmt.Println("ID:\t", o.Profile.Id) diff --git a/pkg/oscal/constants/file.go b/pkg/oscal/constants/file.go index 7b51cb9a..9e1b6866 100644 --- a/pkg/oscal/constants/file.go +++ b/pkg/oscal/constants/file.go @@ -17,4 +17,5 @@ const ( CatalogDocument ProfileDocument SSPDocument + ComponentDocument ) diff --git a/types/oscal/oscal.go b/types/oscal/oscal.go index 3d8672f8..a2e7d8ce 100644 --- a/types/oscal/oscal.go +++ b/types/oscal/oscal.go @@ -10,6 +10,7 @@ import ( "github.com/docker/oscalkit/pkg/oscal/constants" "github.com/docker/oscalkit/types/oscal/catalog" + "github.com/docker/oscalkit/types/oscal/component_definition" "github.com/docker/oscalkit/types/oscal/profile" ssp "github.com/docker/oscalkit/types/oscal/system_security_plan" yaml "gopkg.in/yaml.v2" @@ -19,6 +20,7 @@ const ( catalogRootElement = "catalog" profileRootElement = "profile" sspRootElement = "system-security-plan" + componentElement = "component-definition" ) // OSCAL contains specific OSCAL components @@ -28,6 +30,7 @@ type OSCAL struct { // Declarations *Declarations `json:"declarations,omitempty" yaml:"declarations,omitempty"` Profile *profile.Profile `json:"profile,omitempty" yaml:"profile,omitempty"` *ssp.SystemSecurityPlan + Component *component_definition.ComponentDefinition documentType constants.DocumentType } @@ -38,6 +41,8 @@ func (o *OSCAL) DocumentType() constants.DocumentType { return constants.ProfileDocument } else if o.SystemSecurityPlan != nil { return constants.SSPDocument + } else if o.Component != nil { + return constants.ComponentDocument } else { return constants.UnknownDocument } @@ -153,6 +158,12 @@ func New(r io.Reader) (*OSCAL, error) { return nil, err } return &OSCAL{SystemSecurityPlan: &ssp}, nil + case componentElement: + var component component_definition.ComponentDefinition + if err := d.DecodeElement(&component, &startElement); err != nil { + return nil, err + } + return &OSCAL{Component: &component}, nil } } } From 885f07a9a8d605a79f8804f0857088d9201e5621 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Mon, 20 Jan 2020 12:48:40 +0100 Subject: [PATCH 094/110] Implement oscalkit validate for oscal:component-definition files --- pkg/bundled/oscal.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/pkg/bundled/oscal.go b/pkg/bundled/oscal.go index 892af02f..560b18d7 100644 --- a/pkg/bundled/oscal.go +++ b/pkg/bundled/oscal.go @@ -12,14 +12,16 @@ import ( var schemaPaths = map[constants.DocumentFormat]map[constants.DocumentType]string{ constants.XmlFormat: { - constants.CatalogDocument: "/OSCAL/xml/schema/oscal_catalog_schema.xsd", - constants.ProfileDocument: "/OSCAL/xml/schema/oscal_profile_schema.xsd", - constants.SSPDocument: "/OSCAL/xml/schema/oscal_ssp_schema.xsd", + constants.CatalogDocument: "/OSCAL/xml/schema/oscal_catalog_schema.xsd", + constants.ProfileDocument: "/OSCAL/xml/schema/oscal_profile_schema.xsd", + constants.SSPDocument: "/OSCAL/xml/schema/oscal_ssp_schema.xsd", + constants.ComponentDocument: "/OSCAL/xml/schema/oscal_component_schema.xsd", }, constants.JsonFormat: { - constants.CatalogDocument: "/OSCAL/json/schema/oscal_catalog_schema.json", - constants.ProfileDocument: "/OSCAL/json/schema/oscal_profile_schema.json", - constants.SSPDocument: "/OSCAL/json/schema/oscal_ssp_schema.json", + constants.CatalogDocument: "/OSCAL/json/schema/oscal_catalog_schema.json", + constants.ProfileDocument: "/OSCAL/json/schema/oscal_profile_schema.json", + constants.SSPDocument: "/OSCAL/json/schema/oscal_ssp_schema.json", + constants.ComponentDocument: "/OSCAL/json/schema/oscal_component_schema.json", }, } From dcee3d43d6641c11a272e60b2f3143abb9e996cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Tue, 21 Jan 2020 13:19:39 +0100 Subject: [PATCH 095/110] oscal:system-security-plan is root element --- metaschema/metaschema.go | 2 +- types/oscal/system_security_plan/system_security_plan.go | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/metaschema/metaschema.go b/metaschema/metaschema.go index 0fd0d7e4..ece60951 100644 --- a/metaschema/metaschema.go +++ b/metaschema/metaschema.go @@ -269,7 +269,7 @@ func (da *DefineAssembly) GoName() string { } func (da *DefineAssembly) RepresentsRootElement() bool { - return da.Name == "catalog" || da.Name == "profile" || da.Name == "declarations" + return da.Name == "catalog" || da.Name == "profile" || da.Name == "declarations" || da.Name == "system-security-plan" } func (a *DefineAssembly) GoComment() string { diff --git a/types/oscal/system_security_plan/system_security_plan.go b/types/oscal/system_security_plan/system_security_plan.go index 87622a84..07e413d3 100644 --- a/types/oscal/system_security_plan/system_security_plan.go +++ b/types/oscal/system_security_plan/system_security_plan.go @@ -2,12 +2,14 @@ package system_security_plan import ( + "encoding/xml" + "github.com/docker/oscalkit/types/oscal/validation_root" ) // A system security plan, such as those described in NIST SP 800-18 type SystemSecurityPlan struct { - + XMLName xml.Name `xml:"http://csrc.nist.gov/ns/oscal/1.0 system-security-plan" json:"-"` // Unique identifier of the containing object Id string `xml:"id,attr,omitempty" json:"id,omitempty"` From efa43dfd435a3b2322813e60140c29f5a1231a8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Tue, 21 Jan 2020 10:43:11 +0100 Subject: [PATCH 096/110] Convert Opencontrols to OSCAL This is skeleton for converting opencontrols. It will be completed in following commits. --- cli/cmd/convert/convert.go | 2 +- cli/cmd/convert/opencontrol.go | 91 +++++++++------------------------ go.mod | 5 ++ go.sum | 10 ++++ pkg/oc2oscal/convert.go | 79 ++++++++++++++++++++++++++++ pkg/oc2oscal/masonry/acquire.go | 37 ++++++++++++++ pkg/oscal/constants/formats.go | 6 +++ types/oscal/oscal.go | 19 ++++--- 8 files changed, 171 insertions(+), 78 deletions(-) create mode 100644 pkg/oc2oscal/convert.go create mode 100644 pkg/oc2oscal/masonry/acquire.go create mode 100644 pkg/oscal/constants/formats.go diff --git a/cli/cmd/convert/convert.go b/cli/cmd/convert/convert.go index 787eb460..a9870eb1 100644 --- a/cli/cmd/convert/convert.go +++ b/cli/cmd/convert/convert.go @@ -13,6 +13,6 @@ var Convert = cli.Command{ Subcommands: []cli.Command{ ConvertOSCAL, ConvertHTML, - // ConvertOpenControl, + ConvertOpenControl, }, } diff --git a/cli/cmd/convert/opencontrol.go b/cli/cmd/convert/opencontrol.go index 278bcca4..dddd3e8c 100644 --- a/cli/cmd/convert/opencontrol.go +++ b/cli/cmd/convert/opencontrol.go @@ -1,71 +1,28 @@ package convert -var includeXML bool +import ( + "github.com/docker/oscalkit/pkg/oc2oscal" + "github.com/urfave/cli" +) // ConvertOpenControl ... -// var ConvertOpenControl = cli.Command{ -// Name: "opencontrol", -// Usage: `convert from OpenControl format to OSCAL "implementation" format`, -// Description: `Convert OpenControl-formatted "component" and "opencontrol" YAML into -// OSCAL-formatted "implementation" layer JSON`, -// ArgsUsage: "[opencontrol.yaml-filepath] [opencontrols-dir-path]", -// Flags: []cli.Flag{ -// cli.BoolFlag{ -// Name: "yaml, y", -// Usage: "Generate YAML in addition to JSON", -// Destination: &yaml, -// }, -// cli.BoolFlag{ -// Name: "xml, x", -// Usage: "Generate XML in addition to JSON", -// Destination: &includeXML, -// }, -// }, -// Before: func(c *cli.Context) error { -// if c.NArg() != 2 { -// return cli.NewExitError("Missing opencontrol.yaml file and path to opencontrols/ directory", 1) -// } - -// return nil -// }, -// Action: func(c *cli.Context) error { -// ocOSCAL, err := oscal.NewFromOC(oscal.OpenControlOptions{ -// OpenControlYAMLFilepath: c.Args().First(), -// OpenControlsDir: c.Args()[1], -// }) -// if err != nil { -// return cli.NewExitError(err, 1) -// } - -// if includeXML { -// rawXMLOCOSCAL, err := ocOSCAL.XML(true) -// if err != nil { -// return cli.NewExitError(fmt.Sprintf("Error producing raw XML: %s", err), 1) -// } -// if err := ioutil.WriteFile("opencontrol-oscal.xml", rawXMLOCOSCAL, 0644); err != nil { -// return cli.NewExitError(err, 1) -// } -// } - -// if yaml { -// rawYAMLOCOSCAL, err := ocOSCAL.YAML() -// if err != nil { -// return cli.NewExitError(err, 1) -// } -// if err := ioutil.WriteFile("opencontrol-oscal.yaml", rawYAMLOCOSCAL, 0644); err != nil { -// return cli.NewExitError(err, 1) -// } -// } - -// rawOCOSCAL, err := ocOSCAL.JSON(true) -// if err != nil { -// return cli.NewExitError(err, 1) -// } - -// if err := ioutil.WriteFile("opencontrol-oscal.json", rawOCOSCAL, 0644); err != nil { -// return cli.NewExitError(err, 1) -// } - -// return nil -// }, -// } +var ConvertOpenControl = cli.Command{ + Name: "opencontrol", + Usage: `convert from OpenControl format to OSCAL "implementation" format`, + Description: `Convert OpenControl masonry repository into OSCAL directory`, + ArgsUsage: "[masonry-repository] [output-directory]", + Before: func(c *cli.Context) error { + if c.NArg() != 2 { + return cli.NewExitError("Missing masonry repository or output directory", 1) + } + return nil + }, + Action: func(c *cli.Context) error { + err := oc2oscal.Convert(c.Args()[0], c.Args()[1]) + if err != nil { + return cli.NewExitError(err, 1) + } + + return nil + }, +} diff --git a/go.mod b/go.mod index 5c78effa..b600663a 100644 --- a/go.mod +++ b/go.mod @@ -1,11 +1,15 @@ module github.com/docker/oscalkit require ( + github.com/Masterminds/vcs v1.13.1 // indirect + github.com/blang/semver v3.5.1+incompatible // indirect github.com/fatih/color v1.7.0 + github.com/fatih/set v0.2.1 // indirect github.com/iancoleman/strcase v0.0.0-20180726023541-3605ed457bf7 github.com/markbates/pkger v0.14.0 github.com/mattn/go-colorable v0.0.9 // indirect github.com/mattn/go-isatty v0.0.4 // indirect + github.com/opencontrol/compliance-masonry v1.1.6 github.com/santhosh-tekuri/jsonschema v0.0.0-20181206154329-5d49c9dfc783 github.com/satori/go.uuid v1.2.0 github.com/sirupsen/logrus v1.3.0 @@ -14,6 +18,7 @@ require ( golang.org/x/sys v0.0.0-20190109145017-48ac38b7c8cb // indirect gopkg.in/square/go-jose.v2 v2.2.2 gopkg.in/yaml.v2 v2.2.7 + vbom.ml/util v0.0.0-20180919145318-efcd4e0f9787 // indirect ) go 1.13 diff --git a/go.sum b/go.sum index e455ce9d..10e7cdb4 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,14 @@ +github.com/Masterminds/vcs v1.13.1 h1:NL3G1X7/7xduQtA2sJLpVpfHTNBALVNSjob6KEjPXNQ= +github.com/Masterminds/vcs v1.13.1/go.mod h1:N09YCmOQr6RLxC6UNHzuVwAdodYbbnycGHSmwVJjcKA= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/set v0.2.1 h1:nn2CaJyknWE/6txyUDGwysr3G5QC6xWB/PtVjPBbeaA= +github.com/fatih/set v0.2.1/go.mod h1:+RKtMCH+favT2+3YecHGxcc0b4KyVWA1QWWJUs4E0CI= github.com/gobuffalo/here v0.6.0 h1:hYrd0a6gDmWxBM4TnrGw8mQg24iSVoIkHEk7FodQcBI= github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= github.com/iancoleman/strcase v0.0.0-20180726023541-3605ed457bf7 h1:ux/56T2xqZO/3cP1I2F86qpeoYPCOzk+KF/UH/Ar+lk= @@ -20,6 +26,8 @@ github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRU github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/opencontrol/compliance-masonry v1.1.6 h1:bEAyLa67V7ShEiQcAtMwIofbiWAsxouGhuy5ZVC2mKs= +github.com/opencontrol/compliance-masonry v1.1.6/go.mod h1:5LcS+y04KHfal640jJS1smA7vNf+jsD2tRqtMX1w1Cs= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/santhosh-tekuri/jsonschema v0.0.0-20181206154329-5d49c9dfc783 h1:OR+Kamj42IgYXAJDh+6Dthdf0DKzqJvtvswnnGENJDg= @@ -50,3 +58,5 @@ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.7 h1:VUgggvou5XRW9mHwD/yXxIYSMtY0zoKQf/v226p2nyo= gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +vbom.ml/util v0.0.0-20180919145318-efcd4e0f9787 h1:O69FD9pJA4WUZlEwYatBEEkRWKQ5cKodWpdKTrCS/iQ= +vbom.ml/util v0.0.0-20180919145318-efcd4e0f9787/go.mod h1:so/NYdZXCz+E3ZpW0uAoCj6uzU2+8OWDFv/HxUSs7kI= diff --git a/pkg/oc2oscal/convert.go b/pkg/oc2oscal/convert.go new file mode 100644 index 00000000..76ff1719 --- /dev/null +++ b/pkg/oc2oscal/convert.go @@ -0,0 +1,79 @@ +package oc2oscal + +import ( + "fmt" + "os" + "time" + + "github.com/docker/oscalkit/pkg/oc2oscal/masonry" + "github.com/docker/oscalkit/pkg/oscal/constants" + "github.com/docker/oscalkit/types/oscal" + ssp "github.com/docker/oscalkit/types/oscal/system_security_plan" + "github.com/docker/oscalkit/types/oscal/validation_root" + "github.com/opencontrol/compliance-masonry/pkg/lib/common" +) + +func Convert(repoUri, outputDirectory string) error { + workspace, err := masonry.Open(repoUri) + if err != nil { + return err + } + + _, err = os.Stat(outputDirectory) + if os.IsNotExist(err) { + err = os.MkdirAll(outputDirectory, 0755) + } + if err != nil { + return err + } + + var metadata ssp.Metadata + metadata.Title = ssp.Title("FedRAMP System Security Plan (SSP)") + metadata.LastModified = validation_root.LastModified(time.Now().Format(constants.FormatDatetimeTz)) + metadata.Version = validation_root.Version("0.0.1") + metadata.OscalVersion = validation_root.OscalVersion(constants.LatestOscalVersion) + + for _, component := range workspace.GetAllComponents() { + err = convertComponent(component, metadata, outputDirectory) + if err != nil { + return err + } + } + return nil +} + +func convertComponent(component common.Component, metadata ssp.Metadata, outputDirectory string) error { + var plan ssp.SystemSecurityPlan + plan.Id = "TODO" + plan.Metadata = &metadata + plan.ImportProfile = &ssp.ImportProfile{ + Href: "https://raw.githubusercontent.com/usnistgov/OSCAL/master/content/fedramp.gov/xml/FedRAMP_MODERATE-baseline_profile.xml", + } + plan.SystemCharacteristics = convertSystemCharacteristics(component) + return writeSSP(plan, outputDirectory+"/"+component.GetKey()+".xml") +} + +func convertSystemCharacteristics(component common.Component) *ssp.SystemCharacteristics { + var syschar ssp.SystemCharacteristics + syschar.SystemIds = []ssp.SystemId{ + ssp.SystemId{ + IdentifierType: "https://fedramp.gov", + Value: "F0kk0000000", + }, + } + syschar.SystemName = ssp.SystemName(component.GetName()) + syschar.SystemNameShort = ssp.SystemNameShort(component.GetKey()) + + return &syschar +} + +func writeSSP(plan ssp.SystemSecurityPlan, outputFile string) error { + destFile, err := os.Create(outputFile) + if err != nil { + return fmt.Errorf("Error opening output file %s: %s", outputFile, err) + } + defer destFile.Close() + + output := oscal.OSCAL{SystemSecurityPlan: &plan} + return output.XML(destFile, true) +} diff --git a/pkg/oc2oscal/masonry/acquire.go b/pkg/oc2oscal/masonry/acquire.go new file mode 100644 index 00000000..3d18fde1 --- /dev/null +++ b/pkg/oc2oscal/masonry/acquire.go @@ -0,0 +1,37 @@ +package masonry + +import ( + "fmt" + "io/ioutil" + "os" + + "github.com/opencontrol/compliance-masonry/pkg/cli/get/resources" + "github.com/opencontrol/compliance-masonry/pkg/lib" + "github.com/opencontrol/compliance-masonry/pkg/lib/common" + "github.com/opencontrol/compliance-masonry/pkg/lib/opencontrol" + "github.com/opencontrol/compliance-masonry/pkg/lib/opencontrol/versions/1.0.0" +) + +func Open(uri string) (common.Workspace, error) { + tempDir, err := ioutil.TempDir("/tmp", "oscal-masonry") + if err != nil { + return nil, err + } + defer os.RemoveAll(tempDir) + + repo := make([]common.RemoteSource, 1) + repo[0] = schema.VCSEntry{ + URL: uri, + Revision: "master", + Path: ""} + getter := resources.NewVCSAndLocalGetter(opencontrol.YAMLParser{}) + err = getter.GetRemoteResources(tempDir, "opencontrols", repo) + if err != nil { + return nil, err + } + workspace, errors := lib.LoadData(tempDir, tempDir+"/certifications/fedramp-high.yaml") + if errors != nil { + return nil, fmt.Errorf("%v", errors) + } + return workspace, nil +} diff --git a/pkg/oscal/constants/formats.go b/pkg/oscal/constants/formats.go new file mode 100644 index 00000000..29f1b474 --- /dev/null +++ b/pkg/oscal/constants/formats.go @@ -0,0 +1,6 @@ +package constants + +const ( + // dateTime-with-timezone + FormatDatetimeTz = "2006-01-02T15:04:05.00-07:00" +) diff --git a/types/oscal/oscal.go b/types/oscal/oscal.go index a2e7d8ce..dcad401a 100644 --- a/types/oscal/oscal.go +++ b/types/oscal/oscal.go @@ -28,10 +28,10 @@ type OSCAL struct { XMLName xml.Name `json:"-" yaml:"-"` Catalog *catalog.Catalog `json:"catalog,omitempty" yaml:"catalog,omitempty"` // Declarations *Declarations `json:"declarations,omitempty" yaml:"declarations,omitempty"` - Profile *profile.Profile `json:"profile,omitempty" yaml:"profile,omitempty"` - *ssp.SystemSecurityPlan - Component *component_definition.ComponentDefinition - documentType constants.DocumentType + Profile *profile.Profile `json:"profile,omitempty" yaml:"profile,omitempty"` + *ssp.SystemSecurityPlan `xml:"system-security-plan"` + Component *component_definition.ComponentDefinition + documentType constants.DocumentType } func (o *OSCAL) DocumentType() constants.DocumentType { @@ -60,17 +60,16 @@ func (o *OSCAL) MarshalXML(e *xml.Encoder, start xml.StartElement) error { if err := e.Encode(o.Profile); err != nil { return err } + } else if o.SystemSecurityPlan != nil { + o.XMLName = o.SystemSecurityPlan.XMLName + if err := e.Encode(o.SystemSecurityPlan); err != nil { + return err + } } return nil } -// dockerOptions ... -// type dockerOptions struct { -// dockerYAMLFilepath string -// dockersDir string -// } - // NewFromOC initializes an OSCAL type from raw docker data // func NewFromOC(options dockerOptions) (*OSCAL, error) { // ocFile, err := os.Open(options.dockerYAMLFilepath) From 82a5a368d29adde33c520978f55437fa8cdd067d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Fri, 24 Jan 2020 10:45:21 +0100 Subject: [PATCH 097/110] Marshall Markup correctly --- types/oscal/validation_root/markup.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/oscal/validation_root/markup.go b/types/oscal/validation_root/markup.go index e946acf2..9645b399 100644 --- a/types/oscal/validation_root/markup.go +++ b/types/oscal/validation_root/markup.go @@ -2,5 +2,5 @@ package validation_root // Markup ... type Markup struct { - Raw string + Raw string `xml:",innerxml" json:"raw,omitempty" yaml:"raw,omitempty"` } From 088a9630155656d81c06c63cc0b32f15a3e803dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Fri, 24 Jan 2020 12:25:52 +0100 Subject: [PATCH 098/110] More metadata for the oscal:ssp generated out of opencontrol This completes the required metadata in oscal:ssp. Next step is to actually convert each control one by one. --- pkg/oc2oscal/convert.go | 43 +++++++++++++++++++++++++++++++-- pkg/oscal/constants/versions.go | 5 ++++ 2 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 pkg/oscal/constants/versions.go diff --git a/pkg/oc2oscal/convert.go b/pkg/oc2oscal/convert.go index 76ff1719..c5d4cf9f 100644 --- a/pkg/oc2oscal/convert.go +++ b/pkg/oc2oscal/convert.go @@ -58,15 +58,54 @@ func convertSystemCharacteristics(component common.Component) *ssp.SystemCharact syschar.SystemIds = []ssp.SystemId{ ssp.SystemId{ IdentifierType: "https://fedramp.gov", - Value: "F0kk0000000", + Value: "F00000000", }, } syschar.SystemName = ssp.SystemName(component.GetName()) syschar.SystemNameShort = ssp.SystemNameShort(component.GetKey()) - + syschar.Description = &ssp.Description{ + Raw: "

Automatically generated OSCAL SSP from OpenControl guidance for " + component.GetName() + "

", + } + syschar.SecuritySensitivityLevel = ssp.SecuritySensitivityLevel("low") + syschar.SystemInformation = staticSystemInformation() + syschar.SecurityImpactLevel = &ssp.SecurityImpactLevel{ + SecurityObjectiveConfidentiality: ssp.SecurityObjectiveConfidentiality("fips-199-moderate"), + SecurityObjectiveIntegrity: ssp.SecurityObjectiveIntegrity("fips-199-moderate"), + SecurityObjectiveAvailability: ssp.SecurityObjectiveAvailability("fips-199-moderate"), + } + syschar.Status = &ssp.Status{ + State: "operational", + } + syschar.AuthorizationBoundary = &ssp.AuthorizationBoundary{ + Description: &ssp.Description{ + Raw: "

A holistic, top-level explanation of the FedRAMP authorization boundary.

", + }, + } return &syschar } +func staticSystemInformation() *ssp.SystemInformation { + var sysinf ssp.SystemInformation + sysinf.InformationTypes = []ssp.InformationType{ + ssp.InformationType{ + Name: "Information Type Name", + Description: &ssp.Description{ + Raw: "

This item is useless nevertheless required.

", + }, + ConfidentialityImpact: &ssp.ConfidentialityImpact{ + Base: "fips-199-moderate", + }, + IntegrityImpact: &ssp.IntegrityImpact{ + Base: "fips-199-moderate", + }, + AvailabilityImpact: &ssp.AvailabilityImpact{ + Base: "fips-199-moderate", + }, + }, + } + return &sysinf +} + func writeSSP(plan ssp.SystemSecurityPlan, outputFile string) error { destFile, err := os.Create(outputFile) if err != nil { diff --git a/pkg/oscal/constants/versions.go b/pkg/oscal/constants/versions.go new file mode 100644 index 00000000..b58c428c --- /dev/null +++ b/pkg/oscal/constants/versions.go @@ -0,0 +1,5 @@ +package constants + +const ( + LatestOscalVersion = "1.0.0-milestone2" +) From 4b614d52e32a7a0c5afa5039182e4be047cc3b1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Sat, 25 Jan 2020 13:09:36 +0100 Subject: [PATCH 099/110] Spill out proper elements for each open control on the input --- pkg/oc2oscal/convert.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/pkg/oc2oscal/convert.go b/pkg/oc2oscal/convert.go index c5d4cf9f..a6f751cf 100644 --- a/pkg/oc2oscal/convert.go +++ b/pkg/oc2oscal/convert.go @@ -3,6 +3,8 @@ package oc2oscal import ( "fmt" "os" + "regexp" + "strings" "time" "github.com/docker/oscalkit/pkg/oc2oscal/masonry" @@ -50,9 +52,36 @@ func convertComponent(component common.Component, metadata ssp.Metadata, outputD Href: "https://raw.githubusercontent.com/usnistgov/OSCAL/master/content/fedramp.gov/xml/FedRAMP_MODERATE-baseline_profile.xml", } plan.SystemCharacteristics = convertSystemCharacteristics(component) + plan.ControlImplementation = convertControlImplementation(component) return writeSSP(plan, outputDirectory+"/"+component.GetKey()+".xml") } +func convertControlImplementation(component common.Component) *ssp.ControlImplementation { + var ci ssp.ControlImplementation + ci.Description = &ssp.Description{ + Raw: "

FedRAMP SSP Template Section 13

", + } + ci.ImplementedRequirements = make([]ssp.ImplementedRequirement, 0) + for _, sat := range component.GetAllSatisfies() { + ci.ImplementedRequirements = append(ci.ImplementedRequirements, ssp.ImplementedRequirement{ + ControlId: convertControlId(sat.GetControlKey()), + }) + } + return &ci +} + +func convertControlId(controlKey string) string { + lower := strings.ToLower(controlKey) + re := regexp.MustCompile("^([a-z][a-z])-([0-9]+)(\\s+\\(([0-9]+)\\))?$") + match := re.FindStringSubmatch(lower) + result := fmt.Sprintf("%s-%s", match[1], match[2]) + if match[4] != "" { + result = fmt.Sprintf("%s.%s", result, match[4]) + } + return result + +} + func convertSystemCharacteristics(component common.Component) *ssp.SystemCharacteristics { var syschar ssp.SystemCharacteristics syschar.SystemIds = []ssp.SystemId{ From 1283ae88e116161019c4c5b3a3cab740dd113c0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Sat, 25 Jan 2020 14:06:26 +0100 Subject: [PATCH 100/110] Add Fedramp implementation status to the SSPs generated --- pkg/oc2oscal/convert.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/pkg/oc2oscal/convert.go b/pkg/oc2oscal/convert.go index a6f751cf..8d037224 100644 --- a/pkg/oc2oscal/convert.go +++ b/pkg/oc2oscal/convert.go @@ -63,12 +63,29 @@ func convertControlImplementation(component common.Component) *ssp.ControlImplem } ci.ImplementedRequirements = make([]ssp.ImplementedRequirement, 0) for _, sat := range component.GetAllSatisfies() { + id := convertControlId(sat.GetControlKey()) + ci.ImplementedRequirements = append(ci.ImplementedRequirements, ssp.ImplementedRequirement{ - ControlId: convertControlId(sat.GetControlKey()), + ControlId: id, + Annotations: []ssp.Annotation{ + fedrampImplementationStatus(sat.GetImplementationStatus()), + }, }) } return &ci } +func fedrampImplementationStatus(status string) ssp.Annotation { + // Based on "Guide to OSCAL-based FedRAMP System Security Plans" (Version 1.0, November 27, 2019) + // 5.3. Implementation Status (page 53) + if status == "not applicable" { + status = "not-applicable" + } + return ssp.Annotation{ + Name: "implementation-status", + Ns: "https://fedramp.gov/ns/oscal", + Value: status, + } +} func convertControlId(controlKey string) string { lower := strings.ToLower(controlKey) From 5ea6957846da6d2eda596943b7e03c565d474292 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Sat, 25 Jan 2020 14:39:29 +0100 Subject: [PATCH 101/110] Notify user of which filename is actually malformed This is especially useful when processing multiple files at once by `oscalkit validate`. --- cli/cmd/validate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/cmd/validate.go b/cli/cmd/validate.go index a9c7e600..c5a9a452 100644 --- a/cli/cmd/validate.go +++ b/cli/cmd/validate.go @@ -24,7 +24,7 @@ var Validate = cli.Command{ for _, filePath := range c.Args() { os, err := oscal_source.Open(filePath) if err != nil { - return cli.NewExitError(fmt.Sprintf("Could not open oscal file: %v", err), 1) + return cli.NewExitError(fmt.Sprintf("Could not open oscal file %s: %v", filePath, err), 1) } defer os.Close() From 9f15df593def4c4470e70b020fba9e8f5f3ec6cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Sat, 25 Jan 2020 15:18:38 +0100 Subject: [PATCH 102/110] Refactor: Extract method: MarkupFromPlain --- pkg/oc2oscal/convert.go | 18 +++++------------- types/oscal/validation_root/markup.go | 6 ++++++ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/pkg/oc2oscal/convert.go b/pkg/oc2oscal/convert.go index 8d037224..8cc944c2 100644 --- a/pkg/oc2oscal/convert.go +++ b/pkg/oc2oscal/convert.go @@ -58,9 +58,7 @@ func convertComponent(component common.Component, metadata ssp.Metadata, outputD func convertControlImplementation(component common.Component) *ssp.ControlImplementation { var ci ssp.ControlImplementation - ci.Description = &ssp.Description{ - Raw: "

FedRAMP SSP Template Section 13

", - } + ci.Description = validation_root.MarkupFromPlain("FedRAMP SSP Template Section 13") ci.ImplementedRequirements = make([]ssp.ImplementedRequirement, 0) for _, sat := range component.GetAllSatisfies() { id := convertControlId(sat.GetControlKey()) @@ -109,9 +107,7 @@ func convertSystemCharacteristics(component common.Component) *ssp.SystemCharact } syschar.SystemName = ssp.SystemName(component.GetName()) syschar.SystemNameShort = ssp.SystemNameShort(component.GetKey()) - syschar.Description = &ssp.Description{ - Raw: "

Automatically generated OSCAL SSP from OpenControl guidance for " + component.GetName() + "

", - } + syschar.Description = validation_root.MarkupFromPlain("Automatically generated OSCAL SSP from OpenControl guidance for " + component.GetName()) syschar.SecuritySensitivityLevel = ssp.SecuritySensitivityLevel("low") syschar.SystemInformation = staticSystemInformation() syschar.SecurityImpactLevel = &ssp.SecurityImpactLevel{ @@ -123,9 +119,7 @@ func convertSystemCharacteristics(component common.Component) *ssp.SystemCharact State: "operational", } syschar.AuthorizationBoundary = &ssp.AuthorizationBoundary{ - Description: &ssp.Description{ - Raw: "

A holistic, top-level explanation of the FedRAMP authorization boundary.

", - }, + Description: validation_root.MarkupFromPlain("A holistic, top-level explanation of the FedRAMP authorization boundary."), } return &syschar } @@ -134,10 +128,8 @@ func staticSystemInformation() *ssp.SystemInformation { var sysinf ssp.SystemInformation sysinf.InformationTypes = []ssp.InformationType{ ssp.InformationType{ - Name: "Information Type Name", - Description: &ssp.Description{ - Raw: "

This item is useless nevertheless required.

", - }, + Name: "Information Type Name", + Description: validation_root.MarkupFromPlain("This item is useless nevertheless required."), ConfidentialityImpact: &ssp.ConfidentialityImpact{ Base: "fips-199-moderate", }, diff --git a/types/oscal/validation_root/markup.go b/types/oscal/validation_root/markup.go index 9645b399..a39af609 100644 --- a/types/oscal/validation_root/markup.go +++ b/types/oscal/validation_root/markup.go @@ -4,3 +4,9 @@ package validation_root type Markup struct { Raw string `xml:",innerxml" json:"raw,omitempty" yaml:"raw,omitempty"` } + +func MarkupFromPlain(plain string) *Markup { + return &Markup{ + Raw: "

" + plain + "

", + } +} From e12fdd8c99db4717e4e32fad2370c466da195ebb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Sat, 25 Jan 2020 15:35:26 +0100 Subject: [PATCH 103/110] XML encode any <>& characters that may be found in the open control data --- types/oscal/validation_root/markup.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/types/oscal/validation_root/markup.go b/types/oscal/validation_root/markup.go index a39af609..20600ef7 100644 --- a/types/oscal/validation_root/markup.go +++ b/types/oscal/validation_root/markup.go @@ -1,11 +1,18 @@ package validation_root +import ( + "strings" +) + // Markup ... type Markup struct { Raw string `xml:",innerxml" json:"raw,omitempty" yaml:"raw,omitempty"` } func MarkupFromPlain(plain string) *Markup { + plain = strings.ReplaceAll(plain, "&", "&") + plain = strings.ReplaceAll(plain, "<", "<") + plain = strings.ReplaceAll(plain, "<", ">") return &Markup{ Raw: "

" + plain + "

", } From 7cb53d04da3cc9303979505c50be03b32d5b8cee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Sun, 26 Jan 2020 10:43:45 +0100 Subject: [PATCH 104/110] Convert control responses from opencontrol to oscal --- pkg/oc2oscal/convert.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/pkg/oc2oscal/convert.go b/pkg/oc2oscal/convert.go index 8cc944c2..35eff6e9 100644 --- a/pkg/oc2oscal/convert.go +++ b/pkg/oc2oscal/convert.go @@ -68,10 +68,32 @@ func convertControlImplementation(component common.Component) *ssp.ControlImplem Annotations: []ssp.Annotation{ fedrampImplementationStatus(sat.GetImplementationStatus()), }, + Statements: convertStatements(id, sat.GetNarratives()), }) } return &ci } + +func convertStatements(id string, narratives []common.Section) []ssp.Statement { + var res []ssp.Statement + if len(narratives) == 1 { + return append(res, ssp.Statement{ + StatementId: fmt.Sprintf("%s_stmt", id), + Description: validation_root.MarkupFromPlain(narratives[0].GetText()), + }) + + } + + for _, narrative := range narratives { + res = append(res, ssp.Statement{ + StatementId: fmt.Sprintf("%s_stmt.%s", id, narrative.GetKey()), + Description: validation_root.MarkupFromPlain(narrative.GetText()), + }) + + } + return res +} + func fedrampImplementationStatus(status string) ssp.Annotation { // Based on "Guide to OSCAL-based FedRAMP System Security Plans" (Version 1.0, November 27, 2019) // 5.3. Implementation Status (page 53) From bd69de904f154a94ed45d34bd0c19b2c064416b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Tue, 28 Jan 2020 12:10:17 +0100 Subject: [PATCH 105/110] Update README.md Co-Authored-By: anweiss <2326106+anweiss@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index acf738e6..2bfbb36d 100644 --- a/README.md +++ b/README.md @@ -159,7 +159,7 @@ Convert OpenControl project to OSCAL-formatted JSON: ### Validate against XML and JSON schemas -The tool supports validation of OSCAL-formatted XML and JSON files against the corresponding OSCAL XML schemas (.xsd) and JSON schemas. Schema is included in the tool and found automatically based on the type of OSCAL file. XML schema validation requires the `xmllint` tool on the local machine (included with macOS and Linux. Windows installation instructions [here](https://stackoverflow.com/a/21227833)) +The tool supports validation of OSCAL-formatted XML and JSON files against the corresponding OSCAL XML schemas (.xsd) and JSON schemas. Schemas are packaged with the tool and found automatically based on the type of OSCAL file. XML schema validation requires the `xmllint` tool on the local machine (included with macOS and Linux. Windows installation instructions [here](https://stackoverflow.com/a/21227833)) ``` NAME: From f7163f01636b4009e025e8a13e6287f4b7dbee1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Tue, 4 Feb 2020 14:55:28 +0100 Subject: [PATCH 106/110] Force use golang 1.13 container instead of golang 1.11 container As @anweiss suggested. Thanks! --- Dockerfile | 2 +- Dockerfile.build | 4 ++-- Dockerfile.generate | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1f667ecd..92c92780 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.11-alpine AS builder +FROM golang:1.13-alpine AS builder WORKDIR /go/src/github.com/docker/oscalkit ARG VERSION ARG BUILD diff --git a/Dockerfile.build b/Dockerfile.build index 6f30ac9a..3e5caaa8 100644 --- a/Dockerfile.build +++ b/Dockerfile.build @@ -1,10 +1,10 @@ -FROM golang:1.11 AS race-detector +FROM golang:1.13 AS race-detector WORKDIR /go/src/github.com/docker/oscalkit COPY . . WORKDIR /go/src/github.com/docker/oscalkit/cli RUN go build -race -FROM golang:1.11 +FROM golang:1.13 ARG GOOS ARG GOARCH ARG VERSION diff --git a/Dockerfile.generate b/Dockerfile.generate index ee3458c2..35b41653 100644 --- a/Dockerfile.generate +++ b/Dockerfile.generate @@ -1,3 +1,3 @@ -FROM golang:1.11-alpine +FROM golang:1.13-alpine RUN apk add --no-cache git WORKDIR /go/src/github.com/docker/oscalkit/metaschema From 5c1cade72ab0ddcfe591542a1815b149af39b814 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Tue, 4 Feb 2020 16:59:54 +0100 Subject: [PATCH 107/110] Remove previous version of opencontrol2oscal generator --- types/oscal/opencontrol.go | 165 ------------------------------------- types/oscal/oscal.go | 52 ------------ 2 files changed, 217 deletions(-) delete mode 100644 types/oscal/opencontrol.go diff --git a/types/oscal/opencontrol.go b/types/oscal/opencontrol.go deleted file mode 100644 index ca930e29..00000000 --- a/types/oscal/opencontrol.go +++ /dev/null @@ -1,165 +0,0 @@ -package oscal - -// func convertOC(oc opencontrol.OpenControl, ocComponents []opencontrol.Component) (*OSCAL, error) { -// ocOSCAL := Implementation{} -// ocOSCAL.Title = oc.Name - -// ocOSCAL.Paragraphs = append(ocOSCAL.Paragraphs, P{ -// // OptionalClass: "description", -// Raw: oc.Metadata.Description, -// }) - -// for _, maintainer := range oc.Metadata.Maintainers { -// ocOSCAL.Props = append(ocOSCAL.Props, Prop{ -// OptionalClass: "maintainer", -// Value: maintainer, -// }) -// } - -// implementationProfiles := &Profiles{} - -// for _, cert := range oc.Certifications { -// implementationProfiles.Links = append(implementationProfiles.Links, Link{ -// Rel: "profile", -// Href: cert, -// }) -// } - -// if oc.Dependencies != nil { -// for _, cert := range oc.Dependencies.Certifications { -// implementationProfiles.Links = append(implementationProfiles.Links, Link{ -// Rel: "profile", -// Href: "../../FedRAMP/FedRAMP-MODERATE-crude", -// Value: parseOCCert(cert.URL), -// }) -// } -// } - -// ocOSCAL.Profiles = implementationProfiles -// ocOSCAL.Params = Params{} -// ocOSCAL.Components = Components{} - -// for _, ocComponent := range ocComponents { -// item := Item{} - -// item.Title = &Raw{Value: ocComponent.Name} -// item.Prose = &Prose{} - -// // Outputs "null" JSON value since this is self-closing XML tag -// item.Prose.P = append(item.Prose.P, P{ -// // OptionalClass: "description", -// }) - -// if ocComponent.ResponsibleRole != "" { -// item.Prose.P = append(item.Prose.P, P{ -// // OptionalClass: "responsibleRoles", -// Raw: ocComponent.ResponsibleRole, -// }) -// } - -// for _, ocSatisfy := range ocComponent.Satisfies { -// var part Part - -// part.OptionalClass = "satisfies" - -// key := strings.ToLower(ocSatisfy.ControlKey) -// r := strings.NewReplacer( -// " ", "", -// "-", ".", -// "(", ".", -// ")", "", -// ) -// key = fmt.Sprintf("#%s", r.Replace(key)) -// part.Links = append(part.Links, Link{ -// Rel: "satisfies", -// Href: key, -// // TODO: Value from linked "catalog" -// }) - -// part.Prose = &Prose{} -// for _, ocNarrative := range ocSatisfy.Narrative { -// raw := ocNarrative.Text -// if strings.HasSuffix(raw, "\n") { -// raw = strings.TrimSuffix(raw, "\n") -// } -// part.Prose.P = append(part.Prose.P, P{ -// // OptionalClass: "narrative", -// Raw: raw, -// }) -// } - -// for _, ocOrigin := range ocSatisfy.ControlOrigins { -// part.Props = append(part.Props, Prop{ -// OptionalClass: "origin", -// Value: ocOrigin, -// }) -// } - -// if ocSatisfy.ControlOrigin != "" { -// part.Props = append(part.Props, Prop{ -// OptionalClass: "origin", -// Value: ocSatisfy.ControlOrigin, -// }) -// } - -// for _, ocParameter := range ocSatisfy.Parameters { -// ocOSCAL.Params.SetParams = append(ocOSCAL.Params.SetParams, ImplementationParam{ -// ID: ocParameter.Key, -// Desc: Desc{ -// Raw: ocParameter.Text, -// }, -// }) -// } - -// for _, ocStatus := range ocSatisfy.ImplementationStatuses { -// part.Props = append(part.Props, Prop{ -// OptionalClass: "status", -// Value: ocStatus, -// }) -// } - -// if ocSatisfy.ImplementationStatus != "" { -// part.Props = append(part.Props, Prop{ -// OptionalClass: "status", -// Value: ocSatisfy.ImplementationStatus, -// }) -// } - -// item.Parts = append(item.Parts, part) -// } - -// for _, ocReference := range ocComponent.References { -// part := Part{ -// OptionalClass: "reference", -// Title: &Raw{Value: ocReference.Name}, -// } - -// part.Prose = &Prose{} -// part.Prose.P = append(part.Prose.P, P{ -// // OptionalClass: "description", -// }) - -// part.Links = append(part.Links, Link{ -// Value: ocReference.Path, -// }) - -// item.Parts = append(item.Parts, part) -// } - -// ocOSCAL.Components.Items = append(ocOSCAL.Components.Items, item) -// } - -// ocOSCAL.Profiles = implementationProfiles - -// return &OSCAL{Implementation: &ocOSCAL}, nil -// } - -// // Temporary mechanism for converting https://github.com/opencontrol/FedRAMP-Certifications -// // to path to OSCAL JSON -// func parseOCCert(url string) string { -// if path.Base(url) == "FedRAMP-Certifications" { -// return "FedRAMP MODERATE Baseline PROFILE" -// } - -// return "" -// } diff --git a/types/oscal/oscal.go b/types/oscal/oscal.go index dcad401a..e4474ea0 100644 --- a/types/oscal/oscal.go +++ b/types/oscal/oscal.go @@ -70,58 +70,6 @@ func (o *OSCAL) MarshalXML(e *xml.Encoder, start xml.StartElement) error { return nil } -// NewFromOC initializes an OSCAL type from raw docker data -// func NewFromOC(options dockerOptions) (*OSCAL, error) { -// ocFile, err := os.Open(options.dockerYAMLFilepath) -// if err != nil { -// return nil, err -// } -// defer ocFile.Close() - -// rawOC, err := ioutil.ReadAll(ocFile) -// if err != nil { -// return nil, err -// } - -// var oc docker.docker -// if err := yaml.Unmarshal(rawOC, &oc); err != nil { -// return nil, err -// } - -// ocComponentFileList := []string{} -// filepath.Walk(filepath.Join(options.dockersDir, "components/"), func(path string, f os.FileInfo, err error) error { -// if !f.IsDir() && (filepath.Ext(path) == ".yaml" || filepath.Ext(path) == ".yml") { -// absPath, err := filepath.Abs(path) -// if err != nil { -// return err -// } -// ocComponentFileList = append(ocComponentFileList, absPath) -// } - -// return nil -// }) - -// ocComponents := []docker.Component{} -// for _, ocComponentFilepath := range ocComponentFileList { -// ocComponentFile, err := os.Open(ocComponentFilepath) -// if err != nil { -// return nil, err -// } -// defer ocComponentFile.Close() - -// rawOCComponentFile, err := ioutil.ReadAll(ocComponentFile) - -// var ocComponent docker.Component -// if err := yaml.Unmarshal(rawOCComponentFile, &ocComponent); err != nil { -// return nil, err -// } - -// ocComponents = append(ocComponents, ocComponent) -// } - -// return convertOC(oc, ocComponents) -// } - // New returns a concrete OSCAL type from a reader func New(r io.Reader) (*OSCAL, error) { oscalBytes, err := ioutil.ReadAll(r) From 41bf562f6f7c8c32119b77126dd1bdec8727ea97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Tue, 4 Feb 2020 18:04:30 +0100 Subject: [PATCH 108/110] Remove unused opencontrol stucts --- types/opencontrol/component.go | 64 -------------------------------- types/opencontrol/opencontrol.go | 43 --------------------- 2 files changed, 107 deletions(-) delete mode 100644 types/opencontrol/component.go delete mode 100644 types/opencontrol/opencontrol.go diff --git a/types/opencontrol/component.go b/types/opencontrol/component.go deleted file mode 100644 index eb3d43a0..00000000 --- a/types/opencontrol/component.go +++ /dev/null @@ -1,64 +0,0 @@ -package opencontrol - -// Component ... -type Component struct { - Name string `yaml:"name"` - Key string `yaml:"key"` - System string `yaml:"system"` - SchemaVersion string `yaml:"schema_version"` - DocumentationComplete string `yaml:"documentation_complete"` - ResponsibleRole string `yaml:"responsible_role"` - References []Reference `yaml:"references"` - Verifications []Verification `yaml:"verifications"` - Satisfies []Satisfy `yaml:"satisfies"` -} - -// Reference ... -type Reference struct { - Name string `yaml:"name"` - Path string `yaml:"path"` - Type string `yaml:"type"` -} - -// Verification ... -type Verification struct { - Key string `yaml:"key"` - Name string `yaml:"name"` - Path string `yaml:"path"` - Type string `yaml:"type"` - Description string `yaml:"description"` - TestPassed bool `yaml:"test_passed"` - LastRun interface{} `yaml:"last_run"` -} - -// Satisfy ... -type Satisfy struct { - StandardKey string `yaml:"standard_key"` - ControlKey string `yaml:"control_key"` - Narrative []Narrative `yaml:"narrative"` - ControlOrigin string `yaml:"control_origin"` - ControlOrigins []string `yaml:"control_origins"` - Parameters []Parameter `yaml:"parameters"` - ImplementationStatus string `yaml:"implementation_status"` - ImplementationStatuses []string `yaml:"implementation_statuses"` - CoveredBy []CoveredBy `yaml:"covered_by"` -} - -// Narrative ... -type Narrative struct { - Key string `yaml:"key"` - Text string `yaml:"text"` -} - -// Parameter ... -type Parameter struct { - Key string `yaml:"key"` - Text string `yaml:"text"` -} - -// CoveredBy ... -type CoveredBy struct { - SystemKey string `yaml:"system_key"` - ComponentKey string `yaml:"component_key"` - VerificationKey string `yaml:"verification_key"` -} diff --git a/types/opencontrol/opencontrol.go b/types/opencontrol/opencontrol.go deleted file mode 100644 index ea994827..00000000 --- a/types/opencontrol/opencontrol.go +++ /dev/null @@ -1,43 +0,0 @@ -package opencontrol - -// OpenControl ... -type OpenControl struct { - Name string `yaml:"name"` - SchemaVersion string `yaml:"schema_version"` - Metadata *Metadata `yaml:"metadata"` - Components []string `yaml:"components"` - Certifications []string `yaml:"certifications"` - Standards []string `yaml:"standards"` - Dependencies *Dependencies `yaml:"dependencies"` -} - -// Metadata ... -type Metadata struct { - Description string `yaml:"description"` - Maintainers []string `yaml:"maintainers"` -} - -// Dependencies ... -type Dependencies struct { - Certifications []Certification `yaml:"certifications"` - Standards []Standard `yaml:"standards"` - Systems []System `yaml:"systems"` -} - -// Certification ... -type Certification struct { - URL string `yaml:"url"` - Revision string `yaml:"revision"` -} - -// Standard ... -type Standard struct { - URL string `yaml:"url"` - Revision string `yaml:"revision"` -} - -// System ... -type System struct { - URL string `yaml:"url"` - Revision string `yaml:"revision"` -} From 6699b3c66c89d8ee800a45c6f2dd9f79104bbc68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 5 Feb 2020 12:55:59 +0100 Subject: [PATCH 109/110] Re-generate types from the latest metaschema --- pkg/bundled/pkged.go | 2 +- types/oscal/profile/profile.go | 4 ++-- types/oscal/system_security_plan/system_security_plan.go | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/bundled/pkged.go b/pkg/bundled/pkged.go index ff222387..81f635a2 100644 --- a/pkg/bundled/pkged.go +++ b/pkg/bundled/pkged.go @@ -5,4 +5,4 @@ import ( "github.com/markbates/pkger/pkging/mem" ) -var _ = pkger.Apply(mem.UnmarshalEmbed([]byte(`1f8b08000000000000ffecbdd972e248d72e7c2b3b38ddee2e0dc6651cb10f2c6c0964a36a83ade98b2f3a9412250129d05f8841bcd1f7fe470e120234624cd96f73e0b0c11a725cb986673deb3f8dd1f4e76cdeb8fb4f03fd3c8c7e35ee1adfbc993ffc36878b89351f4dfef8c9b5be3956687dfb35743c2bfce68ec26fde027c7366f664f8ebdb6c6e5b70320a1b578dae1fcc7e857f59a1d7b86b34ae1a8ae50f1b778dd4150f339bfcebd5fae50e43f2777f36a37ff5acd0f61a77d30584578d4168c161e3eea705e743faa93fb4e6b329b9569a8923389cc7579377271f1f8641f2f7eb701eee5d8dbedabba3377316e87dff69d00eb8a3d05b803fed999fd1d59e359a36eec25f8be1d57b474d9af566ced10ff8e6cefef4670e7e8e3afc351fe1f161ff64f9c63ffffc73d5f849bafd9f82eedc7dfb3168df3f7f1bcf67d36f73db1bfa16ba01ad0cf4db1986d608e2674cc984d26bae1af3d166d8b8bb665a37570d7fe60c1b771c7bfdfdfaf69a6d7ec7dffc1d8ef01d1cc3317f30ec1feccd2bcbdc35bfdf71dc9fade6758bbb69b59aff9761ef18a671d518cdff76d05892619d47f89d0fc365e3eee6fafb77eeaad19dce1a772da6c9ddb46eaf1a0a1c4d278d3b0ecfddb071c7dedcb6f8abc6dbc869dcb10cc35c35a4ed9ffadf7f0796c334ee98ab46df41cf64ae1a8354fb053899ef7c9cd99379e3eef6aa711f8e7cd492c1d06edcb1cdef2db6d5e4b8ebab863247dfdc5eb30cdbbc6eb1ff5c357a0797dedcde5c73f1a54997ffb96ab4339f9a5ccab37cabc5f337e852fdefbf17d3c57ce834eefe87b962ae98ffc553eb0d7f9d7ad316ae79ba9d7db4f4b3b6724613dcd937309aa61f4237fbd1cda522e27f8a9afabf89f0202b695776ccd1a7ffe30c83e1d4194eede8eefffc5a4cf13a4d0995ff69041377e8fce9ced0d33285cbff34e2fbfef7df2c63ae1a01eecb7f1a7f4ddc8a4b2843e0fc73d5402d89472ab07e0da7e1f6a9db7bf12b6b0933f2bfbf6d2bb4e0ccfd9b7cf9e718af862231977f5b22f9b8db9b562cfaaef99b3d99c7b6fe60b93f58f695bdb9e36fef9afc9fdf5b2daec5b1d707228f9e72f932efbad9baddca3c3696793ccf31d7c7c83cd2f23ca19725f5b826737b9348bd1b8667be7fbf6df11952ef86f97efb9de7e34be34e3355a41e8ba4def5ed874abd8ce597abbc24ffbfa82e5f50ac146cfd44e034daa37b7718dd8fe48e32b6243534065df7c7e87e6475fa8cfd305b3e73c10670d7a1cd29335363bd67bf1599516b62fba2efb4999512b53606e741a03d8ebba3d553b77def76dbdd89a5bd8cba0f33b7eb7b8cd3b9bf798e5a639b97c7cf7e33b0f99785c9b5b867aeb979e6d0fde2fc79f3b8e8b5d9f8590b6baa2cc1a83b47edebb6ef47b2a42c81c64230a5cf9db45e5f18b1d77d549660da8f00b7725f389131b4f5d28c0409f07268e82f37ddc7e0f595b976df68fbb76d9499a12ec0eee8fea6db9697861f40837f193ddfcf5cfc7fbf0f4d1f2e2cbd1f00aeb9c1d7d1ffa1f1b22531323406b785b6d1ed76e66e77da0f1c691d3ff7c5d0650f682a63eaddedb3c9fb27a6ae8c6d1fae1c09a2bee2717fc3cf65a123a9911d092bdb6f7196d6875de9d1059a3ab6247161e94ad895cca53d12184b7a73cd0e5c181a1b1891e0d9bc12985c3334b526d3955a7eb7637aa0a3c2a74e2fe84a70819e6370ad85d39197a07dbdd7a6d4bc8d7a4b53527d4b6b06b87dd3de32eef35e3f8ac7915c83fab1327599b13475672c9371f3e1e4e07b3ad68e041920bdd1798713d4374b3383c331256bc594d48dc1cb81dd4173774dee83eac2d245d61c088129a90b4782bea5a91119a3fecc1c0863c0351943830b4b6b4ebb526b64f9ead869276b30afcf1ba72307c0b747dd0eb37fedc8e0d69ecdf776d709fe11bea3e7587a7f6ed23df742afaddca7095c98121c1b688dfab6eb481eec76fa4d5b7a7301df75c9bb95c0f4e935dcb50b38835c27e17de3a1f945f7024efeff4c4d61b6fb23f533c5cf24ef9c2a8cedc3851975dd9f83fd6bd19a1620f0fb9b67adb5a8369f7d684beac2ecf45cd4afea7d171780efcf4cbdebdaa93d83d6b8e3b77ee139ecf467968e9edb84efecd7dcd06408da789e76ff87d6eea81f999a91bb6f80248e4c6d95b93e76fbd63cdc1b74cc0cadd97ce58c8c7574ef76c5f9e177ed58aecbd0a4b2a51bb526a66606c0878ca5b51676d4626d4e9ca2f577d867fc93f11d59b7a9f5efd953d91b0eb2f609e9a3a5f721d0b3f640fa99dd89edab3e796677fcccedcadf675edd189a03bb23a195b146a8cc660330818ca9b1641c1f50bf04277b5fb61636df8fd07e773ab9fbd30353f8171dbf83b1d0a2bcf129e90b87f61e5a6f6280cfb3c3f6e19fbc39753a7015cb0c439723439f64ed1b3a26a9f1c8b9a6c23a41b211c939242f9853cd81c9ab8129890b837b3bf3f83b2c3a538104175f62ed576b2f9253a1a535654752433bc26316753b8cab0f32e66b4af4823c7953b21e38435bb3d96d9137a6b6c63a40f69c96ed730502099fbb9972d8d29abf68df0ee5b02f2e866f2d3f7bad0b2073fd5792df7061659e0b9f6d9dac03e0cf73e5097a0fd0e062907a576f24b4ba2283f6e8de1a91235317594b97a17970ee09a0db9603f4bdbe3b262343eb4f687b3c200a11e005684ffb8149df67fae2dce6de76c7d25f7b86afce77e7ed503f7adb39e7e37b76df9fad2b3cba36ba9e5367805b4f90ce60faad88e8d4706373e8dc17e89a5eb99676ed9a12dca07b86837a3a727cd617e8c839faa29c9cc5e9b13ed097a0e0d9be189a7a1fda2361df86d89d77bf0f6d4e892c5dc0fb96be5f067e3f30389131f59e6b68cd495752af515f2dadb9a1baf0cad1e515e015d895c485d91658346748773406c22adfa6291e1b47573c937bbbd80f35ec079b5743a089d1709023f37275d8dafb79e3686c68e872b33b129cbd7b3d53ea9379f4c5f95b475eda921a39128444160bbea1ad37e6ee3b7775ac76c9ba9eecea44556ce59781e0633b5f5b617bc7d29ac96753f756b6afa2bdbd042361698e048fd83cc93bf03d8ea46e0ee668d40fe81855d08576e54f5a37cbb1a946f6c1f8edcc05967ba68eeeabb29e77fb94d99f8a63f824a9d7a6a6b08e248e80f41660b9d09121b22163dbd120eb3cafff54b7a8632f221b74956b1fe7ec93fd678d6c5f5d3b1a8c4ced50efd022bca7d1de9c9f6a6d13dd5545fa082c3bb7fa3bd7563caf503bb837d7e6fb1ed2e7b03fa7d39f19fa0bfe9fe3c30996df03213235ea1bf3d1b578bdfb646d7bb0db5151dbc9faefa4cf8e7ae79a59d08713ad7924e337fbe75f551d8d8e57e6da384a27c9d48f0fe756f5c5b9a3bdb97bb2aefe393c10d0f9165abab2b134796e0e627d84cce5deb98b655732a69d7dfbafe41c266d3e4647c9d6ed0ffd9eafe43ab2a62bf93d919ce1f0b98a743124ab67808363732078406be1ef40a70f6dbf89d63887e6ae96ef9253e759ebf2446b7706781b9dd38b82733a3d3e0f862e4f2cade9010932d97641f638a99c07c148d824e3ebdb73a4c76ee51ff691bb36af8eadb6e0d991b0043ef10702ad1599d9efaaeecfd4d68ca9cb0b43ef078e9fa18b7dacbf6a6c49adc020fbfcd3fb4ccada5ad31e3b5207f39696a694cab197e4ba6ae71395216ebcafb05c93c41070cd69b7a340c75723a453d075b8dcfa37779f2f4b546fcff6935119b0b766abe81753c1b3a7a572eac5d0e583fd9e6f438a68bc695f91fda82c818ef697ba70da691d93c4a3b08c46f7d4d32f57596d3a919c0a0e75ffcc7191776c9c2c1d2ffb4c53810fd7685d607f153a637d88ec543436385685634f9288fa8b647a8ebd77d86774b662bb2acbf7e8373da0e5fa1077d6f92bd27f6ac8db41dc8f294cc55804d69e0a583f23f6335c3892ba30257592d2b7707f5367f41ceb5fd4ee886317f15c3eefdbee35e53298568b31e1feebcaca38dceb45f32a742534c6eac696447426af1d4d9c5b9ad98ce32ce64058181a0bdfdb8f7f59bc2cdd9fda3a6f620766f90d0a65c1c7fa4bf1bb33fdb7f8e7f3f84b79640bdc1f793e1fcce5a9ec97c3b94467c8b963543c3d3f3fbf9e45cfcbd3c4a4b0af3f5ffe7c503caad86fff89c61ac75f8e1cebda3e1b40ceead3c418a6e8ba723df88deec38a362bf1d1486a0434c8d891103ada9ab17401d9efd85e3779d9b3256ff3dc16e696ae3076b472897f4ddd74259531a29a189cecf655b1dd4353ef7ba6243246798c8135fc35f64d105d97858e244e0cbdef55d295211a6b3330711fe1c2f45b11d0e2678923c0ab4c1267d0e4b9a529b1dfca03fe8b6be8a667696bcff0e1dcd2fbcd7c1f7b7f69f0c43776a07714ebd8e9b1c8b72dfc1c1ffef470cda5ffbf3f9ef563a0b12e9e15b7257363735e861fbfea59a32239b7b190be9aa94f233de825045a6b82e32419fbb3a25c3b7c4e86cc45b622f1d31fa907a5eecf38979736a778a0cd72a62e6fac025c5289eccb784ed6d8a5d6a40627e7d6bd4ca93546efcd95d179cfdd59f76264fb623353b725631aa43006d9d79ca2ad35cfee8bce7b769df782c7f8303cc6c15847805b9f7f5dfbadf997c048f1f232c7163e66acb14d918935f858ff367eeff04b8c37b20ffbcd93c96e5fddd8526b61737004a4b790fa5af3d77b153d8dcc656869cd9703fcc8c363d6b5253ef6c3f1276b613dcf5d0bb97661dd7ec43fa5fb00dabcb004532530fc357cd6cbe7297f0dc80b9089e32be8c31e06253b9681f45819024d8cf26dedf27e26f71f615bc6fa7915dd37033b09eda99211db44f7d37c167d7b4d57dc5befbe3831691cc1d0d6876b53323dd051e09efd363234e5d7b3c67a4ea70fed51199e46f60c6eee22bb0be3e52ac6380cae35c7f84b29c1cd8c2d9de20aa6142f8663b52dd6f6511b6568fa6a646acdb1a9f716f5e23bb88d615e1b4f14f348b7ffdc38efc091a8ddfb05f47183830cf57b9f4c67317565e9e8f238cb4efe58ff656a8d7e81b147e71fe0d5e877c78b63ddba58b610bdb622462f323513dabeba30b837d7916e5d6320cc01b6a585a53d42ff67978ef4e6a6c7a01ee616b7f943fc38d6565f2b8b99ce900e664ffb70d879417df14d5d86c0af1b67c3631b8fd304700a0b34125fb6473b9f7ddb17a7e4effb99a1298ca389f3e7b6b0001c1ba039c731ea8e10012e8006df87663bd33f9c1367cd6ab3b9b47dd6a358ce91a3cbc1b39e92ffd9f900915980efdbf1bdfaea3c963fd5637a741c3519da1189b992fee0b32b32b53595fdcaccd2efb7d839edc535a6131adbc363bee88a245fcce0c445579231f619fb2f49cc70998e639335e76c52b1e0fdb3ef701d16c7024353eb07c680ddeaf2a5d84f169a12f4680cf35d6306347562698fe9b1dbf6935377cffc77c63c4dddcbc7b6e6c4fc0f64e25486b6ae06b6af1ee2be45bc37d13eccd0cf3c22874fa39311ffb5aecc0ef4cc0cacc99eaffbcdd25868f37d0fe8f79564a98ad72ad26528ee00cda98664aa17d8d18e6ce00dbde7a6fdbc35fde33bfdaa126bd8bbc6a7f9d754fee236878e040fb1175381e8b37e1c3bb89e3d3d7457bd07e1b6377e59f53aabe8c7c3fdea67db5dffd05791b6b90f7fa8ccac27ce991f227bab6dba8c32f61c6d734f3f3f6e9457bba9abf348814cf0349884bd876ed81b4f829f6d77f6f4f0d8fcf920835e9b69ea03487eebf3e827bdeee94100bd01fa6eb526ef626f7b70be7a7ef59ca701bc7d6abbb3de2ba4df41e74925bf871bb9f534c0ed5af7366f3c6a4bef55b8edbd7683e781bbd2368ff859dae631d2e93d3f1f14d07b10ab3e9751c6e89ec775fc1efc0cf43ec8d27eac36bdf62450db2e1ea71e8bde77bf8edff7f43a9ba1ef15955e3f98dc3c89e87faa43c7357812d7f673dc8668f2ed490c6eb5681eeaa9f6fc80e9b6edfbf4e5b9a12bccb3c62e4d821f9a94c5dc5e2571e3b4851070042f64b6d199586f6ff42591c15851ffc525eb0ccb30dc96ae14b725de7bb5737a364e9b4db5af121e6d4fbeec9e9d266e2f8bfb7960d348c41e8afba68fdc596f7c8ff78282f6c243f71aed8fddb58cd6d8cbb5aeaf416ffcc2fd1059d07ba09f5f7bacb2818eb6e972fa60123c0d98556fc4443fcad71dba6ebbd61ec4789d917d2832c193be9a3dedeecd80ee9befbd2913af7db427afd19eea7556ebde6892da67a87db293ec3576beeaa9559ffbc2e17b5e1f0bf6586ff534806f4f649c36f87d0f62b2de7f8c3cf43d5bb04766bab85ad0eb7f3dbddeceb4e91a3c45ac936acf4dba6df27e1c20e52f2839231e53323c1567aa1273c5f1d1ed3ddb9869fa5cc0f1d323e2a5b96da980d11b015e191bda2acc8bf31dea3594dba393e767c99601afacf2f0f2b6728186dabf72b7efabb9df0fdb5b1f7feaf79746c41ee02d33f80f927861f7b128372dd7be4acfef6e6e5a47640d6d1dcbd4d110c9c7d1fe35b82f35fd3649df3e2676be5d5319718e4cbba94ff188e89954a70f03741600ce704da93576282e7e17979a6d6754c79deeced747e730edb6fdc0479cb4fb747899fb529d36d6930fe20d79f62de5a3e9769cc0915c64e312dc681beb81c826611d8ca3ed2fb3311f09be3ac6d3123b577222c0ababba7a2e6aff056b5d0b6b9d1b13db956b69bc70ad7c44bc1e6c5ef00ceecdb575d50312f4871aee03b149312eecbd7b5741ba61c5bec4d7569e9b24b72b858f267280e40de0e721b9b1c5589d348ff840b6000d2e32e259ebbd332634742f2356f6b277b6890be0b7b6bee262192100bfb9dcfac1abc521c81cc73c13c2cad06014cb0cc00bd44e2779be401217d83f339db8b6af86862effb26be2ea0cadb9007c9c3ff931e75a8c67ac20137e18877641e17a8b65487a9fd81d35b2a5d626b68b2c0deb7ed8f7e5e80a4cadb9d5568eaf68ce0af6372ed1598a7e53d9f15e1fd745267e669958c209b38b118dafad2f13131d2dd60552b2cfc21c1f0a63ea7260f3fde0101f5bb74fbf37ce7c620c338de597f3a4389d89fb24b522931317961ec43e47b4a7d13edf00ee3aa89cf7b68bcd70b1ceabf79bcf6d015a3ae560e3e0c2e4d5b9a177dd27ec372f79779c3f27913c56c77f739f2496059d7e602339d041e38174bdde413b0b6d93049772d1e9aaef9164accf9d6342de9b89dbc53f9f09ef54d6d67afc5b9847f5483e415ece9bc7421de483e7b21057fa897258a8cd77221ec1b4de78767cc99e1efef9c7dedbb5052e395b9f3c672b0ba749edab23734f52f79f0ab342f22327a15521064bf0b5c2208549a996eb95c273d811e5d2417a8644d605b2a92cedda059aca181a92078ff57caa546f21f910f57dec689c6c6e3fb7254b378cafabca7940ae7f6e0b3cd2f5e23c68837fd9f26d656236cab8a4b3db712a2e21aa6786853677d95a8dfbae517e81acfdc0794b7bfaf2bef7ec3d233387c9b7dff50ea43314f623e9ebf97396d2effe1258bd2aedad7b86f1f2d4d09ac1d02767e3ef9807b246bec61c94b6b5e6f8237b9cf0059e3de7039d799189fdcb9f7fdc9371cacfbfaa6907a9a1a1c1f9b3264e4cc23578f61c2753630907e1e7d7e520d0c400e4e719d6e480ee4320a92b4b6a2dcc01bb70347684cecd73e73c91f77f091fc08cd412388dcc5155b977eeb5eee8f2fc2bc899c276d61ce74b5ef0d9f38277ecfc738ff95e2ceff38f7d453fce2537fb94637edadc6ca443d87e987b76969c81a9fb33b0eec761d391cd58e60ff9cbf61d0ff8f026db86cf89476ad7eebebd42e2396b6872e2bc4b621fcc70703f43eb1af393529be969b0721d0e32563bc63928cc01474c2d2c1af6a37f4cbc3e6d331fc57f82dac62e482c3f4bff526680979977bd83df7bc6c5b6bcd89617db92ced1c5b6acb1562eb66522732fb6e5316bfd625b5e6ccb8b6df9c9c6fe625b5e6ccb22dbb22c8fdadfb1614e523b67377e562d5e6d682b775094ff92936f7290ef44ea267b09be70743f4bd5caf0c048f8eb6da2c8fdf6c4757405737d1b035c672d30b9a647725348adec43bc6db59877598cff3d75a32a7307c0ba9c0105dce99cb187575cb95b5d7ee5521d7887f79e70af0af83c7f2f67fc01ee237befbf33f7eae5549c0138965f01abb2ef9b39e9fac778dcbde79f7abd6fede8cb5aff97aef5a8129f104c718b48b5b8855680c3b537229c2f8871e7ea35ce9dc7fc37cad2ee4ce2ba753bfc1804cbd45ac5675757f23c9b73495dd08e096d3fcd17502ba730baf0117d6a3ea27f0bcfceccd095d9d971e01cde475fc1df85c7e75cb50ce27d7ba23c20aabbc67a7945cce723891154e25399aa73d0be9f01499d1ada2a20f57f680d60eddab5b4e6c4d2cdc0eca81ea859df6a0f9b7904b742da2629e196d98f539d700c0e6260b5e356711f8ec0fb16e04e0fe4d75e9ca9e2d93a061c1be21a48f81d2b97be937ec6f2df33787909a630ac87752e6c4f955a16a9b846495dbb6d4ca1223f81b0c4bc436d2179474d4e8154dbceaff796e8b3591c79f9fdaca99bda526be348622ade72f67c9889d9e986e82cfd123eff6aedad19f35202a73339325e4defcdac438e39dc8e8d513368ede5e4acd1fdc68e01d7cf5dd765711e80dea1ad42836b4d72f4be31e0d585d3919b47be2375ffc9301a78ef3d6b48c77e2be55148e48a44aeaf28c737e8fc0054c78cf73c28daf715e45bdce62364f718d7f42993db5c465ddc6c99fd40739119c03b1487e240c03991a10b3364c381b610999a837d1cd8be93908dbe26be8ebcf3a1a4063ce9c311e776d63ecaa89fec607eb84afda7d7ae626e53ccb38beb19e2fac2ad29e0d5cd19c66493d9e66ab55a0b6440963e4bce99eea3b2340fecb19cfcadf81eb43ec4407ec3f8a33ea4fe308c13207c2bdbb3ab9e6f373efb32db54695f64cba7acbdd162c1b41f55dd1fc9734fd45723effd95747782c928eb639fe2262ae9e9d4e776e4ba8d710fefe774cc6ef3cad0fbb866369d8fe1f328bc7f1eedc787e404ab50ec2b4be32a2ace7f82b36bb24093a13dc25c708ca9ada12d79cb43395eb6d6b3eed959e339bc04f2eae05c4cff7f0f0f90a137e6d4e86d4e88af4eddec712df9dd0ec555247d7f2f6f54fc9c5c1f5c6e2d8cbdb1884c5d642d5dcea8e326806e5ba69899eea97cb1acedafcace1df56d526dcfa9aadca3f2843735ccffc1509b5006535ca71f3a6d6185f623f5c5d5d993b8adefe61d9eaa91b5af0be23dd22b1b87c7bd3e57b41d895ddbedf4e1b0d367313fd59e3d56679fe17b8bfcc8b9e769da87587296e672ee17f0f9c7351d068267f3cad2e0208d13117e2e5a231b5d87391753fc8b3573a2737da1173e97421995b1c6933e97d980f4de0bd629e39ab3639da2dfc26dc1cbc59c119f08cb67fb27c5da8c0c5d81caf8d87aa7b267736f9c92b94e7f378e07e3d94f82dfb124716395f21a933850f533253e2ffa5eaaf694d7959468a80bccd676edb9a604a726e6757720f0d5c8d0fbd06c0bb80e2cce35d99e69694c0389f748e2dce45a91a5f767a0269e81f6fb43e2ba86b69e021eed092fac169324f1eaddfb2a9f4b8a89facfd11a289c17189c9b1a23b8e94a4887835c66fdb353720a9eacde471e1fa1ec01c959da681f49cce9700ddcba826e856b6756d11d1fe95e473a80d7ede05a9624e6eebfb9842bd6c11c33340e1fd789ac874bc06dbee851d5d76eaaedf5e575b21632ce828d25b522a79d15c3acfcfcbd675cf4c0ff623df08279afb5762f98f70be6fdbdbaf261ddb2589e9f06c39357a7b7dc5f93e6e2a55cbfefa9c5b831755227631fcf624769cede26f6ad1afa8b6b492267123fd00a7d6f69720070beb7e003be8b73bd493e77a2cf6c3179da8b4b6a8a27b5f9d0b3181073964b62846ba1109e3938ec1ce133ca1cd78fe199237a181b989db3f3ada6f802bf809d9ee6683c518df6c258c207e7951672c87ea6712fd6976a624bd2e76a3ee7fd47e5b257e28efd44635f516faa3907e89ccd3f173f68ecbf8c3fb0445faa99c3fe7b6b076c65667f732adf5dda875410ff7aa33a47c5b817bd97c4032716d20b24b1d995c485d91616866e0626770446968fdb541f6763f8e2c67c3598522c45725d053edc7a38a9c497fc217172df0c80a416fa0f76fd85e8fa37f7350b734dde995d538f627d633f8be943a4bb8d4ccd5cdafe9b6be92faec3899b2e6a0bd7227595f59e9b8c2bcecb9161575243c35727a6a44eba125cecf96993dacb5652bf8d60ad1dc9f370be8eb69ed39acc1b9b8353e0efd408f32d6d0dbb1d67666ad7f47ed25ff43c535231d6c76cd789fd5ff24d880cac9c6f426b357d382e2279cf49ec305f09b63a453926b1164fd640185b7a12cf4036ce3676aef7e65d490d687d2538c435909b714dfc8062283cd0be9f19d3099a470f4c7b34ffb089f14486b6720d5e5eda7c2f4ce7773dd58c6b18f9fd3a91acdacff3ce5bf745f52f0bd63d5417962eb2e6603fd7f5a435d50eeb2d225b955399b3f3acd0f77e057dacb4aded7a7c2b99fa4b657d2cd627cee72b4f615fa81e7756bd7d02b85ea1cdfd89f2f14adb7af10f9c7e7fbec73ff03b31085bb952f9cc76b7f754a97d212e52f8689a172e43741e98ba89cf698a4f08f26a5b96d8369eed3bf0102b500ddf9769971eda7183ad1fbc529f53b1f0956b70ad10e7734b62341c085887d9f5d1a27dcfd4f6cfc66d3f06236fe87d9cd3503eef226368ebe521663b2fcf7d5b8b0ee73c7206892977e425e8f46ae6762a9e238973c01de0532ffa54813e95aa9d73e439cc42471227688d649ff1a446f4d939207979e9e85fa236dad4f65bece9fcc571adeef5b9cf5fbc3e6dbff525f808133973b271973d839b87401319cc8d725c0c756468caaf678df51c649b8e8eb2d503f35026eceef3d3e0b192755b8c494c6ac7bb7dba272bdaf1f4f9f8cc4fd6961d519e1fce70c91e173658464adb755f33b732eec7c770c7147007a5cfce429ea9827152b56660eb2aec4a3be70e1e1fe29323b5c3d0da07beede6c45d0ffb5cec771a0349dce4caf45d7de8815e5bb94fdbdca26dade5d89766a3b540fc9129aea02f8b495b19baeca1bdf93b787af1bbbf42ce3e2f78b62f8617fed82f8ba5c3988df3d7b81323e76b8cb5674f4fe68321e7d9b9b1311cd1f3bf82ee57661bd41cef946e72668c68b90efb79d63897e881478e7b6d3df8b4d8413fd5fe62ffcfc3d60eaae2ff797491eee1680ae3e0be080188639e54b7a13a8c6bfb6a9cdbcb101fc0a36b73ead8d1e5c0e94cb05e6c77e4c0f1c5f170b0d5999f47826868caacdb51a0c1ab11e6d1a0bc80966e7a063fd9fa5d284fa315c7741f13bf4a1cd7456b10b573341c085e57ea0736df0f80af305b1d7ce55a5a73e348e202c799ebf9719271bef871aafb710c6eed15703fedf9e9c8b527e166e5bb2e79b7826c9771ecf7fd60fb23dd9f43795b1a1fa3f39cc9a7254686c64264c3ff0e7dc5d098afe0b32ab31d6a62be8aede80fc6f416eab99f69cc0be35bedbaf5915238c9e9d939e32ae58a7ca2b1af8683ad3907bf25cfbc2467e4138d7931feb5e658135ce7efc817f81238006c9f9f4cb66c6378675edbe536c6271af3f27849f1b81fc5319fefdb3c1e23901aeb7cdf1ad69bb631da031baad4d64d62cbd816ec7698ffd7b86a04d6afe1346cdcfda7f1d7c46ddc351a570dc5f287e8af7ffeb96ab8a3d05b803fed99ffcd99d993e1af6fb3b96dc1c928bcfbf663d0be7ffe369ecfa6dfe6b637f42df2bfbfed991fcca6c369f837f9fa4f74097ac368fa73867e3bc3d01ac139fa734ade5574e355633eda0c1b77d73cc734af1afeccc11f6ef09f7f8723fc008e615b7fb0dc1f2cfbcadedcf1b7774dfecf5b86e15a1cdbfcbf0c7bc7308dabc668feb733fad5b8fb69c1f9f0aa318f70131e86cbc6ddcdf5f7efdc55a33b9d35ee5acc75b375dbba6a2870349d34eed8ab460fbf94e739e6faaaf136721a772cc330570d69fba7fef7df81e5308d3be6aad177d03399abc620dd72014e684f98d60dfa38b327f3c6ddeded55e33e1cf9a82d83a1ddb8639bdf5b5c93b9bdb9be6a2873f4cd0dff9df9fefd9abdf9e7aad1dbbbf486f97efb9de7e34be34e33ff5c35dafb4f655b4d8ee3e24b79966db578fefaf61fdcfac574311f3a8dbbff61ae982be67fff41d3ef0d7fe12142a3d6f8e6cdfce1b7395c4cacf968f2c74faef5cdb142ebdbafa1e359e13777147ef316607f9d1c2e93c655a3eb07b35fe15f56e8ed2cb9e4ff0f339bfce3d5fae50e43f2777f36a37ff5acd0f61a77d30584578d4168c16132a9f8537f68e12587ae9566e2080ee7f1d5e4cdc9c7876190fcfd3a9c877b57a3aff6eee8cd9c057adf7f1ab4f9f95b04b774346ddc85bf16c3ab778d22ee486fe61c3f0deeec4f7fe6e0e7a8c35ff3111e1ff64f96c7fb3cc07d8985406197e85cd5dcfeff5c35502b1b770d24b4887027055a0c7a68589d3e633fcc96cf5c8089d66d4e99991aeb3d63e2f4d6c4f645df69332b256a6d0cce83407b1c6f8de01458d8f718a7737ff31cb5c6362f8f9ffd6660f32f0b936b71cf84c47c6370e2fc79f3b8e8b5d9f8590b0b93d3274e84918c0c6f0282a4467cebf585117bdd4718dad21a52901125685796401796c0c74525244ae876d37d0c5e5f996bf78df665dbde12678cbf7b30a70f4a5ce4370f7472e84c7b7134799e0af485a6def74871974a20a317db6f71968649b8f71d6b9ee1b758a74d01561d1529e48903c3d09a93ae24728606e7c636d9362fd0982aca51b3604f6a2c3e88dcf1c38297786e74b4368e246fe205d6f0d781cd79d8899b450060e80af3acb14b9338d2729d7765c6c4e173328973a03d5512c757fdfea4eecf2c0aad8c0d6d153abe1ad95c12f0aeedc0ca7a4ec6d8a5d6e46f4896e6fa4b236283ec79c53f9f283851dad68b43ebf406d0491d5a1767ca199d297e6b7efe758d09babec25853d2af133aae7e075085929c7c81f18e89d94e96809e41665224c72be8695446697071e848b95f675d5b16a43e187fb216e6e0316f2de483c56af62369632921d096ac666e0ed8f2792a5803c06f3145eba4bc2063a6d3ecf7131f4d3313ee7374dfc30460539737198930a4e829a778a0cda6ae394d2290e18b632b624342b2df2db3e1da86a6fcea4a09a8f91dc921704b8442880ed2c4d829a225b52e08781f78fd3184a3e9f69f199cbf4d8afe0afa783ac1eb543a4b4c7c70f6c4c4d41afd0263bf43007f9ac0c471802baa5b17cb961ed16b2b02add205593149c6a30ba416b2a50978ca5743c0f761014143097829b390ee89804b5ea2af95017c2ca483e93263ea1eb34304578384e46520109b818e532aa91a8f55fab339953d93237f3f49e2d8c1052a572ef05b48ef8a0916501f31f8c7d45e821a00a0ac3667149d60d3447bd9e01e5f9d57027f411982ec04d3a2332b2e60313263429554016bf4ee58f65b125ce1a2bcbc19107216b949c16178cc9f47c29b8509a1150f8c849139c0c5c302e0f70383139938018600acf09a9bda91b0727479057805beb7a82025300953ba7c599287420857681198f78c99b443c4b2d7cf10ee9ef9ef259350af9d7c12e55391a7907d78a89fcd881c3e8d4e46fdd71b4bdad73333082df77cddaa0443535718436357956429c46b75820b0c123d8cb13416adf71901896e6503262aeaa4fdbcf5fce3bbfdaa424ab5d77e4c8a2932743de0363fa37e1f16413d281af5d476a3dec3fdeae74397e93d08b7bdb1bbea7556b3de2bbcedc1f9eaf9153a4f0f02501e3ce7a7388f9407e35a57e72bfa79dddbbcf13f5416f4c6a6f3349804cfaff7d1f36bb7f9a4af664f6d77fd435f45dae63efca13201f9cd7eef4d1972ddc05d699b47f4dd6d4f25effaf920835e9bb9d60793e067db9d3d3d3c36e9774d7d00c96f7d1efd1c4c42d4aede6b8f55369ef3f3e171f5f3e1317a1a30b39e385fe367a1f64196deb3da689bfb75d5e72a0f06ba67dd8bdf3340ff5f83deabecd07edcf636f7c193fa3223e3a4a0f7ad7a2a7ddf6072f324a2ef5527eeff8f9187fec7eab4af4f03cfd6db4d7afd3cf82bf2ac9fe2fcd773fc0cd49ed720ddb67d9ffe0848e2c669b321e04862ddfefe3c04fdae3d9b7f7181d69a60e02f267fafb93726b8d820891f75f03a2344afb82d42dc9678efd50447e3f685a9f6bdbf60938fdb1be27e1e149713883de4c7fbfe7af6f4d05d91bdf082f642f403ed8fddb58cd618f343646fb54d9751c61e9a63faf971a3bcda4d5d9d470a6482a7c124ec3d74c3deb87cdda1ebb66b6db54ed6195e5f9ef33480b74f6d77776fd2b534dcc8ad78ede33d29b2b7bd57e1b6f7da0dd2fb4cdb3c467ab2d714d07b10ab3e9751c6e89ec775d11eebb52781da76f138f558f4befb75b2de5f6733f4bd52b0479ec4b5fd1cb7219a7c7b12835b2d9a877aaa3d3f60ba6dfbe0b3b4bfa0a418605a866fe34c556cf7379cb099dc9322b24b3d93c44febc74b73db52ad8839899deb3971be43bde6af3746115edb429e9f254706d058bbc4a2f6cfbb9de47d750b961fb4f708028f2dc94f4901b66dbc50282a1a916b5fa5e777af68c4dad1c4792c538de98416b4dfb906f7a5a6df26e9db67298cf8a6ab1e20e3161746fc65612c41cbef4afda5c1ab21257249279864db19d5132276934df26c9c53157ef14b9263e2769f866880c609cb745aaa27572766a7a48624e109fb0268d17da407229bc421458e12a2f43dccc736c1aa4d8ac33c133b97120ad4d5737162f08584a0fa9acf2fcab12bd77e181a0b6d5ef00e0b2e16cb33bc1e74656568684d8aaca1ad03730ab749508430f5bd7bf7bf9a4ce1b0683b1b0078b8667b7b3e43a089d719b13266bf98fb6e62460941d52e3978c538049ee3a5e38b7347c3445c813d8a65466b15dbe95d49bdb6a5b5077c9101bcdcec7612d2ad9a67fe6e72ccc7f812719f2ac984bae4c5890c49ef938ec0da53616973d42e9220d6fdb0efaba36ed224b9f6568ecfbb1d9c4041085ff8fe8cc814223bdeebe3bac8c44f2d13cb888dd37dd1e8b547c8c444478b758194ecf33cdb17c78ea44696ae309676b08febf6e93717d8a17bfe443a591ccb2f2e9c4e0bc1b4bda5ed3b1ef0e14d92204c8bd6d85c6bf15499f47e179bd1253a2f331cac5c53838c25a951b7a304c07758208951b7ed79e83c2b7e373d07b9f51ced3f4b3761b7ed858eb6662c5d989b836d319e837616db26d905032f3a5dd11ed9163e3a33191279ef9748462d6d6b4d0293a5eddb47923fb6a2bc79bc10015f0a057de6b1bf140aba140a2a2a14745c81c17481b8127f15c1d7ba6f694c4aa5d86b0acfa1f752858905ba2ee2622f5b62de9a3ed56d81bda388b2d1382907b92d19ba617c5d45dd2fbe7ee53a1c64ac764ca4a330a8bf719cb73e29784e3b4ea4a7c57ae6b356647397e674d03616141e9e2a33c0cbccfbdeb3f78ccc1c2679faae77609da1a81f495f7f4781c7edbbbf42de52b5f6d63cc35a91c9890b4b0fe8d9f83b72c7f01af91a7350ded6ba7a1c2d80a09c3de7039d79b6af625ff4e71ff7a450c4a9ec20a40f04a0cd7aa6d48f4c5dd99c3dc789534343835f8240ddd458cfd28e25733c247433b535b4256f09fcb7104c71e1badf40c086dfff257c0096d45a14e0c9ebc91ca80e5ecf7ed6aad197202e2d6ee7252ff803d6f685e8ee4274f7feb1ffb7e666aba1a1cbbf72cfceb23330757f06d6fd286c3ab219cbfc21afbc3c35b46630f4b36df8fc8261fbf60a8ee7cc4dcdf1405bc0b10fa733719fa4e6d2690bded68f3099773b4ee0486e8c73183b07e4cbb5fc26d88ffe31f1fab4cd7c54ec10b52d24f8a64c7ffdc6925a91d37ed73bf69e71b12d2fb6e5c5b6a47374b12d6bac958b6db995b917dbf288b57eb12d2fb6e5c5b6fc6c637fb12d2fb665916d599647bd63c39ca4a8cf74377e56295eed8bf3ee6351fe4b4ebec961be938f8ba724f8c26bf7a9a3b006e7ba86dec3f951afacfc30787b09ba1d751317fc4176b0a5390b83e4a650fed79a457676e3861f12f7aec11df0569333408e7910f09810fc2e39bb718ed5cedccc5305c5e75d89eac0522bea4a2d82179530f7aa8bcff3c13ede9e8c65e5429145c5854e987b752ace0012cb2fc7aa1cf8664eb9feb56b17ec3fffd4eb7d6b475fd6fabf74addbd5f88406293eb1792d6e21a91580691fe7b18208f3b5c021ce9dc7fc3763c00b4d32678f7bfc1818cbb424cfc3d7ce0c5d99752573698f70de719a2fa05e4ea17fe123facc7c44ff169e1d4b12379674761c38d9475fc0df85c7e7483f407d994af7ed89f280a8ee9ae8e5d5309fc20f1223a8225b4d16482bf7495a439313e74f0381c417b02c151718fb2941ced2faaca1ed178d2c918f7bd8cc23b815766c92626e998338d509c760ffd9b5e356711f8ec0fb16e04e0fe5d75e8ca8dad96a70ad10205946720be7dd0e7927fd4c8a506a4a04b86613d4cbd12a6c4f055d68948e6b14cfff36a650919f6005788531b495bb7d47bdf33fd5b6f3ebbd25fa6c16475e7e3f6beaa6536169f37d2f1d6f39773e0c7aefb386ced22fe1f3afd4deba85b171a1e1e362c9f4de4c9c3b8379e78e8c513b92c8e4d533a1fb2d34b8d6e4d8e2b2b684df317fd694a5995364d6e05a2c98f6a3fdfcd9aaef48df7f2a8c06de7b2316e9d8b09c4721dea702bdbea28dc4c185c9ada98e19eff9ebf7c9b7a4cd47c86e0e96e7304f94a032a70c4772911da9c5531ccad4d45a53db1757960431cfacedab532c0f897d876d74e2ebc83b1f4ac680f4e198733b631f65e429e1f8c6816e94cd7d44ae9dc7dca638a709fb1fc4052edec7b5583bfaf831b1b3db5c459f2b940119fa2c3d678407c0f52be66f25f7a0be5a03f5de25ef22fe308c13205c2da9b3ab966f373efbc6596daab62fb2e553c6de583a5a93b1a755f747fcdc13f595cb7d7f95b9a6988cb23ec6b8892a322ef6b91db76e63dcc3fb391db3db6c4b22e3486a14cf873ebafef5d2bede8f0f8d12ac42b12eff96c255549dff1867b770347664ea5dcc05e748eadcd48519e00ee578c95acfbc27bdc6737809f20b95a6e46032ee197a4649a17c68ef712d992381e22a92bebf974f247e4eae0f2ebf1646bdc2b13166e654be584797e765e78eaacabd6af2541dbcb6893c713875d4ed288123119b70a035319fafa9bfb836e67427beb85a7c93b8adefe61d666d7fbf960ed92365e3d0dfeb7345db91dab502f6b93a9a38ef4afbf6581d398bee3db05babc8d89dda07c567693ee77e019f3fade9f0e61abab2019c12d03811e1e722f19215ba8e702e6ef9176be644e7fb422f7c2e45322a638d6ffb5c62abd17b2f58a7ac6bce8d75b27f0fb74554c219f189b07cf249b136862f6ecc5723b3e65585711b19ba0295f13eff7372deff4e1c0f96b327c1eff89e67736e999eda2571a0ca674a725e247c619ce11a03616c4f914cdddaae5da91f989cba71dac8a66d42db1719537b71016f427b24783b756452980612ef113c20394b1bcd99c4d43c8f49bf3f26ae2bce4dae15a1f313548b4992f19576eeab7c2ebd6a2a63492d5a03c599599a324b8d516047c2c4d4e5c0f1b3ea9f9d9453f054f53eb81c3ec291a1ada780970347f2c2d3e11a5af30aba15ae9d594577ecd3bd8e74006320905a9638e62ec32ee18a9d628e191a878feb44d6c325e0365ff4a8ea6b37ddf6daf23a590b596701e72dede94b660cb3f279b0f78c8b1ef8dfab075e30efb5c6fe8279bf60dedfab2b67d42da3f2fc34189edc3abda5fe9a3417af48b97edf518bd1e65486605af6f02cd3de0e672ff1ad8a4c57f23cc77fc37e205b6a2d6c0e8e2c6d8df3bd4dbf15e15c6f92cf9de833a91ab1936e07eb45496d3ef42c47ba8d39cb3d749d4379e64cdd3bc6679435ae1fc43387f5b0d0d2fa67e75b4df1057e013b3dcdd178221951184bf8e0bcd2620ed9cf34ee85fa524d6cc9ceb97afe5cf64adcb19f67ec2bea4d35e7009fb3e71efb2fe30f2cd1976a8ef56fae51bf959968be4f937b97f22115c501a9ce5131ee45ef25f14053821b5b5a7bc381e001ffc505bec8599a730c46366ed31135e764cfe6de38a51467905c57810f773fe7aa042394f8923f244eee5bda1a16fa0f76fd8512babefb9885b926efccd61929d637f1b39801d2dd0c5ff5012fc3ae04996ec7f1ec48403ae592d4551637ddc7785c715ecec81c0810683234251c270cc09e9f765b7b19c6b5410836b8d39f193aced7998336a9c96cf34a6072cd9d1a61a60fe7b8a698a42ee8fd787cf0f3a43ec4581feda54eecff926f42fa5cbdae33a9d5f4e1b888e43da7b1c3c696bed5294a3189d9f5c90b30f4308967201b671b3b5737cf6d015a3aa9af84ec1c539717714d7c8b6228d0e727496ea27934b4e686e61f2e309e08d7bf5222c02b9b673d9ddf35a919d7c8efd78964d5419e77ceba2faa7f59b4ee55e0c3b5a3bdede7ba9eb4a65a46bd45cff61de89c9d6785bef74bd81fa56dadc9b792a5bf54d6c7121de76cbe723f857da17adc39f576536a8d0b6dee4f948f57dad6f6c53f70fafdf91effc06fc4204cb772a5f299dd49eea954fb02e9a8093e9a60e4235347e781cae1739ae21352fa432ddbc6d0e5a9a957ab259f8561dcb3c30ac6a01883985f577ae77bd7e6d5952db5a2744d535b12235a579931b5ba788ae27655c1cce7c509b2fce671dd996abc19a935897dd16c48b02948176bc536c6cad06552773b93dba12c1e9fb4fd08fbb6b5009d4948722e686debd29c12011ab8e66ccf7ddbb9afca7aa073a5c9d08e909d05c7565bd8d8923ab63433302281e478612e80fea68bd6c560bb7f92fae303219111a4e6f90a7f4f791c683dcb5b745dfad97bf7a4df45b91c70ed9d47a2e775e425a859071a70cdf970c0a69ffb41389f0c5973a4be915eb3975a70c7e91ca7ad0577a943f6afae43e6c385c1b5227446925c14169d1b2bc035b13c29c14bcac05796b85eb34ff2b45fb856684bad4565190dfbedfebe6e53ac83047bef0c8d82779ec81750a8bb545d4b07fd3fc28f74f08cd3f89332c6545c199a1c00a94adeebfe1a121e0c5df00c1fce496ef6b9d6c14e9b3f24769ed5f6dafbf840873c869be5e01927c188a6f7d2b3966ef775992c7848c90db79f5efbd5eaf6bdbd4cf67593b27ce6fcb67e8c1eb4ad9378a40e149a7adf33259131b2fd3901d0058c8fccefdbd9ebb55668d397c0d7bdab1f75f92cb67b211f6353e16ca2fd6703000f65532f4b272993ff87fe22e2f395d6b93edf5c9f52dd7e6ce57a196745ea3ccff7abe5fb8fe405e0b3b0dd7be775018e3fdb5784c657f16c4924d8b1221f5d95f386ac15a43f1eced3c363d6b52532fd70ee885c58cf73e542ae4fbf6e3fb632bbf8ec4b8d5f673fcf75e727bf4d7e73b9ef432b5b977bdc92d97c6824976a6c456c68e87d263f5fbaac8fb26770f310682487feb8f33d7dd69ce66cb7347645f8b794259285006316d91d3959e68f19d067741fd3cf101e779f51c537b35e1a5a7f43fd1fdbfd2eedc863d79cca4b80311994977427fe5e535fac20ff7f37ffe580f05f12fb583c0dff653af7d9913ccf6927f59f37bb58dad49c767aaea13527cf5c2bea4afb320f6318e2f1c4715f8269801bfc0c690d0d1e8fe739b00bb56d288bea09a7c92b4cef83720e94d4b595fcf9f17ec0bec8f43ea1181383131738dfaa2378682e629e24bcd7a9af14dd6bf370e3486a5873cfecf8023e666f14d587dee3924af7bf2e260862df77ba3f533b8ab90f56aed5514343bb0e6d5f45faf908486f2ec129bd97fb7847d616f284e4af15a12e17b480f6ac23a953c0cbcd84cf4193a9af1a63d6596c3b736fbbf968c93bdfcbabf7b131ef0ff0c55c62b199cf3c2b56fb82133e274e3823e7a428ee72b1577363a2494e1190dec238cff9d3d936499c9145badb9cc63d7f537e26ce7d8e00b70ad3baca17cad7c4b95eb6df9a3f6b30b4a53589f39e387ff337e71466711deff9b75e628c706eee6106beec837cd7756216bb7e888a390353db6fb136c1922ccd91b0447a933d1276fd7d92b830dbad25fa3e15074172b02ec6b5a88dbf41ff4e8f6f262779cefc12ff3ec1b4a69fe16cba92c7024d5c3ceb3234b4be87f3430957f77b39ef2e7ae267d25d2e7ae257d5130be3ac177d31e3a7ac8687d61c035e5e015e4636fae659fbdc3ef18cf6a6fd845572670a7317d05acc8865acb3ae2df3d11d8c1be5a9028f79f2203f365ab31f491b4be39085f8954f17ef2ad0d3cf1e8b3e4ee7fe4478b2421b2c3f3ffc53e1cc4a3980b3eac364f9654f940b57bc264aea1324f321c819f351c547ffb88da5784b274a72b75231adbd184a67b2c5a5777a18376cead4771fb7a753db5628b4a7bf382e786c68d721d054e8b4d93d5c35bb31f5b3f39894b427934b335786ff2effc5b17d38717ecdc1fc9f282ee781111b9a9aca20db92c6da494e9bae54c9c1f1c04850d0fd55730d709c4eefb90e8763ac645dc67155bc37d7718ec1c6d1051c478f730ccae32f65583871f1acb1d0d45fc2ad7cc63901218eef7e0c2e368e2b57f21fbcc5fca6628aebf4f818773a0e4cf22f701d64e5e1e56de51a9cc8e03a225152bf91e4d6d37a23663a1f28c52f65520e27749e60b9dd515863ab03b93be33eaa1323cbb26530df9447d7e2c8d1e5603727fae2d7f8f4b6f6c5aff175fd1a5b7d0f9afb67e0b9f3e3b9b4eeaa4ef6cfacaf60dbec614ef6cfa1ff127ea35cde9103bd20a30e76e11c9f8c2fa9e43dd56d221673c39b6d61b0ab1f7e0c9ebf6cfd7c880d33ddd30d0f6adc6fd7d501a7657a4c77ebdcbb6f69ceca3ab89d9d9ad7a43e38c63ca6df95c28401eeda35b4661c873ac839457625c5fc6d2ca9c502e9c535fc3717fbf43aea043dc392d4e8fd38a78ae336d919a71af82d7561e9226b0e8460876f05e9d79d18dbd5640c0d2e08777e21e6ba323f50da5f53910fe621d11f3f724d485b9d74973fe6bdf37898a37dc1b8efff949de55979ee9fcdaf7bc9e9fe4cbad325a7fb92d3fdbe9cee54db72f358b14cd9c1eeecfa330e7d62e5f198fc67fd24f1c4ffd7b86a04d6afe1346cdcfda7f1d7c46ddc351a570dc5f287e8af7ffeb96ab8a3d05b803fed99ffcd99d993e1af6fb3b96dc1c928bcfbf663d0be7ffe369ecfa6dfe6b637f42df2bfbf835fb39f2338fc9b7cf927ba003d7f34fd3943bf9d61688de01cfd39256fcabfedaa311f6d868dbb6693bdfe7ed5f067ceb07177cddfe03fff0e47f8768e615b7fb0dc1f2cfbcadedcf1b7774dfecf5b86e15a1cdbfcbf0c7bc7308dabc668feb733fad5b8fb69c1f9f0aa318f70031e86cbc6ddcdf5f7efdc55a33b9d35ee5acc75b3d562ae1a0a1c4d278d3bf6aad1c32fe5798eb9be6abc8d9cc61dcb30cc5543dafea9fffd7760394ce38eb96af41df44ce6aa3148b75c8013d2936ba675833eceecc9bc71c7b2dc55e33e1cf9a83183a1ddb8639bdf5b5c93b9bdb9be6a2873f4cdcd7796f97ed3e26fffb96af4f62ebd61bedf7ee7f9f8d2b8d7cc3f578df6fe53d95693e3b8f8529ee55b2d9ebf69fe839bbf982ee643a771f73fcc1573c5fcef3f68eebde12f3c4668d81adfbc993ffc36878b89351f4dfef8c9b5be3956687dfb35743c2bfce68ec26fde02ec2f92c335d2b86a74fd60f62bfccb0abd9df596fcff6166937fbc5abfdc6148feeecf66f4af9e15da5ee36eba80f0aa31082d384c66157fea0f2dbce2d0b5d24c1cc1e13cbe9abc39f9f8300c92bf5f87f370ef6af4d5de1dbd99b340effb4f83363f7f7fe0968ea68dbbf0d76278f5ae51c41de9cd9ce3a7c19dfde9cf1cfc1c75f86b3ec2e3c3fec9f2789307b82fb10428ec129dab5a7bff9fab066a63e3ae81641d915dcad892d4d0a07aafd5e933f6c36cf9cc051bc05d8736a7cc4c8df59efd566446ad89ed8bbed366564ad4da189c0781f638de9e4529dbd5f718a7737ff31cb5c6362f8f9ffd6660f32f0b936b71cf44ffdb189c387fde3c2e7a6d367ed6c29a2ae998e248463a7cec1bc1b651ebf585117b5d24e739c259fbaaa98ca1d37ebccedc0154fe7a1d09aff4995b5dbf58871ded9d81fb67c24e5e7a491d6bd6f0d781c1d1f8aa94ce53acc2f310fbdfd54d57828bb8f62979963802bccac43c558e26cf2d4da1b158c2cb6ce8a66769eb2db744aefd7774fdcef4587c0887447a3cebeb0bb1ad9959e308cf8dcd7919b1b6aa7aa83a0212dc58929acd69e8af3d9b7f0981d69a60bb36b78656a92ff7f03999fcbc6a6473c7c739d2f767d8264b9b533cd06639539737efb083329e73e1d5bcf06a5e62599758d67972b900b73effbaa6f5243ffd58f3a4a6e589c6ba344fee636b277d85f18eeb7b9d2c07ea30bfeec2bd92f153ee6b4ad7617bd6cbe7e9b7f8a67f337e353f6fed50673d6cbb09eda99213ffa576a1bebde64418d891a129bf9e35d6733a7d6897722b637e1a77cb4f53b52e446b0e24754cedb1a5394af1484f095fc86e1deb54dcaa76eedb3e87ce87e0d7d2ed3f77fe6bf0b570ebf0d435c1b6355cce5e8f37b546bfc0d8a7f87b4e85c93d2abf36d6ad8b650bd16b2be6d31e623807c21c605b5a20dcf51abb7408463319835a1cd9a4cd1f533f7cabaf956102664807b3a77d38ecbcecd633adc5e982c7361ea709e01496e23cd058a53ffbb62f4ec9dff7334353184713e7cf6d6101383620357870cdd308700134f83e34db9978f38fc6b246a6b6aa861da6755733cfd56afcef18eb4bfa83cfaec8d4d654f62b334bbf77d179e1f870b28bc9c663bee88afd99a5f7b67c4b12fa0d17a604c786de5fa6ebf69035e76c521c3befcd650e496dad3afc413b35b4de3566b416587aecb6fd24b57153f2f45dfdc4b573abe493eee52ed6c4f0e17d98a19f519eb6d3e864c47fad2bb3033df3503ebcecf9badf2c8d8536dff7807e5f4996aa78ad225de68dea61fd006898ef2db0a31dd9c01b7acf4dfb796bfac777fa55a50ec8de35bb9c6e3e6e73e848f030676c2a107dd68f6307d7b3a787eeaaf720dcf6c62fab5e6715fd78b85ffd6cbbeb1ffa2ad236f7e10f9599f5c439f343646fb54d9751c69ea36deee9e7c78df26a3775751e2990099e0693b0f7d00d7be349f0b3edce9e1e1e9b3f1f64d06b334d7d00c96f7d1efda4d73d3d08a03740dfadd6e45dec6d0fce57cfaf9ef33480b74f6d77d67b85f43be83ca9e4f77023b79e06b85debdee68d476de9bd0ab7bdd76ef03c7057dae6113f4bdb3c463abde7e783027a0f62d5e732ca18ddf3b88edf839f81de0759da8fd5a6d79e046adbc5e3d463d1fbeed7f1fb9e5e6733f4bda2d2eb07939b2711fd4f75e8b8064fe2da7e8edb104dbe3d89c1ad16cd433dd59e1f30ddb67d9fbe3c37748579d6d8a549f07b93322ceaab246e9cb610028ee0dbcc363a13ebed8dbe243226adeb49d6199661b82d5d296e4bbcf76ad6e0c0ed6353edab5417654fbeec9e9d266e2f8bfb7960d348c41e8afba68fdc596f7c8ff78282f6c243f71aed8fddb58cd6d8cbb5aeaf416ffcc2fd1059d07ba09f5f7bacb2818eb6e972fa60123c0d98556fc4443fcad71dba6ebbd61ec4789d917d2832c193be9a3dedeecd80ee9befbd2913af7db427afd19eea7556ebde6892da67a87db293ec3576beeaa9559ffbc2e17b5e1f0bf6586ff534806f4f649c36f87d0f62b2de7f8c3cf43d5bb04766bab85ad0eb7f3dbddeceb4e91a3c45ac936acf4dba6df27e1c20e52f2839231e53323c1567aac4ad3f3307a97bb631d3f4b9406ad7d78f97e6b6a54a2d24c02b63435b857971be43bd86c6c83b797e966c1910e785010db57fe56edf5773bf1fb6f7883a48fda5111de289336a6025f1c23d2c7155fb2a3dbfbbb8e98ec81ada3a96a9235cf778b47f0dee4bddfa5871df3e26765e548f36db6eea23db878c5b5c5f360c708d67ce704da93576684da6d3e2a877e7ab0247c6bbeacbeeb63d838b8bb6fb3475ec689cb044a78df5e48378432ece1de9d12aec769cc0915c64e362feb1e736d603914dc23a12b237facb6ccc4782899f533e5c62e74a4e0478755557cf25d8e14b6dd9ea6b3e9f0f6457ae353da0a91b5b12ebe6fce2f560f38267706faeadab1e90a03fd4b6b9bc27e2ec45ba61c5bec4d7569e1b19f87d8a9f6a4ee93a267280f044e0e7e11a7209c6eaa4392e07b2a51aff0eb2d9bc8c58d9cbded9262e80dfdafa8a8b658400fce6b26e7d6a32c72dced0d62cae67a8c12896198017a89dbe724ddd5b01495c60ffcc74e26eb9106be6d66bcd05e07338414e74aed5a8895f97772f9121e97d6277d4c8965a9bd82ec2b5bbb526f67d39ba02536b6eb595e32b5c3b93fa1be39cb35876bcd7c77591899f59264ee9d95c293732beb6be4c4c74b4581748c93e4b12234353185397039bef07c6c13eaedba74fc193742a9d8cc6f24beaa9126e62f7496a4526272e2c3d887d8e982703d97280bb0eaacae23d6c868b755ebddf7c6e0bd0d2fb3353efba36071726afce0dbdeb3e61bf79c9bbc93998d49170fc37f7496259d0e907b684393c90ed8764f3413b0b6d93049772d1e9aaef9164accf1ca3a5efcde744fb4c78a7b2b6d6ccdf6b45e6917ccf8097f3e6b1842bf143e7b21057fa8938b18af345dbf5706b3b7ae3d9f1257b7af8e71f7b6fd71638cd1ce01865eef9fe51635f8cedfd44635e9cb35b73ac3f98abfe28cc0aadc5105a1562b0045f2b0cd2f5a5aaf859d3bc0e36e6eba07a468aa7c3d2ae5da0a98ca12179f058cfa74af516920f51dfc78ec6c9e6cab930df92eb2aea7ef4fae7b6c0235d8ffadf3c83c7f6248df36661368aed6d3ba71d27d2d3623d332cb4b9cbd66adc778df2e767ed07cec3f5e6def59ebd6764e630f9f6bbde817486c27e247d3d7fce52fadd5f02ab57a5bd75cf305e9e1a5a3318fae46cfc1df340d6c8d79883d2b6d61c7f648f633b973b7bce073af32213fb973fffb827e3742a6e0da40f6870feac8913b323439b57ce9ee3646aac6769abafa0cb41a08901381587ccb40f81a4ae2ca9b53007ecc2d1d8113a37cf9df344deff257c0033c035f3f1e435658eaacabd73af754797e75f41ce14b6b3e6385ff282cf9e17bc63e79f7bccf762799f7fec2bfa712eb9d9a71cf313d7d9fc48bedae3b0e9c8662cf387fc65fb8e077c78935343223b1ea95dbbfbf60a89e7aca1c989f32e897d30c3c1fd0cad6b5c7f9cda4c4f8395eb7090b1da31ce41610e38626a61d1b01ffd63e2f5699bf928fe13d43696d657ccd2bf9419a9d5ff8e77f07bcfb8d89617dbf2625bd239bad89635d6cac5b64c64eec5b63c66ad5f6ccb8b6d79b12d3fd9d85f6ccb8b6df99e5a28fe8e0d73921aeebbf1b36af16a435bb983a2fc979c7c93837c27c95cda231cbfa778aefb99cdab63ab2d787684f3a3fe7a9b2872bf3d711d5d09806f631e06535702936b7a24378570b51ee26dabc5bccb62fcef887b57e70e80753903121e043c2604bf8b9f8173ac76f18a2b77abcbaf5caa03bb80efba80277851c2bd2ae0f3fc206787acadcaf53b0e701fd97bff9db9572fa7e20cc0b1fc0a58957ddfcc49d73fc6e3ee3dffd4eb7d6b475fd6fabf74ad4795f884608a5b44aac52db4021c5c60eeb04e7f49f85ad46b9c3b8ff96f94a5dd99909abbbb79b214cbd45ac5675757f23c9b735dd36f4538efd84ff305d4ca298c2e7c449f9a8fe8dfc2b33333746576761c3887f7d157f077e1f139d20f505fa6d2b69c280f88eaaeb15e5e11f3f948620495f854a6ea1cb4ef674052a786b60aba12be97c852eddab5b4e6c4d2cdc0eca81ed897632539d77bd8cc23b815d2364909b7cc7e9cea8463701003ab1db78afb7004deb700777a20bff6e24c15cfd631e0d810e985e41d2b97be937ec6f2df33787909a630ac87752e6c4f055d484ec5354aea5c6e630a15f9098425e61d6a0bc93b6a720aa4da767ebdb7449fcde2c8cbef674dddd4965a1b471253f196b3e7c34ccc4e374467e997f0f9576b6fcd989712389dc991f16a7a6fd6dc629fe7d1316a06adbd9c9c35badfd831e0fab9ebba2cce03d03bb4556870ad498ede3706bcba703a72f3c877a4ee3f194603efbd670de9d86fa53c0a895c91c8f515e5f8069d1f80ea98f19e0745fbbe827c8bdb7c84ec1ee39a3e65729b835539651e682e32037887e2501c083827327461866c38d016225373b08f03db7712b2d1d7c4d791773e148f01edc311e776d63e3a9ceb5707f3c355ea3fbd7615739b629e5dc0775d039daf526b0a7875738631d964b6b98a3e572803b2f45972ce741f95a579608fe5e46fc5f7a0f52106f21bc61ff521f587619c00e15bd99e5df57cbbf1d997d9a64afb225b3e65d6ee66c1b41f55dd1fc9734fd45723effd95747782c928eb639fe2262ae9e9d4e776e4ba8d710fefe774cc6ef3cad0fb8ca9cbf17c0c9f47e1fdf3683f3e24275885625f591a575171fe139c5d93059a0ced11e682634c6d0d6dc95b1ecaf1b2b59e75cfa96ab56fc73d436fcc9cff01b245b1af4eddec712df9dd0ec555247d7f2f6f54fc9c5c1f5c6e2d8cbdb148eab81f724a08a0db962966a67b2a5f2c6bfbabb273477d9b54db73aa2af7a83ce14d0df37f30d42694c1b40f6dbf099db6b042fb91fae2eaec49dcd677f30e4fd5c8dad705f11ee9958dc3e35e9f2bda8ec4aeed76fa70d8e9b3989f6acf1eabb3cff0bd457ee4dcf334ed432c394b7339f70bf8fce39a0e03c1b37965697090c689083f178997e0eb30e7628a7fb1664e74ae2ff4c2e75228a332d678d2e7321b90de7bc13a655c7376ac53f45bb82d78f9cbd479b7fd93626d4686ae40657c6cbd53d9b3b9374ec95ca7bf1bc783f1ec27c1ef5892b8b14a798d491ca8fa99129f177d2f557bcaeb4a4a34d405666bbbf65c53825313f3ba3b10f86a64e87d68b6055c0716e79a6ccfb434a681c47b24716e72adc8d2fb335013cf40fbfd21715d435b4f018ff68417568b499278f5ee7d95cf25c544fde7680d14ce0b0cce4d8d11dc7425a4c3412eb3fed92939054f56ef238f8f50f680e42c6db48f24e674b8066e5d41b7c2b533abe88e8f74af231dc0eb76702d4b1273f7df5cc215eb608e191a878feb44d6c325e0365ff4a8ea6b37d5f6faf23a590b1967c1c6925a91d3ce8a61567efede332e7ae07fb11e78c1bcd75abb17ccfb05f3fe5e5df9b06e592ccf4f83e1c9abd35beeaf4973f152aedff7d462dc983aa993b18f67b1a334676f13fb560dfdc5b5249133891f6885beb734390038df5bf001dfc5b9de249f3bd167b6983cedc52535c593da7ce8590c8839cb2531c2b55008cf1c1c768ef019658eebc7f0cc113d8c0dccced9f956537c815fc04e4f73349ea8467b612ce183f34a0b39643fd3b817eb4b35b125e973359ff3fea372d92b71c77ea2b1afa837d59c0374cee69f8b1f34f65fc61f58a22fd5cc61ffbdb503b632b3bf3995ef2eed432a887fbd519da362dc8bde4be281130be90592d8ec4ae2c26c0b0b433703933b0223cbc76daa8fb3317c7163be1a4c299622b9ae021f6e3d9c54e24bfe9038b96f0640520bfd07bbfe4274fd9bfb9a85b926efccaea947b1beb19fc5f421d2dd46a6662e6dffcdb5f417d7e1c44d17b5856b91baca7acf4dc615e7e5c8b02ba9a1e1ab135352275d092ef6fcb449ed652ba9df46b0d68ee479385f475bcf694de68dcdc129f0776a84f996b686dd8e3333b56b7a3fe92f7a9e29a918eb63b6ebc4fe2ff926440656ce37a1b59a3e1c1791bce7247698af045b9da21c93588b276b208c2d3d8967201b671b3bd77bf3aea406b4be121ce21ac8cdb8267e4031141e68dfcf8ce904cda307a63d9a7fd8c47822435bb9062f2f6dbe17a6f3bb9e6ac6358cfc7e9d4856ede779e7adfba2fa9705eb1eaa0b4b175973b09feb7ad29a6a87f51691adcaa9ccd97956e87bbf823e56dad6763dbe954cfda5b23e16eb13e7f395a7b02f548f3babde3e015cafd0e6fe44f978a56dbdf8074ebf3fdfe31ff89d1884ad5ca97c66bbdb7baad4be1017297c34cd0b97213a0f4cddc4e734c5270479b52d4b6c1bcff61d788815a886efcbb44b0fedb8c1d60f5ea9cfa958f8ca35b85688f3b925311a0e04acc3ecfa68d1be676afb67e3b61f81915f19baec81528cb4e0d9c86ed1fb5579325ef0733595c11c751da43b9a8129bdb9c640084d4d99195a33b03986ae0352577d88f317e1786b93901ad34847737c71ee686f333b9ae0ba3006d5416cbf35af5ba398f6f963f8040af824d2fba8907b84cc4d364e188d9baec2aeb4a3db9131c2761aa927836412f06d37c7175f7d6f90b68c019a933cbd6c778f3cd06b2bf7698b37dfd6df8ced2b7b2490777369fe8833e03d257561767ae1413dde9cf9ec4beacad49a133b120ef1cd057d7fd19a714dd8d576cf74914dc2012e8cf95202fcdc831c81bafd5a7b86afce8f8c01ce0d4d86d97c967b7d3b7bdd437563684e3ed7e327d20f1c5df14c2e93573899cf1a3a19928148b6a3fd7e76bb09ed3db4de901de87c050c0987642392736200a627d38ba78e062706f5579d950b9757917d3eb7b4029ed34fb4f62bb5b75dd37e257ac191f66b8c71cce4128740c23a40f69c96d62053e7e4dcbdc49cea8edd7b624ebfd38602923832b5d29cb097f4391fdf53999f4b12c7a6e62d81847471820f413ab58531adcd695c03fcb92d0420153baaa923c767fd11b6547c1697d7d436341662ae3169df86a8625bed7070e07afca6eea1be06601ad74317587b2a2c6deecd35b4e6a4db513771be3eae379967d394e5d271e2b4302ffb623f1ce0731d8d0d0d3d9f2be274b8758505c8469f4e4e854ddfd1b12ae492a775a26af15e89c4c19258859f7c864392f7b7a13541fcaef4e8eeea5df81e06e76fd4e24bdad5853e28f718da7cb5f5bc3b6e99fda93886f73353f7a0c1ab8ca1c9737330c17281d48bd8c98329e83fd52d6ad88bd806cdc7ec9f2a563731f53ea97f709ab58d7557b31a5f4a277d6dd5f3caf65b48e6122e0be2b78f63d0e87f9ca5f569fd5f19c6fe3133f6ff11fc03f107e80a8cd7bf9d3a3b6a9e6bd3823e9c68cd2319bf9f275c5947a3e375ba5ace99faf1e1dc6a24062cecc9bafae730e681f6d9c0e6095e34d647523cd1a97397e061e331ad997f13c7ad8fd051b275fb43bf27bdae7acefa0bcdcf67485c14c96a6f696968ed8a21e03047c89cf2a932966ec2ba9c30a6b6ce5a97278a2b7b4b276243647f548b2f2b9eedf7311769067f4fd138e996a42eba9d647c1766b4427a6c22ff2807eac6d1708ee1a68bf939f07a09012fbf175be1018a0fc078e9b3737a2a33c0c11c7c0bfef94c3e93b2b6d6b3c78ed4c12ca915185ca91c7b88afab783e511922d07d45e25a86c62e91ee6b732a67225b2d5987adc4bf590f0f4265c05175e8c5a85c4e099e7da8c3e59ec9868e752fdc576c3f72add046fb0bc7a0b63aa6d391975427c5f7d4afbfff5172eabf13ff52588f7e779dffc8e0392d92b7499ee850dbc658ec8e1ad912d6cfb0fd8c71505a13630e137d8bf4377546af5cb226f1ba886317f15ceedbee75e5727e2e5e46ff6d5ef00ef77a91aef248b856756565a0fdd81159435b07e6146e79e9094ef2bdfdf877c5cb3e2eaff7823939774ecac9ec97c3b94467c8d9f39be9f9f9e9f52c7a5e5e726b3f7b6e6d7ddeb993d67a42d795ebc12f741f56b459b10e80e46c68e9fd4d576259d0e907367a1eb1d7a7b62faeac4e6fde95d681cdf737cf6d81f8d7f49e6beafd715d0c4e66fbaa719b4680c3b90855c680e43154f263a89ec1b9ee2bab3cbcbc11ee579a9b11d89140dbaf4eba92dc44faf1dbf6ffc8860dcd0c7f49897e9cf4e3a223d7d091359531b4bee7488f47628b59e848e2c4d0fb5eb62f17225b2872ce9d7fccd1f77e85b3aabcad3573305968fbfb31c3ed7a2dd139425397a779b94280eb07e6f458fe767669229b29fbd92343537e3d6bace774faf9fca565181a5f1c5b111b124edbeed1f5a5b2c634b5ce4fc353a6b12bccc75912031bc4d7e5e742e563841fe3b59592ab383e0ca7c0171974de1803618cfa05a4d6f499c411b09c7fdeb549d3bc9a0c8884119255c057e68ed68766fb7e96cef131dbc406b6a51643e4a138079d890bb4d604cb46ed25c0b2bf43f2eab6e7434dceb3640c3f843f6196ace732b9ef7b4df22cf5da69eff058d4b3a7b1ce87c7d7eb4afda5c1c773d68a763f9b91a139e4efb6e7193ce6739d77a5e612e95a06adf186fa88cf09499d3c65e75556e0ada56dc69c192243af656d7f12eed6edca94ff0b835bb3e6b139315ceafeacfc15dd1b838e3ac9f5f39461a852f71fa18bd2f57122bc8ba64666b92eaa10f9bcc56b57ae1df348cf05499dc7b143f24e7543710a11e0d61b9cff4a64cddc217ecd9ab583e2f3e743f6e41870ec8860de8eac9391dc9fc921b179d6e0b1bc3e9e1db1819de3c3727485011c73e43e50589bef2fc109639906d70a0d1f9673ba4f9425d0905ca071e48ecc66e8d979fef18764bc53eb8eee436847026f492a6361dc12cec79f01de26dc3f49fb84d0d1d68ca50b7373703f23fe7515c7049f060267eaf226e6038afd723687f3c2933d521bcb81fbfb51b604d225bc65454ec278fc62df6348b9316b9c2bded289881fd3223ece94ec103696d46281f482b91c2d3407d21ac9bbf79d155a93ddcf8349eb588eaec067cd0cec690e2e25250fb371adf22f53535748f666e978c7e55a67edfd0c6c0de101a8b6feb56bf745ef8538cf5f5bc771d800f8fdc0e088fe45f11b5b7f72475e824e0fd73373b4f504f30a7414c69eaa63a7a322bd15e7ec607e026ecdd275e1919c7ab5d995c40863443a328bf4028cedc232bd3f333518753b891e97e87d7674ed0e74cc858ef6e402f02f5bdff648f0c074b26d7fa747e25c7a9fb17d38723056a1664e371993a2fd35025c6b6e6ae23e97cec8e0d58d23b5c2d2798aaf939c08f0ea2a833721570fdbde9b9259538c33dd60cc0cdf8f1c4d611c5d8eb118106832447218c73a7d35ae2dc060ce89d4bc1ece5dcdb14bfaff21e7ebd4f65bac7d767b9dccd157880f98bcbc74f493716706669b8de3e54bfbdcb93e9ce20169f515f2afc786b69e9f2acfc1964406e38646bf73ec59cf910a6abc7ea2358fec3ea3a06e6e4d1fff51fa6ab2ef4a302b89ce27c532a592af84d83d92e2399238079cb3796e231b9c3e436af9ddb617af1568b6273b321dd753e70c97b451d810dc47caa6aaa57f66b7fbc2855d841956e6c641bdd594bcdab567e8b5d5f11eb1be467242766a38455d893ccfd24c7a0dc5967f28b7cb07f18c4c5378d2b3e79d92777f05794830d3cc850be4ebe2323c7b7a76be1b8afbfb02635d8cf3a8198f22e7d9b9f113657afa27d26d89cd75b2f18693673dc682b7a2f3e7b18bf36c5e03fcf389e2aec5b64f5d191ed7d1fc9d635fa6a77fa2351f1a7a7f6c9d8adbe9381c7c763c3b23e642af4bebfcd5eafa722ab393a333a5be338d85c02ff30bd5c200257df9983c2c053ac85ef29d7c1dbbdc3ea173c506001efa647b59eba06c5e0ff70ed14fa575ae7e9abbbfeaf6633b2f65dc0585fc82f9f24b5e80cc7ccf3d9950900f996d7fe371c57953bf8d2b9d623c3eff1941c6e948bfd389e2123931f40c9b3dc66314f91eb2f167cacad41462abe3981c1c5bed9d381103a22ddea32b9911e018ca0b90c2a5b4bda4b61db2850d6dbd34a3896bf82af68bc7788dc3ba6d65388f661ca7ffa8fa76c7f238e5e910234b7b0963de12c0cbe7de63c5fed24f646b94e88bb5ed3a8c1ff3af7fe7d897e9369f48be95f8a0cf22dfc8fc1763101219e892755d2d977ae79e1d8c4b4a7e49142327edf18db7bd243e7a809d2ad6c5b04cf8183d0cd7b00e0dce0b80f412a6f5d16a3c27b11cddfa25f7e3930e0799b4ecaf9d87bc9bef18d8511a27b8721dce83145318389d9e4bfbe23e499427505217ce9e7fddc07156b4766edde42cd06ae5c765f95b2198aa99f54c29beab691ec4a8937b1720ea9e3427f7f00ccae2f5c07ba50adeeb81acf99db9180d0764cc076ff5ce5f23ebbda73a7b93f6b1556313db18cf237cacb13e635e8624162173702247820f2471da955a78ed263cbc89bcd8dfcb44e654cfe7bbecd94fbf674b79cd92b54038c04fc31793e809c5671f3da377ce2fb9b9c73955d51f4178f4f69fd5f6225373582089515752af6dcc2bada0b334e84af1fb5b8b8cfd568605a5fac547d5b7233eb74a713f98e886b530d9b6af4e1d6ded913a1869fe28d2b7544c50ee77480d0cc035696c90c5756876f62aad9b1ceba7efae61edb72213dba855629ff1b575b8a0b6f9025bde2c8c29f4529c23715e74da66c4d831cc57cd6debddc4fd073c5aa3f209eadea80b47cbc2d5c67b3784a67e9f27133c9b5320c0bc2b9958c6642f99384f1ccf4136772696c1ecd892e0dc6cb3697c76a578fb9eedee595a139abb36386fe9fd59d9b9946ddf93da43699e6f52473dd691d5c9733b8dc5858c1d09b42ff73393f2312379f3b4833d173cbcbeb5f506ec9c191f3ca75378c8f593dcdb5c9e1617aa5e57f4bf8843e958ff8b33b3b43d198f6b5325ef76cda9bc04038a6fded6a6729f32f09c4fb80616c65704401796f6b47f88e92db66160d2970fc3a15c706f17dcdbe7f64d7d06dc9b5da18ec80effab18c76af6cfb3420ea3844317bd2fe6104b7415dc56716ae8488e605ff00a709060c149cdaf0dd177ebd619518a6b8cbccbae5c7b766e6dcc7dbb9a5c5b5d2f4c78fab65c37a41e1ee58042cfc3fef4715cdfe583396127a62e203d66f37c502b2e25bf7674c1a42e837b585bada8efe202f0fd195e2b3bbcc370e1f8ad5fb13e8c743dac07bfaf5f499d8463f2fb120ee9ccda57e9be9d3d0616f31e7f7e1f71593d889a67d00edfeed9f30caad52cf84ce7ff2e87e869e680d40e1017071c801f3efe0e8b71c112c93bfcf46bbf5a7b6bc6a8e23a0947c51b93faa259bce0319fe971b8e02d8feb8503a9ee3a392907d271f9bcda9a705e14dba802e16acdae0997cf23417110a97c389b17a08179f170fef8ccd09a5333eddfd1c409e58af0c028ed1b48f9203a895f22e19dc07e8938ffdc572735b990626cc92556919ad7eab10a19020dcb9873eb4391a9b14bc7ffffd9fbd2e654b16effaff22fdf769e3e0c3127a6eabe08262246499c986eddea62b04105e51e47bcd5dffd5f7b00360808c6e424cfe38bd31d95610f6baf79fd567e2fa72f24934f8eb562ee687cde3fdd166fcdb56f91a75038cecfc8158df7fc744fcbade5b5cae52824f3ae228c1e9c6f35d5861c7eaf340f731612bd1a515f1a88cd63b4a533ec6f74de3f2aaf0a61f0d2918c3f65878f493c1914974276345387357718d3b73cb62ba23d28934c4f5a1bace676511c9c782eb7c9c5ffad8c51fb8eb9f2d5ebd210bde3deed883e57e4b3ba538e13da83adce4851bcea489ea2f197ae3d83796d657191dc8eab7952a0c17e6e70dd3b83ecdab72afb17e327c87d5b5dcca15f4557047b381e64af5ff97d847ec32eec9d9a6b1be5eea319e01c0b5e5a63ec63e80fd21869a3291d5f0d52f87e97d86b147b44341cd71dc23174d81ec632de158ea3dbe4dcae676e8436e6657c23407d6633e366e5fb0b9dc76b1d8def9fd463239959ae97c4c8e4a5198a95f7700d2ac2b208f555551ecc11b6461dac3111e3dabd37371fcee783faa36c4dc68de7793a064e5c5f2947240875798def87d8deae85d709e290b5619e0b5c2713da91f07a84a78df554b0be310ecae352f5a4830ee3652ec638733726e3ce21fd3633f5b80bc685016f6a04d9f204d2ae67e5c5ca9bf0dd0e907d0571e328ae5c80fd70bebca8664f8c55a5b3d094be6df08d0c9f747c4edf2b1faeb5c9099e75ad4dbed62657acdf6c6d0caf41fdb6da1cafbeb5c29e61df60ed55b9be31d88113ea8d97d9836b4fd98fea297badc5afcecfcfadc57f873e4ebc2f5f0680758eb17b8ff3584bf0778c290fc76affddffafffaaddd47cfdd764b1ae3dfc5fed6d6ed71e6ab59b9aa87b13f0d73fffdcd4ece9dad9187f9a4bef87b534e7935f3f962b5377e7d3f5c38fd761f3b1fb63b65a2e7eac4c67e2e9e8b7bf562bff2ff4c59fe047f0ece9e2ef25f8bf3559eb537705fe5ca0b764df72535b4d0f93dac37dbd51afdfd4bca535a93ddcb277f0cfbfd653782b43d18d7fd1ccbf687a44df3db0f70f75f6cf7b8a621a0c5dff83a21f28aa76539baefeb2a6bf6a0f7febee6a72535b05f0e54f936dede1eef6e74fe6a6262c96b58706755b6f34e89b9ae84e17f3da037d53ebc197b22c43ddded4c653abf64053147553e3e33f95bffef2758baa3d5037b581059e49ddd486e4c839778e66724b35eec0c7a5395fd51ee8bbfb9bdae37aea81c10c2766ed81aeff6c3075eafeeef6a626aec0373fa95beae7ddedcfdb7f6e6abdd4a577d4cffb9f2c1b5e1ace9afae7a6d64c3f956ed41986092f6569b6d160d9bbfa3f70f89bc56635b16a0fff4ddd5037d4fffc03f6dc99fc826b0496adf6c3597a931f2b7733d757d3f9bffe661a3f2c7dadfff835b11c7dfdc39eae7f381b234d1cc7b451bba9099ebffcb57ed3d74e82cea2df9f9626fa61a4ffb2276bf4f760b9c47ff5f4b5e9d41e161bd7bda90dd7ba3b8976157e1a4c74486de05a7ed99aba935578357a73f4f169e2477f8f26ab75ea6af055ea8eded2da80f7fd5f0d0f3fff5cc0914e17b587f5afcde4e65dab0827d25b5ae76f83bdfcd35b5af039d2e4d76a0ad787fe9366e1e1f6e15cc2935f3825bc57a5cffc3f373530beda430df044c49fc499ce4b6b15db587a7b40994fcb6d97f10f0673bb361971a9c9b4d3057662d0989bc0266c523b31681c54c6710df97916f37fa286c67328abfd78d70d1a3393edccba5edd37d9fe46631a4c17fab3c1fdad55f7f0bce935e9f0591b7d2192be85698717b7068ab785f9dba33ed5ea092db16eb203d71872234d1669d373a9c990eb1b7c6b23349dd1987ef48567d4c3d77a5ada43577c1b4db9117e4f6caf16fb79a7295944c860686b015bccd1f816a59ec21076395af5f6043e1689a75fc64fce0506abf9e0378177372116397a566b6ab01215f656b3e4ce8ae8d50571e85545737479efa89e8b7a6be6e273c518eb15e38ee45a7c882ffd03ed6ab83726e364e09c97b57fa4a9c1bb079d97e6d9350a7bc764fb6b02ffffbc793019cfc9f241785280fa539f371ff2fe0c9b786b32a26334e9087bfacc5c8e8ce764f6c38e695276e79f8ea3c43766e0bddf41573e39d666c57ce9c23cf60feeb556ec53f83ab15916c509aebdd6be7a9ed1d15a0706b3ff7cbaf61a39fd29bfd85ab39dad91dd77e49cb5467d827f830f5545bde0bfc17a433f50fd62bc1bc6a11a1b9371a7063f5e433f4a111f2fa3a7a1bd5ceb72fdd877f2f49c75ed895cbee3f50ff168726921378e51751ee1bf93e7c035596e6b2c445ff5f66e5739bd4ff934f08198563077ad15e8b9351fa7e719dd7f46dfb0503f2fa3fb66e404bbe602d65b67dc8f6d4525bee642f5e7853dd78eeb453a8ecaac6c607765c44573eba755a6b14ad708eb0af6d72f7ab62ad793b82b6d226744e955ec3d04c7b8ce1be3a57a1011e3ffecfa05ff5bc5661817c7b16e2fa6b3447de832e5cd47c680c9fe7b5f7fed891ae1df9a971eead6c5bc05e9b525eb15c9fe7a287f67c8ad0c684bc39e85283f2a59275d09ef068ff943fc387aacaf9dca1d5f021dcc5c0cdc49bb6f277bed55c16f806b1baed3dc60441af721026b457ef64cafb58872736491b2e4d6aadbe4360643fb60cfa3bc30c60ffb20bc334707fb28b15fcd523a7e5721730633fd2f01ace92b9733b30af94ff9fa46bc8e72c735c3fc25381f28bb024dde63de2f2e75e511d6c65a9e3b277311f19a6f8416aa835499d606f671e2c1ffa3dad12dd91701d19c7510da1c6dc2bcae7115ac9ccc7ead9a3cf0d5211debf2276b426957e35d07d7b2be6bcd0c599aebf233b976f13c9914d6dafbe649698a4395c1a52dcc553c850184ce61867ee6203e7c199d0cf9af157179a46766f4e44ef9bac7ba4cbb263b708c23bc936c5e2a415a05bacc18eb6103df90014f75609f6e8237b02aecd31afb79abf62827e755900b99d357aee3196c67ad2a617c058e796df1ee713e788c01896307b7cb972761d77be2ee7bb3feaed7de05af4f8fbbbf9bf6fe55d905f2e171fd2a51cb5e6b45bdb6e87bf92050e2ccb1e4c323fefc7c1047665d915681e852fecb70beee3d09ebde6ceeffddb4972f4fcff5bf9f3a46af49d595a18bfeafac82bff1752f4f9cd11b82ef767bf42efabee7ae76dd9163bd0cddfb97a6bdec8d5cfc9d6bbd48e8ff9343a7f13284e3daf70e63168ca537e2ee7b23c1ef0eed9d7c7886cf920fcf8182eff9fb49347a4fadb2cfa5c419b8e7791fbe073e03bccfa5f13c76875e73ee4b4d1bae538f06ef7bdc87ef7b192d97e07b51c2d70fe7772f2df09b64e175f55f5a7bb31b8e2198ff7869f9f772b05a2bc4785e5d726c699f7e67a52a22d59551ff685d4e9fcf63be3fe25b07abc9214c6ccf85980555cfc6806f51da10c58f109d411e06c722f0e158c2b357ad879b01c74713e32bd5bb3fc55f92b25383e3a5e13c8f6c9a08f7035dab4ced656ff608cf8208cec293700bce479296018df56f15656ff4667de6b5451bbd27fc79d4a3c5836bc90781518673ff6548ed7a532a783d4d77e0ba98d69e5a219da173d8a2fc1765b77c499e4d1f9f9b9fbd0515d23e3893b7e04cf5dabb7d6f3a27ce19185fc78ace1abddaf5a4b2cfed33f09ed173c119ebed5e86eef805add301beefa915d1fbebd401dfd3056764a9b4761b7cfdaf97d1fd525eec8d9780b688f1dc9163eba4e30084bfe0848c7826783811672a137385f1d1f89e38664aca8528ffbba23cc81d4b895ac5a9c18a3355deadf3e27c19b867286edecef3b364f380112d3ef5c73bd8b75c937776fcbe8ae7fd78bc65ce7b0a876ab05583e3bad30c5c8fb84ff873758cc07e727f93f52aed16adcafb90a7c23a2a639abe06cea5a2df269adbc7c4ce639aca887364da4d0360fb84f52248a75ffb4016c03e6f7c6366e13ae8649fb32ab867d9bd5bc8fdcab3717272f12bfb2c93633ff21147e3562e81a3b6c071c2133a6da8271fc51bf2ecdb36c653c0f5272aae85ea36a11e086c121a613b0fb6d9391f51edf40af6ea58f4919d8b7bff55d57351cefab5775f799acfcf714ff2b53aecbf6bf2ad59951ad03ea60793e51c9519dba6223906ef7a13848f876c525857fadeb3fb6fdd83f088b718b2bbc98867ed533266ad2a4e46acac9fc680276a1e4eea345cb246a15c1c02ed71889fc2ed54d80b1bf10c83e5b09dbeb335c5d9197c6b03fd338b39ac3b5595ceafca3dae9375091f585f5d8a27bce6d638e7d05bc843c87362b6a5c0e41b87d02ed2617feb3af47d598a48d69fee623ebeb3510e3bf4376e318e74c83bdeebe3baf2c4afcc134f601d257344c36babf3c448470b750182f7e9b01e4ea434a5e39becc0578fce71d539fdde387378e62fa493e158fe697c49ab3db75ff846a031ad8daef8a1cf119c6970ce0f102bbc242f4ee566d850e75506f56e93737505630b32ee4663a595aa08f60bf49b9f783792835b8387b8a6bee58ded179ea68df6c037011f6883f500ba5eef689cc51819e11a5d75baf267245aebcfaed345effd0ebdc54e8fb562cd6223d0f2729b4ee53fb29dbc7d2cd4413e782f0bf34abf101e54719d72b3223e26a9377e3e1e54520ffffa6b5fae5eb9e21ec018653e76f007ad7d716eef175af3e23ae58a6b1ddb5767d69e10f75f0c731be93b6bbd440c16e5d772432227a55c2f96246e90837c4f83bac023ba405834b7b6214b942a037ef05c11db0b3d0fd54354f7b183753299746d4b966e185e5752f7c3d7c37e13713f0b4765a13d89e3bc59391bc5f6b699338e4bf59ac17ae6bad0e63e59cb8de71ee24b659d07c6d99a8bfefbde937a46660d9367beeb1d4067289c4734d7cfaf5922dffd2d72f5ca8cb7aa0c633b0b55aefb138cf5fa3bf601d1c8f7d8839363adb8fec01e87762ef3e9351f40e6c13e55df61dda375ba149e08d0076477d5955b730df531fbf41a274da61d3dbbef00fcf7857439d7905bfee5faef0e5c8397763adfd868437a63c9f414c8cdcfae7942efff163e8025ea9171199e23499dde67d3baa574be459fe9c271565ce76b5df0a7d70527ecfccf5ef39218635f67ed4bfa71aeb5d9975cf3cbd666031dc22cc0a02b81518fefbf182e2fb0194ff943de4ccf720ccfbdcbb6e173e291f2ad9db657503c67ef6a4c6b25a0d80735193e2e015d0b7cec477819ee12fd8f55d8df3685115329170dfad13f265e4fdacc67e19f80b1d118af3c4bff129706dba1def50e36f58cab6d79b52dafb625dea3ab6d598156aeb665c473afb6e539b47eb52dafb6e5d5b6fc626b7fb52dafb665916d79aa8eda4bd830d665e2f564fcac5cbc5a9577f6b0a8fe25a7dee4a8de89d7b6e614c6ef713ed7e3d264a599dee41c13f53e7c1bcfc5cea039b72d45843d9fd52107ec605f63ea0eaa4d4138b4c7f9b6e562dea762fcef887b97c70e70ab620614f4d0863dc5c9bdd9d9b12ebfb3b10e0c7b1a85bda811f62aea7b74811e579f507bd5bf1466008ce597c85549fb662e4aff301f37f5fc4bd37b6c475f69fd3f94d6835278422e812dc257c216da198cbb81d861edc116e1b548b7b0761ee2df885bb33d877b96c2d2c1b94c8d5d28bb04de714cc6b635af11c0ba638fc40ba85453185cf188be341ed17f0acece5255c4e5a7e78133f01c7d077f175c9f33fd00d5792a1ecb85ea80b0ee1aeae525733e9f518ca0149eca425a19cdc7a5c14b0b55def9517f4cc04be55b5b97eb735dd17cad2d39469a8f9da8b94ee5669e81ad40da2427b065d271aa0baec1510cac72dc8aceea655b2edfb720eff4887fa5e24c2565ebcc60e835ec3b08dfb1b3f13bf167c8ff1d95ed6c8d85bbae96eb5c389e12ba5087886b14ef7f3f8e2994c427e0b61077a8c945efa8dad33e1edbe7ebbd27f4d92c8cbcfc7956d44d4dbe71b0f816116ff90dfdd1dbc21ac8d26fe1f32f37de8a312fd1b7daf333e3d5f8deacbd853ecfb363d414a0bd9c9a357cdee899c10c72e9fa549cc700ef90776b9569cc73f4be99c14a1babdda99ff90ee2fe4bf64e1e045d19e8d8277bd573115fe1d1f525f9f801c80f03eb98e199378ace7d09fe168ef90cde3d833d7d4ef16dc62d8b29f3846b912983b5701e8ae51a8c15a80ab704369cd1e4024db6a08f03da773cb0d1f7c8d791271f8ad700cfe10cb99d758e8ef77a64417cb872bdb2d1b5bb10db14e2ec1aac60ab40bef28d85c14a874f589343e698cbe873853c204b9f4572467816b7da913d9653bf15de03e8a3e577c630ff68e0627f18cc1340782bb1ecaae6db0d655fe6984a9d8b6cfe9475361ab4b1180465cf47f4dc0bcd55cd7b7f29dd1de5649c9ae300e74d94d2d3b1cfed4cba0df31ede8fe9983de69daa0c284de984fb31e94ed78fdd693a3ed48972158a7d65645e45c9fd8ff2eceab421775c730ab1e0284ddebb26ef6c8ff9f8295acfbae7523df2e375cfd01b33f77f086c51e8ab930e29ac254f68e3bc8a68eeefc58d0a9f93eb83cbed85915a8b40535ab4ae7432fab87186d0ece09c19e152be58daf476a7e48e349e973b7392d4e9617ec26a32c4ffa0b04dd8311603d7f4eaaed5e476e03c625f5c953309c7fa6edce18514e8695d109e91dea975784ecdb9a4ed88ec5aa13d7027ed010df1a952f658957306ef2df223e7ca53d287784296e662ee17e0f9873d1d869c63b2e256655c1c2742f85c285e02af83988b04fe62c59ae85c5fe815cfa5904765d07834e7533620bef79aeb9471cda7e73a05bf05db82ed7c9bdef6a677d15c9ba9aa88ae383bb7df69c73199312366d2e9efcee381f9ec17c9dfd1f9d6413f896b8ce240e5654a282f060ed17bca11783198281c15dbae3d5be3dd850671dd2dd7f0a4405506aed6e4601f58586b12cb3432a701c57bf8d64a631a81ae0c9646c57c063cef0f89ebaaf27e61b0e04c38eb72314914af4ede575a2e891a983f837ba0308eaf3236b146ee41e0810ee73299fdcf2e892978b17e1f7978841dc7e0adad09ce114f5d2eaf81d997d0ad60efcc32bae3333eeb4007708436ec658962eeded84658b116c498c171f8b04f64b5bc0438e6ab1e559e7689b157e7d7112d64c88283ce3702ab9915c32cfdfcd433ae7ae0bfb11e78cd79af44bbd79cf76bcefb7b75e5e3be65213fbf4c0e4f5e9fded3fe1a128b1763fdbea717e34153509f8c743e8b199098bd75e85b5595beadf32d46437ea01df85e973bbe01ebbd39cf600558eb8deab9237d26cec993fb36ea291ef5e603cfa28c10b39c6f05b0170ac2997327ed337c4699ebfa313873480fa37dadfde978ab045ee037b0d3498cc60bf5682f8c257c705d692186ec575af7627da9626e092957f331ef3faa96bd1476ec175afb927a53c53d0072365f2e7ed0da7f1b7fe0097da9620dfbefed1d10f3ccc1e152be3bd2875410ff1a639da364dc0bdf8be281731de8057cab2ef0ad8dd6e436aaa2f91a73468e2c1b8ea97a9e8deab50eda48a54ee65244d795c0c3ad962715f9923f244eee69bec14b85fe83a4bf105c3fb6475939d7e89dd93df570ae6fe867d13c17e86e534dd6b6a637b675a56f5b4ceb2080b1300dd45759e9d9d1bac2ba9c8e2bf0d25af5a4b9c64b73817737293f6dd47b598ffab7a15c6b8b771c58af23ef57b827f3c164dc85e1257a8479babc7785b6b5d4e45b7c3f9a2f789ec64b30d7476b5689fd5feb4d100f2c5d6f827b357d785e44f49e8bd8619ee8c73ac5e99cc44a3859436ea62b513c03d83871ec5ce9ad045ef2717f2577027b20d7c39ef83ecea1708ce6e3525dccc13e3ac6a287eb0feb309f489577b6ca76b626db5b93f55d2f15e31a6afebc2ec4abd275de79745fd4ffb280ee5d69a32b2d5a1ba66b5d2fda53edb8df22b0551989fa749c15fcdeefa08f9d1c6bb31ade4aa6fe525a1f0bf589cff39513b92f588ffb54bd7d6e30bd429bfb0bd5e39d1cebd53f70f9f3f91effc0efcc4188f94a69996dc7f794e97dd1da10f9d1b82ebce30279a0291a94d3383fc1cfeb6d79c2b6714ccf728f73054af5963eb6c38a72a90b7310f3fb4a27bfe70e96c2ed0cb643f634dda940e758f46d1843a8a87714e74696ca99cf891364facdc3be33a56c5a9226a12f1af2f08163025d8cb90d731c1dd3437db733b11d4ec4e3e3b19f5347e21ee03b15d15559298035300ab752e593fd58471345a43499b2c78c3403368cd59edb637eef18d3c7e59816fb2fa5ed7eb16eb260dfb983268bb4e9c11800ecc7da6d72074b86f936306e60b0a20b734ab07da23539df9872af43491c0b2db12f3cd9bb5e93dabf56ab253ee0b9accd782e6b13cee583f0170af037487a2bc46a293877925cf74d4572053ea10b43bd1fd9b5a8ff0e38478667da39b18bf2bc04f3784d193808a72447973de5778bfb1ee5e096d0907774152e3018689b9fa96bb96b13e53d00198becfe6c6c5d4c9bf4714fd1b3fd79279e99593789cfa90cc6bd77213e46a6bd595ab788681eae292fad019d14c4baa73037a6ddd91a4dda37146ea5615e46d05de5fd3ef5ccccdc4a59fcd59569c702b6eeb9eff55a333da0d7a8a646381bdfe658ffcfa2abe3bc9d70ed55c6714caf35b378c07b454a97c58bf9684f9e958cbc2a43e1606d3e7807f2d195e2e192c9603f1a1fce1ff98746b4f8d41fa39a42ecf3237334095ca4f04c5807a237bf0dfdafa846b4222ec2c97db854ec76199df5537e09cfa9a36749b756331143afe09b7b463eb700fa811c811f6c55169d5d54b34a7ed60255b6d0df4dc75159584bb212f8fa16d83f2ac697027384728c97e64732bb4087ca1c33c65fc7d7d2a6375f273183be5e7ce4b2982a15e445814ed5cfe40b65ec8d48ae1f727b61b3bd580f88ceddce26f00b7dabdd8bf13aa2feef3b5b95eb73a11deb8ae8bcb76656935b698ae61a47bef1133580915c1397aad20134ea9a1ef8ce9d1de9d817d2bd0859faf93dea88777f0bbbbecc789b15b18ea367beab5f4178ce8afa2224aee92ab8aeee9dfa123a1734ce9bcdd451b274f2ca3acad1f9bee6d0665c73cda1fdd26b7fcda1fdee39b4735519b85db9455bbcb3353df72e4b8f2a19df702c7ebc56158902bc53577c189bcdaa6b88fd40f44193eb07f00c0b7dc67ac6793c35e1df61a48dc9b894ae68f0b3c14b8c96dd6383d419523d86de6b7b277b1f67f7068ec70c6c3aa0cb75e5bd6b79d2eadcf713eb0bec6e4765fb27e63f70ac767efce3d4fb00bfb4946cdf067cafd27134469a9374f69bf203217d995e6ba1c97d9256bf11cf85b4016c3f576bd28ea50c80de43e00b5ea81fd1d1dad0538395361adf0a2667faff4e3d3383576c3465c01a6ce757576e052ae300bd7766b5a5e0ec1ed79e44594c23d003da313d7109f604d8cea697dd170bf93b69cfe01bec99e703f058a72b6b2b83cdc1c44be6ebaf614e5f91ce57c65642eb0778d071bde2d373d6b527fc50c76700d7a4ae72cf696eee7ad57984ff4efb0ab2f3faf3cf44fe39ec6c0c364b1616cc2195b38464eed7f389a46ce493365c761e04e9273c4bc65790c385cf3f927119b622d051e9acb99ee24917f61b1dd5c01e633745f132a20e3607633c37e69697eb04736f510d0d5eeb54bc0d623ee9bc7b288cdb558b6112fad047e5b926e2606bc2f75ba1d6385c632ef2d349e839a5e37289781ecead246a9167618e41bcf65a603054545b1f62e218ace6e31cd8447c0fe5d0c6b9ad55b0584bfa73ff1dfa09a47c39a5cfdb2bf435351dde92f7ab92f1ed31cc778618d01cf255c5f984e1382ae67ca47d5fef88fb23febdc698cca5fdd3289ffb713946f7f9e57cd3cf69ec6758e757e08786f8a221367417c6945a9480780fad2b0307c8f0e37a0194178efb6550aadc59614cb18325d36b55e9d4057eef9b6cd59ac03c7fe239b8db25ecd0137b41f0dc51527e72bd4cf959409f060b6d1e40a3be11e6a7e37c9d70cf53e3b455a64569b245d86ab72bb02f100304e5cb03bd3a9419fc50e246ddd173fdb56abfa3126b7506c69b6b2ca4638c14985fb6df5a197a802137e6c04eb5b272e93dc7d7187b7ae44321e47a725dcbcbf8d47d15b01add8d1970734d1938babc077201e82d94c067ee335c332493c0196b05803f597c03f0e315eab721c2dea75a13c50dad76c73116e25a570614acd758cc8bcef2cef45c4695c57aba4f73b7c93986d7b7a1ddcf8c49bac9caed617a67c7988afb435faa96f79a2f7aad27fdca6b7fad27fde6f5a45e8a7f2a603e9fce6b52f223ac4bfbfa7b91f2b947b6e027e5aee7ecdda572beb2e7568cb197928badac7ac19cfcee102f6b01f53da073ac80deae7a0dda6a725bc303f66d624c610d21a9cb5306db817a05900b2a037bdccfbba8868d32bdd6c66468df6a0f08ff43ec9f48e6087381ae688ecaced3ef5de13a624a87b92c1ca6675c47fa5cef8ce9be3da61fedd7a7c75d77a4ee2afa3072cec31527ad022676413e483a2f3a4953c80f83edf3f2f344b64faa36399b5edf8bf75d546b519ae71e9dc18c7848261d16e63a5d63057939a419bc7a7caab62c7f7c404fcc3ab7a93528c0b2cc9639d73ca0df9107343398ba17f24755de27e2f3679eef13cfccd6052d5e5aa4e21ce7d644643f2b33f6ab39babc7754cf5dc19a2139cc033d37ee9bffbc737a1e64cb81231d26b3c6418b6205adf45832fcde754a93ade0d47545f3bb0cfe4001af3a95f39ff4038de1b97c2eaaa1cfd105613fc784beb0b7c01a826790fe21def22d4fda90b10b35c47589634a34d60163ddee8374b40fec2d5da4a75d0ac702bee34218165bc3d3c278a083b0f87278ca311d3d65f02e7b18f2aee7305fa9449cc085b11177d2e6707fdf30b71cea68e17820ee8b25ef511d69182783fe476993cc3183b18199c1370e96d241f197b40fb21a1d9de0d357bfe2bf875f11e2f09f294bf1bdd9f97c2b400367e751b2a26bf0a85e275b2768cdf58574b0788c1701ff4ee4089c27a3e5c1ff5a8a48a1dedc34fc3bc1bbcfc248c5eb7499b82ec4bbd1d84e812e96694b46325c788eea592ac7d034c5d9e17db5715c0ae3ece071400c006965f1d066f64cafb1c67160daf012f9b5b62137e689b57d3fcfca599b2bafbaf2aa2baffa0dbccab1bc966ff0ada95e683b666091a46c89dfc4b3804e1558e133217f6acda0ef16d5a66ecd29d0e1c721d658c2a716e57da4785aacff57c41ecbb7af3ea686f0ea6ff96c7f0bc4c13cd3af82efcdac1124f8d3b9b5147b6ca764fa631d8df769931dc03aecae0cff2673fdcee4d9a7f9e619b664b84e178945c1dafd93b127c853ed11e63d2fcf5936e8ce2675341c17e252fcb35c0e1ab22d613f49f09b0ae33f680cef7af7056ba2f1ba9dd14756da583295993ba979eece0ca8fdeb68be46750a4774eae90a7740f959f4da6006aee965f4616e269fa5f3ee4287fe87a3fcb66cbd21338f2d3c3fa1fc7a5cf6b3fc704dd41314ebb0a807f3738b516577a546bd03caf53090509e527cf69b4e96ff62253c933e5194f79496bf2fc9fce7c83f81e569d51c43821f95c92b4cd1bc5ca78da3bc6678b6c9fd857526c7ba98e69beddeba379ad7bb320de83240fdf60b6965a9cbd612f08ce39ef415f85e669ffaf87ee1f9f8fe32fb3c94239c83785d136715fba550af325ff3102687d54ce83a882f66dc877252dd0381a714e22e1ceb9c446ebdca388ee1596ef59ef9c56b7a06f659712d60f91cd44e48f7a3ec9cccfc73c83760fd9fc1ef123a28a99b16eba3c5febe6e9303fc8c5c27c43bf8fdd6c45818aa2cce34453c600c9bf7d8d915ea4e2ed5eb9ac06e93b14e0bfba1d0597ecab3edb84aef3851c71afa16744573bb32c963df5fd75bf4ec13b5c6780f06bee58dd7699be202b5b6279e9f61939e59df90fbce0cb97a12f390c0f71b116bfb3ae5b26466595c484a553a0b4d89ce063a8759e3cba849ea36114fd69a1ccc5d86bfa5f2d3b3ec4e0bfccebb9b77d65f543a0b97cd4d276574769e7a42d72bcc59279f959bbf9e3757d29f58454ebc11f47897d4af4af789c098a774322e148f07e3ac26f67885f47ca0ef37a2fd4fd54da0e724e3a1acae0c967ad80fe04cff4449fef4dd75fe9c39a675f493b50fb19ef54cd0dc6879a47b97ad3b0a317b23dc04e4af4a8d2bbb1e0961d0f509bc56d1351622d85b06f1a763df3cea61eff8469a6f9daf4b9c901ddfda5688f1214ef091f0ba323226c42b563d29d4c9a1df420de3e24d2e7c6f061e5ad51a93101fe343e229709c25eb5547f8daf258b1080f963617088319fa3e2156447d21b4c3bae8f7f63cc9e653b15c837a8d13612567c75ea6965c9f6b8ab0d6a0ceb0df9ac8ff958329dfa10d2043a6f45a95fd2df87fca0ec8bb0fd512b2a29f932784e7d4a0745e0a8ee919ef6b8c157d9e4e4bdc7f862f2fa299cbe4869cc21429d6214704c68bf09cc678391b4b1c62a71be13ef0c9186a410db56f06715da32ed7971a945b3d5b655abb501e401d1bf7aa34810daf88de24e9eb89f600c699dabd8df0dcda18ec60096bb1792930629902de09f4c399a67028ef9d7f06fa2ed0d13624e629e00716d08115a122e6e9a93dbae6a27f442e7ad55e581106c0c225f06f39da5c70b0fe11626cf2502fdcc01affb67420f3d3a33d69cf57103b1ef26cc10ee92edccb2ab5ffd79ce2ac6baed8825f7aedafd882df1d5b30ee7b7c2e9e5f713f6088cda50d495978769c371b07f1ebe97d79b9efe45a975ca7cbc4814fef4186cf31d4dd8e75457b9065df14e5b8c0eb8f308b024d165d5dd120ce00d4fd8e709eaaf6a1c99a6775bbdc043629d01d312d2a537bd99b3dee7aed5d203e3deefe7e126e7b4fdcfdcbd373fdefa78ed16b52756568efe443ff5651f6466fd6675e5bb4d17bc29f473d5a3cb8967c10186538f75f86d4ae37a582d7a17bffd2b497bd917bdf7357bbeec8b55e24f4ffc9a1d3c0d72d7badd51e7cf7f7530bbd4bd905f2e171fddaa2fc1765b77c69dafbd7f03b89f2d1ffe99fbd05e577e1b89e0fe2c8bc5594ddbed7deed7bd3f9fae589337a43f02c30be8e85efb9efd1ab5d4f2afbdc3e03ef193d87ef81cf900fcf8182e7f1f7536ff7329c2fe5c5de7809688b78c61df9bcb7207d963b47fa7357ee6c81fd09f1634ee668a569896b129861e5fc9c7cea7b8c1ba42bbdc8b6e9b05974cb11f8643b60cf87f18315b05f60ff25dcef23accbd078d7d1d88e63a0bea98ed5e47c83dfd38046a15f07f94f8e6d0a3e5e93aab1cce2f5fd105be58acbfd957489abee7cd59d2fb0f6ffa1baf35c975b0bd36b65e7a15febba8b70c87d55b60255a6be5e1df7efb51d8ee4e3657cc7c47a17c7779e439a2e1bd7033a8bc93bbe1ae296c5d898d0bf6a79eec1925b2b9837047b94137dd38ee2c38d40688b5b431edbaa22c2dc231cdb3bf6a515eb36f3bc795cf5980ab4fc9fa9c75c65e8e7c9d099fa3e3c16e2fecfc7f03eb3c6db217968513db79a8ddd9dcb8bd545c7d76415c6d0424c4923e022bd5cc3b84d91ad59b5c6277aee39bd8eebaed5b6b6a6b702f271a6f32e05782fac073f15bb8cfa01705cba1fc03be29689bc1060c7c77d07b874df01209b76a1ce65b4e7b6c94abbb80f28ac61a80b7c2867e9286ea9cbfb95a5803589d7bfe03d15e38d456b7a957b57b977b5df3f4e0e5eedf76fae7b5cedf7abfdfe5dec77c7e29fd71ac2453f51cf09afb5075918ea15e31cda905b198ce5ab4c6b25f0b03752959c7e9c47d39a995ee310f6b455bd066d7803c784fd372e181b5144178dd13a54f51590bd9f3ea6f7c9a7614f5e713faed8e75f7aedafd8e7df1dfb9cb07173d6bb84ad899f45fb867b2c037b59e33c558777ac0fff84360dbf7fd3b2ecd4e663bece5c751ecd48ce9cb07b43bf4bc15e148c07f099ecb926e65cd0ef09e6c967c98d409369c72c384327ce0271ff39b83e69f97899bc27a2efc83af6d594cb978ff39fb2ee2d837341c64152b54910277db01578676b05e95e6fee01e157c4bea5f37bb9d1912e55a23efd1df5cfc5783dd1595cb8b96731db7e79bf0f248fb793675b553a81aaa4eb4449de43f4632d389fefd28f9a157bbf927274f1c96b5ed2f7f185d6be9c9e54710fa05ccd8d2d7cd4da17fb40bed09a17eb4715d7da5244d7cca7f3127c0cef99ec6e327c2efbac6b4fd9ea476b8d7c742be339cf4797af6f569c4734c6137b409b0cac8ffb5abd753d716b28dcd6f060cdd6754fabede9cc60e89dc1d461dde597f3bf31526079eeecf3f500c01f345fcdc6d1fc6abcf1a0291d46977330f1cee08f262bee309641a0328d8d816af6f363741f144b8078fc0aeccdb081f803dfc42f5169dc95f726ee7f68019ec737ceeecf9ff7ac2f67d32d2440e317ebab05e57ff99e9d12947bcfe24a55c4234c805c8c0ad4c368ab41dc54298863f890361c951d1c10ae849dc22a4860e1c09eb9262b6e55c67510de59676bf01563fb2c58bfa3be0f17b2d7883c93ea7411d9c959584e3adf08ac66d817f93cbca6e4337e6b2fa7ab3ffdea4fffd26b7ff5a77f737ffa02ca86b52e0f3e7bbd0383d9e3de3b5f7fcd4dafb1d2709df285f80c5947bc36db1ddff2dc95265b9f9e6f96c4cea4619f6e5ddebbdaf7b06512f5b65d05f6fff40d5e5a9cdbd3f5b3f3784d4fda5bb21b64f5589003f03ba6bd76ef52bd0788b377220e01dfcd25b15b5a1d57f3a44093ebb39275d89cd026ef8179c128ee009eaff46c64b7e33c56dc13057c5731f640ccab4cdd750aafbce81c14e74af7c96bcbe11213583601e7086d586f02b1a908bd9e1c83adf3d28aec7f8b6c929dadcafb2dc491615c4a6f66e8ff47f935ad8dd66c6ccd291763a1f1631233917c6fc59ce07cbef64139c185ba7ed23e2379c3a57ac5c6fba8350bd70df39212b9eaf974f321b9ceda42daa82cde3f85734d847f999163f6b172281ec7ed1aec398a59e6f48df962fa41e5b1370b7d38956584918d4155b8b797c90dd468c31371cfc97cda39ce138cef3303aeaf291d98d307e65719db917fb689f5b713eb8fb0839db8e7640a238ee44f58f6e84a0ff3566e66f0adc331f6e1091c905c5a384326318db5c937361003ff14e644e2da92f59368ec8077917efd30cf71a6cab7b6ea8d6d88b3d3c4787ba807e34a93691762ee36cfc451668838cc07f5e9c1e7a20c3edd1339ffaa986e184393988f7510788736e4d6a6ab745c551e38aab777051ee2cabd5736907b95d9e3bfcc1c51cff4f273ec0fb999aa0c5c8d690493b8a6698a704291de60299d9dc18a2e91c34b8ef5dbc8c46bfdcfb5fee74baffdb5fee7bbd7ff64635e973e7b212e734eec4d1101cf3de87267a50d6968175feb8cd2ff4efb6d4c96db1a0bd107b2bbab405fe9d7cb79f89a7883593a4a06ee60521667f4e78be8fc22f6ca82c8d338d5b322ca9128a34b1fe5d84e0d56a204beb581f9b7bccbe8f28056e59d1de5a80c2fd65b023fef6374683db7f76bba8f3289cf5c417796ebbea948aec0877d5f341fe118634cfeb8b716c44b2ecc852faf4b96f71bcd111674563e570e2d84f3a867ebc6ad8dd644fd4a0c0fda4f519f548c051dee49bddbe4206e27ea5715e29c877b590593ff1ac7feea3ea46b1cfb1ac7bec0daff87c6b1c5830963360dca60c4adf1c9be6bd8b3816fcc0c66f71d62a68975baccfa47fd0bceb46788fb3f5fc73dafbe8bdcf393f1c168bdcbc44b3ba91e648eea3568ab19f77fc0ef857e6aad09e3a9604f818ee90afc33a16356d42589397d4c2dfab5af8689f20b0355ae2f7e43bddad65cf4d7a6d7da7c93fc8e9dc176a8aed281fd722f154f3bcf764caddd89330fc62db4c27197a9d9b4969ad201f6c1cee4f7becab4a6063f0e7b07817f904e8712c7884d0eae8bd0c6cf873d0dada52e8bcba8b76168bff2616f2da92a36456aed3facb75990e91bc9ee6d16e4f8a67278427d8e7ae2473de0d0fb50ff60b4867c9d36e48e6b4e391ff05aa10df7d90ef7f9948da5a3fef07936efda92f794ae702b2dd43bb2fd656b68df2ab8efe7d363961de51a5e395b7c00785df9dc868ee10d609f6a0d619cb802e491df728d28302613f1b9526b258133b410d13cdfb366ed01e0e907c4df39280faac88a4cff42668fc648064ca567b19fd72b4f1a0ffab837dda5f85fb68e97c1fb225f4729df195e5f405f615e585b0a4cbe01e433d99333f4dd5da88f6f3c9f33faa643ff8de9895bc3abbb38de7f6a5d3a59f794cc77a054d95d994154e3e103fab33c778ef08da39cb1ac71558ccb67d6715d7d8be57d8b8126d35b8b1fafe37aa922bdb74cfe6883d2867484ad10e6355c7d6d19d75c7d6d5f7aedafbeb6efee6b4bc74581ad5c88bd72ada5cfab714dc6e9718fb6ff307ca6336b184ac9d8631d6c88efb387a99a6b4deedb31ee5256ccaf28f70f5e4fc4f042997da48f9d9f2f99af0754c7435f84fa22ed1b0b0de8565b73313f19130fb13587729d01fa94c11ef7eacacb35351929eca741d48ed33ec29d92368016b5186333d014f04f0cf3515d81a71dc36b2dc03ee9e4fb797763b203c7f044603f1c61ab9f8f5f953fc74bf54e26d67e9d9fa3f491783e197bf10de419b9375dd905fb75a9bcacdf8c4577bc1f17cb7dc978f6a99cf2c4397f46eb5cb2e7c14197eb0b831fdb86dcdaa09ee41c49ef36a4f70be5c064d1c3c7c42fd23573315d24734612f666f9dc1157dae84a8b067223517397c8a7ae53aaec6e605e075f98af573a26a12ae24153faebb2f6781f5d6f9f6b978fd8ce4295eb51ef4755ded9780ce93eefa8af13ecdd1aaf8d91e8fd2edde2da8414dfe7c6b0e72b4f3b932137d5869c935787987a276d32128c15a1fcadd601ca2ee8df137fa19c9ec8df82ea4bda1a6df075d7f45a535ddefb567b6e9b8c086c331c8b6a6c8d6bbeced58770f5215c7d08571fc2d587f09fe74348d50cd2447e783ef6c815cb3b4fdfa5c93e15eb649de817c3dbfccdf819fa514d31a401a8d365604564eaac17b2bf92b8da72a2fef544bd74f25ee1b9a076b600bf20f6c1c4f76bca20ea17a7c2fc93d4bba01efc6c6b8ccb68f22d89154ed8939c7f86afa580271cd96617c29e930e256b653bc4d8c23c3c09ec69d5ba5909e506807383fbd79cc245473456da2eb8e29f5ff1cfbff6da5ff1cfbf39feb9e94907a05f988c3b35f8f1da443974d79ad2a37f556b4aa1dd53ff4fd3d9ceec5dbc351683c0607699bd454ec4ae9e0ca64e995e6375764f95649edad260cd340eef018cc5643418c752610e6e1fca7ce8a76c77b646bb571d23a560cedfbc5f5c5aff8b6a8de1dee463f37f542c2ca99f2b51ac665d68577d211f4dda2e8c6d23fa145e7f418cecdd7d288fe449f1380717c3ed3eb91e25794657ee383026d04ad3c407f00df9d6d6e5fa5c57345f6b4b8ed144311f388ef7d957c9f3f541984bffa6399df11e1ce166c6734fdaec11ef4ec5c9b8a1266baee9491b3527773e3787c2933c0dec9f27baa887d7732c5b9ac998e17beb94b2c650590f608e7aab5dedd78c6baef6eb975efbabfdfacded5775314ff8c8af766bfadf29bae9d4d3feea2f165fba625efd27615e3112057d275e2bdb66baee7161af32ab09e3c45fb11730c4c58bedc06b5c38f1ef647f2ea0d39df057fc9bfa144fc581633b09f5f1b8109e1cd063437bba3886eb1218ffadc47da5304108dbee10d7fa13cf69f7e2bad8a45de898ded806f3837e7ca67a4fe7f84c7e505cf69adbf8a5fc8897cd6dbce6d5fdbebc3aa0bfe5d3f9558ee6e24525e39db00fce97d395a693e1358fee3dfb9cf60bfca7e94ce7e93c3936e2a9bacb847dce0d817d5eba76f0c8efddd868a8f6626db01d17f53895a2fea8e4f90deb31507fa3a847098c0da843ceb3e43ac6b8e0024dde3b16ef32646d48ac4755c452cbe6211f1273b9f62bb8f62bf8d26b7fed57f0ddfb15e0ba02dc87f07363743047eadbf40ae55b81d59ea35acaef50937c1efe424af72c934b11f71eeac7be898c3ceb52fe90673447e920f0ced68afa49c67a42baa715990b827b2ebab86e348aed57edf575ac3f7e084ec0b5efd157e2ab573de2aa475c60edff43f5886b9cf61aa7bdee71a93dfe4a71da77e7005fac7f13b92627e26d40bfebc36b6589d214c196bcd6ca2a89eb95ead18df44bbe15a832ed5abc1484359316e3ae8c26c417f17479bf42f854b7b6ba984758ca2ab3dfc2fce136d0a525f01dd6798f7a629ec0004bccff437c49165ea3f3fc8d787ee7601f2da27b2f92fb9d398f63bb4456e53d5db28f3daaa1e59d405520ae7a20b4433f6e8853a3f906bf3f74e5089b7847d21fea4100f3a8569a3288e92a99976e9371fc8ab15a26733e05bee768cd726903e1b487b8682623cd2ca5e3031bd7e4f74eda1e29618f163eeb6f244bfeab7653f3f55f93c5baf6f07fb5b7b95d7ba8d56e6aa2ee4dc05ffffc7353b3a76b6763fc692ebd1fd6d29c4f7efd58ae4cdd9d4fd70f3f5e87cdc7ee8fd52ff3c7663d7557f0bf3ffc8de14e57ce0f65d81da16bff65fc5aee56935fffb2a62bdfd5833ff72b17bc6fbaf87b09fe6f4dd6fad45d813f17e8cdf9b7ddd456d3c3a4f640d71bf78d9b9ab7b426b5875bf60efef9d77a0a6f6728baf12f9afe17531fd1f443bdf1c0d6ffa41a770dea275ba7ffa0e8078aaaddd4a6abbface9afdac3dfbabb9adcd456011cc1d3645b7bb8bbfdf993b9a9098b65eda141dddedd52773735d19d2ee6b507faa6d6836f655986babda98da756ed81a628eaa6c6c77f2a7ffde5eb16557ba06e6a030b3c93baa90dc9a173ee1c4de5966adc818f4b73beaa3db0cc4ded713df5c0588613135cfeb34137eacc5de3a626aec037f59f77b7d44fba51ffe7a6d64b5d7a7bf7b351ff590f2f0d27fdcf4dad99f5508609afbcbbbd6b34ee987b70a9f2d75f9bc56635b16a0fff4ddd5037d4fffc0348c199fc822b0416adf6c3597a931f2b7733d757d3f9bffe661a3f2c7dadfff835b11c7dfdc39eae7f381b234d33a749a67653133c7ff96bfda6af9d0439e25f9f9626fa7aa4ffb2276bf4f760b9c47ff5f4b5e9d41e161bd7bda90dd7ba3b8976187e1a4cf4d57281aee597ada93b598557a3f7461f9f267ef4f768b25aa7ae065fa5eee82dad0d78dfffd5f0e0f30f0f1ce974517b58ffda4c6edeb5a67022bda575fea6d8cb3fbda5059f234d7eada6707de83f691672001fce25640f8553c23bf52ec6f0cf4d0d8cb9f6507b7b6adc1af2ceb63c293019776bcca8696f78bb13a69c6b78e216364f385053491af0dd913d7d3bdcbebcb59d83f1e41facb6bbd21471a9c91225b49db5c1d70faf0bf01b35d5db03ca7c5a6ebbacc55a419ded05f5ade999dbde685e7f1d36d431b5dbe28605b061be602f6da1adb9e64204067143983d6f7a4de1456872b786bcdf988793cfbcd5db83b501ef7924eef3b710c08c1c13231e4cafb7313cf76035eb0b83559121cb8a3355de6de1fcc17878e95665f6b406835ed2c192f7c00808801098f0d2e16dd841cf6e0a7f000103fee1b5a134e8a46b51da905babca60a63f51d36e80ae139a8ff770ac4fb791b079e31d5795fb7f90c2eead8d04fc9b4d28114ffb5b93d9dd61a5606d30aa6d32400913a9b721520035b93e57e53af53a0be7eea3822569b55786c236f9bcdd162b9ba9778bd444de87800f0d61317027edfe5665c58330bb7d796b3eafbb43aeaf299db5ae0c0e022f3926038b82b680960cbe859a4636a975d6f855a6b19b0ce9ad36e50e9abc7755b6df10a68399c9f6a6ddc32da948de77593416e239f75d26b55e4ffba9c10cea022fae5445047bf3d3e01b603f31b8acbd7d99ba0d3076f2d993b6b87af560a39a7a171afedc4a850acd3df1ecdd56f51af3c908dffbb4db12fb77df65537b8eae7b899ebf889f2bf0b463f1e232a29d277fa62a03c7e01b0ba1bdb3310d82f559197cd4b420a29b53e37d6b36107df01254442cbcafa768337c6f6878846bfdc6db01b1a661e11bb9ee683f156e67b4e7ebf8bdd221da47b05e4f42fef8c0bb62ba0e7419350c82fb36a2a621cd85fb16d3693d72780385d8905b81c6b89bd759cb35462b60e4cc11ff5ada3d595abf06dcd460c11911ee80520b8c1b9369ac74b96fabdede519995fd773fa2b18dc94a44b225f713ec9de959be31a52983858d5b36227aee0e1a81727df13a7ddc6b32f553e03b5b1328dfb3256c7c644cb9b9c10e203873d6bbe2f73cfe213497779ae70626db5fab8ce31b7c7f2534eb074b8e8bf784a75bfb65e67bbad239584d7aa6f3ee4acb1c23e71a43ae11ad590c92baec0d77b6fe24ac04de3e749bdc526c82cf63f09901eba9798d8dd5a43d55a67da33dbf13daa2632c7a40d90d745925df3505733318eaf87dbc7d209e75d015df056bd49b3dba429bcad8d3fbad008ca4296c301c2634c4eb39a5579aac51af1024131827e2d6008626df59a9b2f88bdc8baebc77b5459fdca7b5aa7416ba7cbb3678c9b39e9676af794b6b3245eec5b61b70735d51373000d6e4127b69788d8d96a62d3ef1ece33568d651f35b60b465cdb92d860d4e6cfda9171978e93513536b46accfb21784460be7011ae92aa23ff1c677c2d333d56b8e89f9c1b9c5ef090d625edb1a8bfeda64dc3b6db4b47ba3deae93d847b027a97b4becabc6bb4cfade8c31ee93638c8d30b3b983cfe82e90f38d3ce75d65b035d11e52e8cc65d1e3e3a6e749ebc4bac1f9ee7dc31baf755ef235c6a1b2d6178ebdc2399b3433cf59444baa4c81b9c73c88a75d8d776963c81d0c66ef6b4d6e617a926bcc8ed6f5b6d71cff14da1c7420189e89e6c524e795a237c71872bb045f9c3eee52b44eac493d4c7a0663cc38431dc85311482ded1bde0018f87742930a0a9e899257019df0ee01f0fbc96869eb32fcdeedca9d95c124cf2c186317f36fd56bcd74c60a0c56da2050adfd169c4155defb2a234d8db6e4be16af67784d3c1fa513eef7ae3b43738ae929f51b49ffedc70d0a74d4a7a6d7f8a5c9b7702f01cfd1d8ced692eb08088d6f04af531808de1a9eb8d465cd3398db240f91a5b9ae80bd0b79d7c031bdf5163721fb29b4a1aeb5d6786966b01d14d402f7017e33a429bd0dde672dc9bd87e70302ccc3fd63906319e8a6b463f0eec2807208ee1da0579296d616dfd861da487caf7a0dcae21beb22bae97aee0636e96ceeecae272e0d063684cf927ff19ef0ad997e48f1d0e6ed3ef58e8d25d71d93157d8da9bb5ab3f0998126f7c1ef8ecaac17a6d7a00d0f8209ae0c16c87ace37bc35c98fa19e0ce832ba06ed013a7fd304eff60dd86cbf6f77a1332d8b7fcd93bcb259c7ce2b82afb283bac18fef04dea520fd1ea2b334d76411ec3d742abd4e391a9c2d13269b67f3c49017c24492631e5c87bc02bf57f35a6b5dded75fa7dc4195eb87ae22baa6e77aafd11c2c5797ad259085aad758694fab84733ef70c221de6277402229a6775dea512b231086535384f923b794afc1684ef853258b1137bafcbf503a0e19897d1be9621a75e9ff2f4883a0464d7da1dc7626e893d3b9a6fb47ed09e05fc09eae3ee2ce7b95383b573cf9821bb738ddf039ec3eaf280d2c1fc52f2a7bb106975215248ee46ebb7d6e5c1068e8def00dbaec21e22fbe875ca6d802dadcabbe85e8b09e5dbf16f680d57f6ebd318aca17d2cbbc03ed03b5516a9ae3270540fd8832bdb62dcb9c5db406eef10ad8139ec1db32d8231001a59a90ab0ebfa27e7905817082cd99a011ea5a2e45a0aee794aee615d2e97f7a235b4024d999fe6434196cc7e8c75bfb4cc9d49299911e920f4397a3f7a4fdefbb8ec77f1295b86af6f93bc820bd78fd49be37d192d11dfe35b3b18988aef5be943a41b01db03f3ac350c988e96b6c9b66808ac49ec990aaecf93571e4c6e4eaeefd36e8b6c62cd313d17d214b4351f9765ed65c02f57aad289401f223bf391b02363fb12ac1fa5327643f01a07956981e7e3c009b73698819b61d7de876304fa43576e78404787f6f81335ed4eb10f259a4b3c5ef07d157b1bd2aff218dbdb842da0327bc7647b0dc183fc77274c395f7ba2a61316f10f14fca0a79aac6d4d6fbc247c07c8966cadf6cab0f1a8cbfd5527b85dbc28d494f4a194f07ddc77d9683ca7fd0bcde7757784d65f67a43a6e26d410bc810be7e2c5c941477b4280a2992ce7aa81009b82bf0d3b8f3860bfc57412ed71e577c481a13ae96b49149b92df934152bc6e784cc00e9fa94a7fd947203d80fe579da0b7e83e733011e4058c778a7d5fb9638e82a76b7581132d9b318dbcb8eb475d1e58026ce4306e0873ced79ac7eb5048ebf1ba123e1d688fcd0cbe75300fd474c2ecb7e05adc786a994d27e2d66ccfd3fec647084a4cf8eb30cdcf5479bf22692a9e33ede8cc789df633257c9b8c4be9517098db803d781b76024b06ba586f4a9ec568afda9dadd95a3fe23363bf0d1f17c8ef6759c234e9cbc3f3710c7eb74ed371699f563c575f9b7294a6c0f5087954d25793f239229b38f2a9b986e7c0a64f21585c624d900f8e7a23409834b9be54e5fa2c2c2e7f6b3696e2d36d32a9a2600e99eb97f07581b3d3986b236aaacbf599d196e65a86df18cc23e19365f17acc8ed6c831dbdc6a32a4635ea8f4483a0ad72d8801a5a403c19f7dc31357963c70937b89cf94ac025dfa00e7e335a8173e3cef449314a5e7a7f7417feaff3126126dcdc3d27ee3e736967b0dc1cbd5a1a66f732873efbbccfc8ff4fa873c52975592ee9cee90b2437d4a6887fa9485927a7929d0868feb2ee1638ed63747ce60790a9fab01fa6f73a839d1949b6bb2e658f21e357b51605cc5319ad1f3cbc8d9240de3752f2bd74ad053246352e721edb7f7ffcef23767c50f48fe98e45de9b31ef9960db9f50bdad469bf764cbbd08e0893bf223eb6e8d006b07d03218b8e6181b44c453cf6637951455ae9338e0bf450838571bbe45e4aeb47bc578bb4eedfa1293b6a70c53780fde61b5e6b25b4c4feebd3e3ae3b1a1f60c34068bfc26412754c114941bcb635a7dcdcf45a2c6a3e04134b7c43e11c95eddb168ffcfee01dc3d6401cc5f40a695618526ba1c5f92ab306744e9b88d6819c8067a83ba4fe284b9f316d369231b221772f44fc43a4d5587e6ed33112b0fe91de33e4fa56943455474577f07995ce5c0ccec7247416a31f9d0f0bca43b0177f37b9ccb35ae2de5066e78cab5856e3f52d259fbbc1ed86a0f97bfda9578ab6c96774daf1590bf988b99036303929431e685e23e8ca92a33276d6d92c3aeb59726a9b21e33c8315d69adc9ae94f648cab7791181cb20573f9238e2584ba8e98886986fa97c172f5b4ddd2870979c7eb756afdbbd378dd49daaf26e3850d21cfe11cba729d36e48e6b4eb378f609bb8419f8d6ec22f15738169257a3066ee201819a5856c1795a6bca606930fd058eabbfebbda41d923adf47d7a2a6839695b657ac58076e74189c3c090b812d2ba293a73d8cc544f625f21d9fa7f35f82869ef6d85ff148d2269588b9a37c8820652f50da997a2f391e74dee88d25d353d8e4f028ff60307fcf7b4f3c0f7c0e529f612e43c46f9b0db43e9575c363fbd06c777c8385898a0d61f6bc0367329bffdc6f53fc286fff2ad1fb491e50da87038b298d1cfbafd161a00c5b28123515787aabc11c1648e76b6321ad554f0a88f3909b7ba0cbf5a5a6c082ca7957ae6f0552dff45ad04eb1f846f03a5bfeaf7c52eed2967c6815f193b47c2e3f366510e832bd86a051049d5b28c70aeec94b73e01b9e03743308226d78f7ab4ef0b8e836cdc50b61dfbdb51fd3bce178cd62be8f631d295d7c91f05139da62e09a538732bdd6c664e09e2e4feedd70b7109ae6aa13987e37357698dc2fd3aed69c4f493dd8bc4c4e0ea2cd77eb5199cf758c0c3f63e80b8ded8b81637a960bce1dc17b7f69ca7cd9618efc468bee3347a94a67a1297d9fd4b7327407f2fd55eda94bd92315d7ab11fb7e1571469cdb1d31b7e46fc897ba5365c28f1ac65d6675b298e2eeadd938987c6b7324ff905fef0f720ee07375fde936c98370ec2e8c7f97d5c93e88cec9f50d93ee23fa319bb19f302c4420d7c96439c7207c89c0ee37d9fef4cd45bef3d7d96e0baf39e61b94a638d4db949803f85cd93ffd78319d5b95a948e669bce4a98ab422f570722d327e077b07e988a04960971dc03583f0faa7e57d97857479b4e7301efc744bce057c2ea3676f095d61778e5e40f867606e469e5e905aa3834ae4b4a66921f57b79da8ee9a52a7da333e6b91b942b91190340e72fe2edb85827e629e93d4c9f89af390f6fe06a5e8b36da7d329694e47f19d7a479dd4b3eaffbedb47d34d651e658136328e20b89b8d5b1ffe6c82f55c5bf74a4d3b05ca0cb8d405706f5b46d97f615aa5e0bc860949f867d70295da3347f87408dd9f212fd56ec47a862d3af54b9e31a99fed777f070bbb43d80c00c2239dba18d29ed93b9d347b22af421b543bda032af4de80d27e55a659e7c34c74807159e283bb2ef9b09db9edce308c894dc135daeef2ca56fa3b83e3555a13f783d35587b4adc0b3f97f4f35c40fe9cd84f6fefa89eb42ae0d3113f3ae23dd9b512e1d9cc9a23dab3d9329b5fbd8fb757f50311348df316e235588a4ff5a8b90f1187baf8983456f2351ed8bbc02e3bf60510f502d49b2bd2804642301ca3c92d2cd99dc398e568b7d59ffa97f39316f9bb0af23bc2311ccba8fa1b3a3303dff2c6277453d713da03d784be00d22fd19fbe2d7ac7f1d0a78f9c3b6c047c301968179edea31c99da277d9f4f39f47fcaf6f74afb4b439ef161741b8215e98a06ecf52d61d343ff1131b62db1ef70fd92be32e1f81cc676db89f109ff7b6eae51c4efa7efabef79c9f0bfa6e456f65ecef15a06c5394f27f9fa7459c4c7aaf0e977d3489e3e7486fc2f9275b846ee7111e6b27602cec7805dbe153551ae23fa941b1b1c1f758436d2ed6161fd9443fb12e6e8f12e65065c187b83313f557637f0b97caad89f6f6db4e6e3d260b910146d3519ce6d75889f592d3619e6411fd38dd2f171be61180b9c197c03f09108344588f84db6ffb42b3782ae02e85ebd7b9d2eb7a91c2ca3cfbbf33759a4cd058cf52e5f868d476c8fae757960c99046facb1789f49da278f7b8ddd95a9e3b473167a4ebe9ca80c6b5338c2e3fdb3077113c0f0132d91070a4edba56933b58c0ce633b308733b4018a7d77d206d0942e5b1b4dce8aab9072a3beb59af61c036b1c62508cf9f40de68203beee2e0c4f9a67e495846721de8351ae7e84f76ff0b3d326c737c8d2fbe3f86633599f79b4afa99c1a75c82d4d4ff2de86c26c4271bed6a68ef399ce8b17e21c707a6af08d991e1ce723a9a3b2b59d645e11b4b38e623ed9fbe4a4fc6444ae406c5ba7f38ccaf914ceccdb8ac041d2fe45250421b9cf7d477ede14baf76528fc2153f537a1c571e3794b1c4883d678cac9fdf15e1a0cb9f650d25a2397caccfbcad093d331f4649e18a66d22767f3acfab794c8f3963e6c6b4d81950f5d6a09531de12fa7c453f62b1bf37df8621e8bcbc1d938cc7a6d6fcb4ffa5489e96950d5b83f0931acc8ef03925f31f4bcad5ed89daea32635ae9848e65f073624c7bff8c31adf4d145f40f87d87fa774cc1d01d19c9127f17c117b0383fc65fac253bfa5e7752ac6b444404cf759f938339d6f6c4d669ce661789dada506f3d1229e1018726ba52bbedb55c49d2a8bee4b737e247f4ad7fd27f915abf3d22647966d2dde71cd85e5678cf5f4f93ddedb044f34d8c152533aacae886e5ae6619a591a4ce3a08d12fcd4b9b84f063540314c76006ca743578120f5cb3eef049aacc2fc77a07f95d00fc358652256ad3352fda569b921b86d57ee40b0e44eb047be1d04e8b656658dd21421f9de2119074ee8f5a806f5f8bc9379db1b83ed2f3bed30e63acfcc4b579501657aeed44ae4c861fb6c16d785c2f37008f7a6458171ab0b894aed4f468e70be4f4b65d4237f23d4b732759ed23c84389b0ed0b9dd1cfa86b44fea42a6076bdeeeb4210dc634d386f6b1de53deaf9f58138b715ce3589780bafc08f21a0eec97ad2e3a5b9d913647182379e39e0e22baabc613123a704cbbb16fd237bcd51ad573e69fe3ec79ed8bcf78b38c8f009e83b40e4bf08706a5f35260316e824710bced98cf92faf4bbe3cd09ff073c8f607d27ed235b32631cfb78ed8eeb2cf2f3acb3705e72d6ef741e8a9095039a9607f7c76b5d37064a2740f5c5f5add0c47923011735ef9a0c396083e23a79cc7f621d354bae64ee599e7c0fd7808873cdc1bb4d5e9a0bb0c15a64b7d856bbe3201ca8d62a3a53a57cf5893a8baa3931a76b3e087d39f695443c32793fc9e7a12f3a31b6fb2e93e1fbbc640d5c191b01e83bb9b99890475f3effbfd43e8a949693ef60b283f9a5fd6325e983ace3ce8f6d2f802ee2c0da022363fdb06f5f219e75774e5ecf85e2fbe939ba644e98265384ad22adcf5877d728b6554ad5ff6099975b3718ea16678c0fd07ce1592a57c3e16c75597473fcb9803ffa2a333ea3e6f502f1684ff4a346eb79e35322c0fadf95ff15f3d3621e0bf6eb636b87cbd5eccc93f539cf641ec594cc85d713be39699dacf79576a9cfd3742c02d03ecaff8f6c9652756939b527510ca3ba5d91ad2f66db92c2e6c88ec66b4ebea3543d4b33a93b54a14d441b518e6ad1593a45a747eb76ccf7d72b036230d2709f5e9a6e963f3b3bb635bdcdf39be59eab701ea846543ae8bce45a4fb71701f9dd7bee8f95e94c3cbd18b9175f13c2f4226c5b84d2cbd0b73f6fef6fe9facf14582f43fd8ba2ff45d74734f550bf7b60d93f19e6eef627f5f38e3902eb4570a9f958bd75e6e77d3dc2ea6542ac5efaeebec19e81d51b62f36642f5dee720f53211fc2e4bd114dda8d38d0ca4de0675cfd06050e8d268ca25a07aebf78dc61d7b7ff7a150bd6920de32c0af9e3e5d6442f4660cc15efe30a60bf22118c4f7ece162e8dfff2e1aeaff44a0c088929298c02bf0e9ff59137fb2b0260b3378f87fbf360b48a70458f07fd7fcb93db1feb497e06999a0c1ff5d0beffb9f2b76f059d8c104bf890081d1425d9095a19ffe32f5b5ee2eedbfd0977fee57560974f2acbb42ae774fdd5327c0c9997fd1f488be7b60ef1feaec9ff734cb3418e69e3d0b9c9cfe793970723cf41c8e47df51193c8fa953f777b72177baff49533f6f69e63e83e7dd513fef7fb211cf8ba65d86e7d501cfbba33e039e9c20be5c34f2e8f72b1ef9f7e329f907fffde8e3af0b71a6f3d25a1d4628dfb78508e1b3c75d6fd85047e3fd48651cd7909fa7e928cd84a757c6a277678cca23851bb244a94a3896fb7d77f698ff5c74cf5a655a942aefb7dae10c447252330f11d7b1c5d955b8007af0879da5d51eec5ea7f75b95150335a86f7445a4ba9eb5b5a6b06d05462dcf1e6f64f93cc3f6c2cf2192c8dbb0b3b7e4d64a97355f93fb47f7597c2bd018891ac1cc25147d7bef58d274d19d3dae0d19a2ce530653777ba1e50c2c93839f684197b4567bd06ad1e5ba67a4bce46f3c756732e2529369072320fd31a2c5a7fe7847b6777c8a50bad1ba38d6d36e6b8cfc03a62764158e0a9ead44e8f67f64ce65967c5e3cf7ac673a5b589509df59c76b484748e26fcdc6fa75212e0d1656d8c23925d6f669bf7e8d5b7267452cd7af8bc73f24de7185e7c6a84fb57ac2738c40d40f6938e0207abfaaf46d95696d04bee30a6de9a0c97ddbe2efedb055a3ea8d6d7588900163ef02f2c2abac04ab22043e7cfefe8032d7c236d6d23cfeed18fda8dbe4c09c375ac0414fa11021720d6855defb1384443237189186741d7a65d03bd69a327034be45a9c35b1bce17ec37db87d97910e9e4c4bc75a507f7047a2746f5e41e401e36fea38bf676978aecdc7719eacef4a4b5aa747e995974e935b6d653ea990b38be148acc317d434b35fb4cc0f390e1e1c8ae0ecd3f5727cf56380f0d47e6435a1c13c86a689dd0990aadf8ac089831f293edad12559c9d83d006fc4ff3351ed2da5a93454027bec950b8653a449b994fe018dc99c0879975a85511dc6fe455599ac11cb5be1ac62d55f11ea6c690da33bce626449cd5d29140b4ee7c6366916d62b3a2a6bc905ea3e9db6c6993df99288ac4e8f2c015f867db90a599ceb7007f5de34c52d892496bbb604d7d35e042345d847407cf1fcef46af77c140d7a26dbc4432fc8ab37d8aa2c8ac8e3ecc863da23db6fa6bc2f10810eb68972c613854bef2d5c139391f6962c6dd4bcec89831f650508ed8eabcd22af20214ffdb002c93664773362c499a5740e6f4301a31c386f2a23d2e6a2d71066cfc7d1d268bc91e7ca46998c9d23fefaba900eaa6cc12a495dae13cf85152bcee4b931037c0d56cdcaf52944cf057c2c2f1bafdcfc002d1eac76c7d1618bde4f7d37ace0c05569e03dbe318fdfd3836bdeba8dd7bc431b1e4266d552088129da4088d1a3e3dfabed47d472ede49af4d24876e9f319f3c54093d5c8a3df9545c7e25b2b8331efa2c8c7f9efc3672b7ffea5e7eee1b6a6efdc13ccbb0e9ad2a261b434adcbc0f110d92c71360f6ce386913113ed14c30a3378c6c3569b395922af5ea225ee31ad12f22887bfa6e58587d1fa423da9a3f140febb9e2e97963b45f247323c776fc9635b275b2c4e612b6ec87b212fe55bbe817490b01a0fcafd541beb9cf966cbf6ecf52be0d3c7eb387d9b83f35ca7a03eaf08f75d46f8e375ca9d3fa753b2223da71c9941ca51ab0d68a643a7b319423a207e8fbbc5e08841dcb9c839bcceeb4fd02ec9cbb82ed6714aeb3a453a4f1f8d0bed7deab7827d5abfa65a38becddd8dc6bb33b8be9e8974543457db60051c1911c1becda26a86509745ba31901ff0deb03a0a9d85d47b72d600ed736b6702dbdccb9029f19a1ee9dc45e74b9dd59f506479b75567b777c2f387ccb3ecb8c279e6f3a4e86c6646d6087ac98aee0d5c9397365abbb746edbfbf16ad0e7869a7c9f5b919705b03e9bd295e7ae27929ded697eb2893699a6c23aacb75c660d6e1fefaf07d1055f52bf0c7688f6c83b90df92367e00caf5495966f2cb4adce842d54dd83006cd2111a5f299d3fdf5e4bd3647e4629d411e99dc14bb71294bd095b30d2f34ed881a11efda976a0c0a30aef77d8839cd0e656aa2cba3adf5869f099b8a28ea77dc02b209d211b6f85b3df7c93e556aa32df94e081c5bcaf3ccf03bc2ed1ced9e05b534dde4534f6ce799c1a47316f43f348d2d1905beb8ae36a0851ecb87209dd033baf98057ab3067d602eecdca5057466f5d505e9983699d6e208b9e5c3e9384543e7d373c7f0063eb0c134a5875b2e4bb726bf0772ed10b665b694cece604517fbb368934195a56ab265f3699e7a829796e6a18077ba09de989ad7917c77cd80730caf6f6b8ab333806eb9e86179cfd1e682db8239c1f9b7a5833684ba68b24a76769acf9ee0af68df99c6dae4f7eea485f50cd9bdd5e47e43580c8214f2554c77a88343817d26319ad2a9c36e209eb98e119632f947a64e0b3b03903a42dcfafab7e90889b6f217d01124b9ee9b8ae40a7cc22ef92eba6bdab684feba77cce9b3f4d4d00f91e5a3c3bf2533b98e7c4671c6dad6807409ce6fbaeaf984bdd73eb12fd00e4af1d079e27de5ecaa4c7bead90eef83adf0e118c2cfd2add9eeb850e662fb02fb84633f1c6c9f0f2b4c3e97c71ecd1feb0e7cb84edc16eaa5d1ba71eea4cd051aacfcc6f117ecef35d941a0ca2e909dd06f0cab2c3e428fc8f2292d441fd2de18c56d223a3b3e93eea40d7e477b0151b24af8968462df159cab30e52848f7c30ef481e14ab3ac2aa1d2349d338662de538de671e56335de5bc483fb432e7c8efdc24bb79a2cd218fdcc2f73162af0e26a3cf97cde4cf2e8a7c4b98dce6cfadc3c2e35c5715556c2a8d473a897989e7480f1d829d63ff8d4f92bebff4af382123474d21f463c4f531c4a93eb875cfba5e8bc85634aea4198efe3e7877a36ce144efba9439d0521464948d7398a0915c9ab933ede2cdf6e9b884fbc4b16c02a30666c27bb420d96aad287bf599e3b87faf810d839e2d600f3f6c24c7e707e04acbbe6e8aad3db4f9613160d7db9e07c8d42ddfb93e6f975e287276dd371abf336a6c6276268c7f19e2a71940bdab6d9a8a41f60db4ac8cf90d4134aca9c2c193394eb731daebb7400fa87c94b8121bb80b742944decd740317bf83b695b035d2beee2f6c93e1b19a3bea4651ed4f52f3cafab0f07d1f95115da87d9132eae08c63e8a73e97b0c742406da821b0da272455d911d4386794a8e01740fafee40a442a5f7c9be99e43ca13c6841bb00daf3c00e057a1dae9eb355d8c9dab455794f694a67039e6d79d2e113ed0317d8d0869757195f2e661f550bbe376f02ef45aecc29f2e3f00db62bd38eb1987f397f4e9f69051aef6e5479ef5bedf9fbe3942e426709732560f7f526d0113a603f7dd30b750e915619db56959e6d307517d9e0f4d6fc327120d131bd01ec74a62b903723df0e4224c0fc099e9b15e4eb1ea00b3788f2365869a6373907c7b660ecd2901bc1378d0de554d57e887f07e7c69ccf8bfb11d221b14fcc6dc4d34c06fa661da3c91d2c595c0a7c6387bb0a7fb62f279a6ba89f87fa427c7e60ceeada60208aa16b795200ec744c5f5b34c6fac7f0e5efa93ba08e431f6f7bf6c17bde19b7744c888a8afc0b26eca24eef003f0c7353c95c54ac2f3ae6e2937d8e6ef8ce284e79feb8bf8e6d5826ff3144edfd84dcd208f9fc423996b87b78fedcfae379633418163f3f633c99e7a3740e65d455ecc47a2ea48dea3568c31bb847dd882abe1323d5bdf79da11f2d4f2f2dc8fb71e7157ccda57dcca57dcb9972369d07f85ebd4fdae84a0bc85c9f8c89a17c7318b38e508ba1cf9ec7a8ed4fa7f3ebd3fad0893cd0d2f9f6b10e211cc535917d74fe9c3e4bc7138ae31cf0ff5127f945a483a7e9f1b54fc13dff8df408df7f893cc990aeeb44b7e174be840f7de0f09cc7b91338f720f2c7749b1cd225a06d82f3bfc23d6e96f0e79694c595657242870cd70dcae6281e3d91c39cb4b16db6a5c0e41b07e88bf050a71b0df17798bf4dd0338150b6b311af86f23dcce30bf37ecbe41b95d33b9befcda9ac1fbe1e6f056393104262493b26e64599f60c7caec9728eca8c6d53911c23b5c7089de62bd1643cffd0b631881a51a1dd82757adac28df37cd19e7e21da0abb307c355e89119ade5fcb10e59a11bc12ce15f13cf41ea023a06bc2facdaf2fcfe3bc7bc4173f629edfd08f43d4bd7e427e645b9a1a3c91a72f4b942a83757a3e3f56eb86f59ed281c8d909fd24538395a848e6cb9d158acd403b15ca3e55d11c5dde3baae7ae50fd71de3ec73cefd36b400bd70dd2733fac01358338d7279c27b061ac6624fb13cf42f9a42d4695dd952a777c8377211a694e9d4fcc83bf5f5d689eedbeff00db9d56bdbd6f320eac7ffb705f8107bb9eac0db9310f71198eecf423bb1eccfb5db5a08ca674500ed9512ce5b974fd63699b1dbf3fc243987ec23e02da0e6017864ff54fc09c8cefe913a9364faf51ce9776c977021ba63dbfa05fad0c3fe8005d7d6b2c445ff5f62eec52b218d48fb05c8efe1dc7284fe60bbeb7f63bea5e14e18294582b617f22e7f2744d6fb3525daf9de3831f6a32ed98debaaa2e9ca70f731a8ffdda5e6b0573fdb0bc3617731bc84fec23704c0fd29d6ff1d2ba8c7e7086de7b96ee1be91011be48687fb5e61aefe28e603b20e7d7d8b60a301a39d217f85680e8c2a53499aa628bd9a5ecb1e4de17e6011cd3d5a7fab4ed1379f219d7a572e69b49bd2853af29cabd8cd7890eebb3c39c0242275cc31c55beb1c139476bccf3d63a23d5cd746e017a5e1817dd9a53eed6047bfa94b99e01b0d70da67ed0614e2cec52464d8e653ba253cf750dbe6f4fda9c63f17643987381c1ecddaeec2679119eb385eb24ceab3be8382ab35a03dd1fe6527d7cbcafa9cae22f8852db1e94ae7dc9f1e71c6322f1317274581705f6d560a500fa7c3cc9d3940e8c3b98c167e792c2b5b6c3b50e73212e328fef655390e8dd9fac3b456bf8a1981f97ac27ceeac0f301e7b207def3be383cd12d62c85106ccdfdb6fc11ea0d835d08d1a943684f9725b4be9847edd4ff3098c7077a1288f9b3847427bb085585008a91ce61a999eb436d8810bf3ae98066d7aa2fbdd734484e25817ee285618ebcac2740af4214d7413f98d7e5dcfa99bbc14a08e421c39a60bc4c59e5187aa20a4ef98e7221f28f9590b54d9427f371d476507b42aef56025fdf029e17d158bbb3459db7a5f94b89f35051ff3dcbefab039a543ab07377e25c9371880f5e872f12fb0d3479f7e53046c69eb4c27ce502348d3fcb1dd7c471300bf1a4ad360d71245d60872f75e531ae6f91fbb6ba98e39813c4d1da08adc152577a319e25ecc816d5aa6f492c24443fd681a8532f832391ded38fa8471e46738eeaedbfd41a7d91b81eed6abceb74157836be5c4ef64896e6bafc8c71d4de1f3f1e4478ac52881fb1d6e481afc631b03006027536b0f784bef94562ca68cff05e857190672c6fa69a82b123f8c47544cd3dec62e9427c594287fb86313c14d752c4e57197f18fa88f41b18d282eda1af8862c1d2cbeb536df510f063177f901eca284303ec073c7211e141177e25855e98571ac83ce4bf3df1d8f937877ad2922a5caf42eaa0b78e77c3e00c724d3efa3c3ce36d293c1c01c202ad72625ea8905bee3409d3a4b6fe75b9426c1b9ae2dc6a5f4264de932ed4ebcc646cbf0137d662db2c1b70e56935e1b0ccaeb3beaaefd0131ef117c2747bc9383eb61b203c7501edf51a37c4c5b80b719c9f78534fad9b8563d551129d41915e648e231c67c02eb2255e7f02db02832fc44735519b8904f0c69884fde55e07adcc15aa7dcda3217d23cc49fe763fabeb0fc88e3b81fef9b7926f85ef4de77f86ac6507f8d62c2b1be19f3ce3ece61c0390b9fea27256cc77684fb1fea2ad5c7fe69bed17cba4b3e4bba05bfe3f14f5584fd9bc8b9ccf33516c89d0b6211853d31a2b5ff847a35dc2721b1dfe7f278fc2cc847a515f1cccfe6e76f634ae446c9330bf59cb047862137e61ad9c3e553711ffe5de835ca37f970bd6440f0987330dc72e258a45e9bac9108f37b910e349d0c39c798a6ae816700f5ca206cdd19ec04fde9782904ef7ecec4c8e692bec124b65b98930d751fbe53c7be91c435c8eff23dcf49b19f23c3c7b2087d2b12d491e2fae8cc2efca57974f6f8df89afe5863e850afec8423e5e8061cda8298cf59dadca83398ce1073b5b936947c77e65831d2c01dda07cddf3724d846af926f6b9392702b695257c8e4f62795f601d2ac7074efb7072cfd0a9fc94881617d206d9ccb46bc81dd784b4251d2a60cc9dfdfee4383a2ec2c70b63f3d8863fe5e3cca77324c316d25a533a61ae31aab31f51538d6ff879396127ce6eb95cb1e2719d830d97b9e6e6539d139e07bec6b8942aefec11c6e64cc904fbe579f0361cce7f621c2c1ff5e5813159c0e356425bf4716c16f9cce5fdca60ad03c6740e3405ec8dc4c01812aa97f62c79bf12f88eaf7a7bdf60ac4055b8a52ef76cd3936606db817e223383879f5ce76a395cb96b533ab72b739f42df4d1d8c21a8747f681f7b123c3f6477f152f75539c368ad68c32bc54b423d312f2fcc2e13c3239e47fa177ea78f00d6017e068642546f7819bc0fdc0b0ed79a0d7736a99b684d18f3cdaa7388fb7de19acf2eaa7bc4790b9fac8bba094cb030d7eae3e7f89fa0977aa876ef5be8a5e7d444279ef70d6aa34b9e9fecf5ad104324cfd7d7af993e4fe626633c45322941d7965c0febccd6aa2705506e28bdd33923ef7f7f922f24e57b02eb7934175f219641051d13f3900db00f4c0fc72f71efc3b761e797a6b82cd0ab8e72a44ffd2b9f077072cee7d859d9737dfc43faffecbd6973a2dada3ffc5d7c7b724e33c4de6d57dd2f8289081dd9ad46a6a7feb58bc103c60572b723deb5bffb536b000141c18198debed8b5d389c21aae75ad6bfcfd5429d2ff698e481e6c092ee14a9f70897923ee5368bbc2ffa8b1ca051ad3999bdd299271bd8dfa025c7cee9f1037669463b7f9ce5453072eaa3d4c70701a8cdcb49956a8777b29fecd741fe1d309767e757f2f779daaf98005e7312d5355be9f630347985f2dc1c35c38bf8d1fc5bbb4a97496afaa083465e06ade06447c3f49aed25dcf49c4e18b74659637b7c2fe9c702fe4c85a95fb3e47c6d2bef2e5f4d616f33b83e9ef2227a8373b898d9ac1db796d73ac81efe2c80686fa0a68aa14405d6531ad90e0d5c7187f51cc88e0e4e1efa9bd840e4bf777ff23fdeaf6f1b88ea9c894c1b77e2b59b3580958ac44e2f8f02e7357fafd5e2abe977c09ee21fddbd849c89789e694e475407cef4bc4f53fe1c098ef203f15e3d712ae6168f7b76d15fae07a57746de6d1177809e5b662deae21bcd73a54125702e320baae1572135d919742d70e6cde9d5a5e878db0292cc65dd9ca662af0cd95c06f56a66743ff61a20fa11f26dfe37fbf71fc4f385ccb1f54e155ce3caffc7e55ebc7760a627ae7f02d279f5b3fef72466eea89457c101f7376ae97e2a3691fc64237fd5ef97afbccf32adc23a5ebefe3b9e5d57226f0ca2e28c71c8e45127cb421b7b195ce3c139343cfbff55c6f667da2387579acba1b97d5ca9ce21f2caf27718defc67c6b9ce3f1dad4ca15763b5ce4d9f997c0d438da1395785e22b792df3b51530d5c6a5e35d46ba6de77166718d663ad2826b1d6141062bbde714c968bb15608bfed12f5c8f953d49b8db0596ac771c8ce3daa6b43f35ec5dc037c27b026519e91702378841793dfb8a6d7a14c566ce2be7884195467ad7e155e98442f2cc6092ac303d32bd2edd5f47a259d5ed02b1b63f854e57acce7e31f4c0db4ee4dd76c23cc7e22336253e05bcb289fa5a922aa1335d40130ab60ca9690d79364372bc72096bb58864fc56daa62ff5488d11cefc7da97abdab8ea32f3398ac154503b923ed727e1e217e7e26fad6f1dbdff02bdb871ed7512f738cb77ce03541781f673c7b348f2d2e20a614474a773c2a991aa918cec8c2abec335f118a27523f6547df507657d8b123ec5515fe2cee17ee770af9fc3fd986ebde3e2df71f1af235b3ec985dc9a7c019223bf202e7e8c2b91ccff90bc8e81b85c254a57c5c062078156c69fab43ce76ebb0cf518bc71ef9ac8978b2eb5a5ee7dde6e5d05025ca504af9749792b7cbc5137c82b55b13ffdb78f8343359d1d7946630f662ee8050e8423b455a9993929c9a45bce4696c4f07dd452ab27f00ca41aa82633160a9b3f25c5305e707ea3b6b853ad3591a6ae02638dad6ba2a6e4de631209c072b93c7dc88b637727ef0346d760701f457e2b1fbbda0e6bed30a6b1a71d1a5b196057c97a35a4c5d01d82e44bd18366df29d5068bb2e5a0fcf764d0f7c8de376ac80b89b2da6b5fc318c38ed08b6a5aa03a1ed2e6c654319503e87d15a36b765f0be2e85dd9187d79896f15258f5640d6bc61b6745bf64ece5d361a9a7eeb5bad7f57a38eef7d8d93d76768f9ddd6cececce2979eb1c549f9553f2d25ccce3613d1817238c7bef8c12d8c867600d0d77f8bbf256e05fd03b35a635d5df9a785e29bc0a6eaa2b7a607a328adf26b12db2bc57f819b563ba10db9a1ba67185d11db03757c221e0e8bcec194a13a0b8ec844bf0877daa7ec198b3ef43f15e76b6770d6701fb3267f29393f1ae1d8ced17e92689ca72afd52dcbc4974d72925719eb2de6aa0f7018e1bd247b5b8e9fe73caeafadc1b7429bc84b1d7e1bf40f6b9c5f140b5918f97c30d7e386f25aa1fe011c633b6c957adf4b705c6ae6dfe2661867f1b8dc56e6cb2a9629daf26a9f6768b24f35cb6fba5eabde77231cf2abbc33cad7ee6ab3caf1381ef4614bf60f56c20ac8cd7b247dfa8ab59fb971e793b9c2aad47696afeb3cada693e0e1c7fc70b83ef9d4384e955ae52a75cac76de07dbdcb8a2b5b7d2a3e27801bbed152e7885ecf91efa2bcfa118eb2cce7b2f8cc42c6d6be32efd0ca4ac740ae85fb99ceb19c83a3a83c3ab9f90e7e0374c44114e5349e6650f762ff2cca55dc9c6dfe33935b896df4a2bc8bc9cb3eaa9325b92da1ed2e4db6ef68c35dce0af500a37a545c77a1b1089303af77f49ecfc52506e514cb492d1cc5d20cf78dd76663a3f9d56f5f77a63aca0996e131bde47be585a68079cd36e7dae011ce7ead36bdad8ab5cf13e191d5fbce544ca6e67763eebc6bbcf3cef77be7fbbdf3fdde26df6f457e935d5c308d0573ad7a2752f302fda6537abc73cfdf1e2638c6057277f1dca719c17071119fec84fb399a4ae2a08d30aa508da436e4e073039d69ba36aa9997de0da8efcae4df2f8bdb88c70c75490186f8d5e7fb79723217c016ff1c7de4f2093c6ea9e7edf59044f59cbb3ae704a75f163bc9d5f941a8abd2f6b5cdc13b3f30d3f88418c7edb4188e53737f2e96c7bdbad6abacc3bd4f37cdad12e52dae9ebb7ccbc642f674e9a9f5b4fb9c0c08a330bf66964675b5982316580cf04daf43216e44469ae925f1192eca017d745d0edf3179f197fb9d72bf53ee77cafd4ef9903bc517719ce3fabecb30e67c251cb767d6c5ac101eb42a3836ffcdd1944707f165aa62e46bafc7c308572ec909b78f0d61f09dadd1e63c9315109716d4e511d76acd71fbbc358a307dd626837a924384f78bee4b2443611437b1bad388c722c575ba8f21e1ba16e3106c601d581e3c4b529c43f954bd141e9acbd971e6437931e1302edc0c8e4d40b60a8ee959aa1c589e9cac0dcec905c8a131a4c3441de0c7d50c7b6e13f5b343794231e7646de2b9fcf0d7e7fabf853a6303e1b58b14d4412856e6c92196a3448fe995d7a1aedae423e781f09ad398d7fce6eae3b31ce6e7caf73eb7bf99e48e1f66f8f81968d78bc0625ab415d7467f78ffbd94e4a28fee9cb339ebebc27fb84a3c17e768af5ec310c52b271ce25638c326e2117755db9deb8aed9aed29e9bbc73650848d6b7b606a2b9df907d50a3b692c129d36f9b5f383d458fc203a04c915e66e5cea3c600c05e9bf4fe9037f30176fa887a47ef8faf67db6e6c4a982d793e70f0f7c796eb69f66a4362520f3c2366e4ebdce07d7d85494edfddaa5baecee03b297b681a03fa534b707b80bf76269a497ae98cbfd92ba9a715796df8fea77ae1e134dbdef3cae3454f3886aaf087f187976acb3ad09e76aacb8327db0a859ae537d0709ffb3ea98ebeaef2896b5f4fc93bc7e295ea318c73b5bbb512fdf5f1cc7aa415773d1bbce8dc158ecc0359331b89ae3f1fda8a762bbf3b32cbeb5b5f9ce5ce0e33ab44fd76f847a452634b4abebeea17847f59f75e044201bad9e5e23939528fcbbd6b454addeb9b59e9eb4b2952665f9d3d3e677a87ea57d18ef0efb9d1f876d774a5ee486f321d7f4bb6f31ef512edf519e67f038bf61f91c5f655ec5437c8665f83b32e7be880f6c6632e57911cfe265ba0c1f53c40db782fed4ae2fb122ffd299bc4b27f22d9dcab374845fc95e59debc0c27bc53b5b72c7fffcfe5c7dbac7f4e5f1c9b69854698b6bfaaf0139dc94b741a1fd1293c4455f9872af00e1de31b2ac13354179607dae7576513985e0db1c9696c3fa3d8f5993eef16ea5a93c4c11371c98ff71d4214bf4efabaa5c67a8fd7548bd7680ca0c635c469faf03de7c82a83b10b6dbec512dc465f575abee575d6060fa06f01ed7e1faf33aaeb427d47182b283e3335f34a4881dd8d31199f093e2565b236e963b481c9d8a1a6723368639ac82fb3d11d88ebef68d7407ac5dad903dbbb8c578e49129ff6fa7923c49d784ebee80dee178ae375c595ed01e863624e1d788ef8966fb2f2f654b9a9538f8ff09a47b27fd579ddcf43d57c2a8ec5bd2a0887ab8e7c6a14937c469860a79f8f3e891921d951a6a02ff0680eb723f7519cf3058d2b92ff93c67d97ebaab64c8b36fd41588f3d43de75964d138d17d739a278118e33b9e95c406d79a66793959776576cc67677b931def34ad57c46121bbcbe9c0e30ced419bd21a47fffc36c68fcfeb8fe09cfe7f3e9c90318601f8cbd8831c1ae9fdf1cc17360f1eecaf44ad6f8e5cae30ee7c4f471dc5ae0c5a600cf3b2f63dc8712f5a797bcf3655e9eeb2a5ec784de847af01d9e795ba127ba2a389a3f75ecf4673f9fde3c5cff99577b8aeb126f8f8f3bcaf35c8abf38e646497078ed6a32d3fd75497d3a17f848c72639bb102eee6978e9257470fe1e9cc8d50da2ba5d64eb5e771daec88dbc775ee42318eb3b59c471ea09b7d0d15917916c59db13735a55de9f1e07b4c7a02dfe4e7a35abf400e6caf9c1fc8c877255559ee79c9ba7395b5ef3d70ee56d0cbeb5d0871cc10e8af5f6f267bbb5ae384767a7bbcfcd295593dfbd758aec525f5ee8aa78625eac30c7bad23d3d28e893f98432806a403ddd03ef7739a824070b93110393ff5de4e0c53195d6c45010e713b68f79a80345604d2ae6e333fb776a5e3eb38f55f3f31959ac9ca7df7dd7877735bccfa46ab50195ee54bc56a43ee592f9e462aed2e41e25fcb78f8c67213cb9ebfb65f2687a467c00c8c3b7a84f97912742570a50dd1b2b3843d40b2c2e75b5ef58a8bf2ad1bf581bf6903c7c7b8e3946aa8ff573f4b714f4b27e6c3c16ed7158438c2b2d4be7f10a92fa79d477db955db3cd65fcbc7a630bfb738b781d306ea9d01d409f9d4638b1d9cf7e0ed9bd9dde2c7fd7035a2bf6c279353c61029fc0b55869a5318060d5605c8588235c5725743e77b2d7ff382c85440f76a23fd5d154696b3252a0a988e71ce32410ec71f839bc5f3b99aeb3e6e732d80870ad4b628b7e3e6cd8f08abc8bc57d19284ea95117ec8fb8733cde391eef1c8fb7cdf17808dbe546702deebc8f3bbd72e77dfc3914679a2acd6ab02d05f89ef3fa484510f9c131d63bcadfbc381a2b36adee60a5b3a26bf16ea085dcd4506c60b17d4767e4258e2fca53816f3128ef99b65113f89118f34a5336bec98a81cdbba530c42fe95f0df9ced6784ed9a2b19d19737160fcae77cb87e3d9d51c0bfc20d019796bb7395f579a289ea62b7dc7647580b18b13fe4457de62f97d89b0cd5c93b757960728832fd50bf63be48293739ec03521dc521b5b01a1aef40fc58f2bc78a2bf14715eaf07d19bd60ce58d2d5c1cc64fab8368071030dbe6bc8613dc1832dc258f500a32bfddbce01e7af13aa85785364cae05b535ca761cf0c05ce2d3e07811572535d1503db93a757c5826c9fdeb37876afe4e9ef4f8de352bd93e93d2fccebbc0d5f5e16bd77812ae4c02a9e633ad734e1184dd9d070ac23cae55edf045a9a14f20d14cebf30170d24a13fa4b67f3ee7f3d59c337fe9ed25bce8fca7a03f18d12faf6f2fcc01ce857c39bfe75feaab93f75af33a306c46f03de76032612eea08af3a34990dc078a42210f8ce166374cb53fcbb98c3bae63c8cb8327735422f98139cd8815df4378c19ebe118a0a1d84b684ba1dfe1d802ea1ffb54b13e7f10d8fc26072be4e5f2b81d69dca51ab0347eeb38e69de3eace7175e7b8ba735c5d96e3aa7d1823087142e6f8c4a5b9176ac212cac6f1cec51492956660a932c87290988c86cf20e1368d6c1c9311ff575724ea46f082b29c5fc8e73d634e97c3043acc7d70d9bc39cbad4c5f0a346f035e55ceb5fc41b3a61cfada64a0af20cef521d78fecc4b3f2e93bacf5c8fedcea6a1fed5d16dfd40a111601e1e36d224c664ded3b06df61741cf78cc6179888ab18d71f59bc1ce27315dbc03b7c7284d90c7d0f38960dbc07e0b32833ccea6decff8cbb1f92c7cf5df7441cd5d35511e57562bf8391291c43cee0acfa3d275a138b416b4a197c871278d7b5bd11aa0fb0f8d6d262c0c4503681dd9d129e040e58d80e887d9fddde214c6fe457589e3c8732079f05f73373afa3fc02f4393f5d2d818fcf19e2392ce163dc79674f7ef7dd26bfdbe4779bfc1f6893e37b18f1fb3936ae570ca1ee365411a0dfa175c3f1f7b7a9f46716d7bdf2b92c7f26cbd8434393d954ed71cc3b9723249bd826c177f3aee607da348115a66c1df83968e7dc0aa667d1ba605b1de9942806e9ba767b7716a1ad61a8bd940d6212dc8e2a75403754834019eaa096b8b6cc03ca2ccbe752508f6de367109c944160b1dc5c53a78ea634a7f0eeb43de093f354733c1bc77613f874645db17daff3606bf11b773ce45cd3433905c650ec6bf20a38a6021e75a5df12fc4168eff765627960c595ad3e1d88ebca8cae8a4d9b77a14d0ded1d8277fded3a982d51ede6f57dc5b6a64a407aef9f2c8f05b5e997c13d24eb10c9d367aa0789f6b0ef8125aa09ad5e17e219505e48ee22ba5373ec0bdaf2a68b946f797bb8023cea1b7c417255ade6efa02edcf1ace0f8911e40bda879327c3f80f6a2d0b55d2be4e0baac90ffc177b6c20bc21f61a4368a1f4cf421074c45043a8feaeb0373c2b9f87d088fea5f29ae2886fa8ab0d9df1e9742673083f720fc0fbf1f8f87dc97aca16ce6b9f9466c2778b897d29ee9ca636afcf0793a2fbf9b0c1ccf8de31c4cf198d39c3257dc9744fdd8eb841b19a81e0844bc5f98bb86c49b6c06cccd367a8e6bb188af183e278e19e91e8077136bf0f232b527a4c608edb3d2bf052e56e770ed2fe68a7b553f172ff15b927fee82fcc467f3c1ddf479cbf20292da01ec9b4cf45817a53e97388b9bc0f416f01c84c9bea3cab5cb15eaf78f7134269e97bc4f3f128becdd50c91a4ceac1014ed9eb27fa05daee3928a6bb936919712f18ea608678ec13fcc3d02e37489f2ffcf70f5e6c42d9d194e69660d32c13dcbda1c94adb573511971f4eeb8eb33fc77bf3be8bad7fe0dcebb2492fc2d763f39d5067e4527d61178c1547fef5ef5483333599dec2c88fdd55e274ae343f9f0b4df6e92379a44bc5fd0ed5ddd614f7cbe6a0cf8df7c9a60736b632728c64ae7fb2e3cdd530be5d54c3b7d2bc00686c851af592764465fb01d90dd9be2b64379c3ea74fc8991bebbeebc7557677d484a33455f475f5f4180bc660da715ce03caf08e0d9d455dd35db98f741e0a520be7f3eea4e4ecd17f79326f928080f41a8ab70af6506ddc3a4972879af7f0afcd29bc27926f7522838e65b109a4c8bfa39149bbadaab817f25b62fceb45f5b739397239c3e28d3a80ec1f25a73c4f9542f4f45624e045f84975626bf01519f09925ba81fbbe2caec7e3eee465391294d415892fbf6c45ebef2a0bdf46ef0ad602f8758dda6227ddb17c14aa8b416f13e5ee6dd518e766632e04c6c0cd1d598f9c2543a14f4454ec473b8f795dffbcaff697de5912ea9217e13e90eae8bdef97c56ad65845d91b9ff70bc02de39385fc9911805b22b4293d9d4cf4b9633ef281e13e5543377648463ec093cae9bb1c29c7bbe368cae82da976a7756516c6373f1d886cfb996d759d41cbbf988ba46544373c177deed930af6c9d9b1a17b1ce81e07ba741ca87db826516336aec5f6d2b9cf69f3f90dd74f7c585f501f8feb7c7b740a963a0fded1fa7a16a9f925b93d5670f0fc25b86fef498c964fd02bf46cf29dedae26f82af3fc7cfd435e64d7adeb88df44ef3a0f27961d84b6225136ca07605d0ddf13c57388ce48e10945f83f1623c3fb0cf5b1a0be97ae18d85ee77d3cdcd986af13aea329d24ce84a00deff863a68227bb2cb8586aabb1a3bddd99a0427d3886a6b5ee2bb34aaaff10c05d5834cc643cec5759450e6246a6753af1d43696e6dbe036dc4da63aad1bc937cbf7657a4357640231f1cbd03ed55844585fd3594db8fb04d07511fd0565724daf250bf15eacfb23cc0688ad44ccc7729bcc8aec638a5f60363a9ba4154a7df8f639004bf06e119c818e3867f41f59f360f96500612fb1498be4469289f7ab7fdefb6ff6fdad3549faf53e69dbb337cee7befbdddf7deeecfd1dbed1c8e734b734d95b699b8f69f7d0afdfd03e3da785c17f05b0f719085028fdf03f70d7f86605b7e8258f7cec73acab576f23c6f3efe1dc55b896e8df08df773e2eeca50f2f33f857128950b4d56027f7ace7e0ef0c89d6375a12d33fa6a3c0bfb3548876d1f687b6cf5b760d6cbc9ad971cef3e465fe9f18e4e1e6f0e865fb9f1fafbf8d225df499bfb71be926b046d80d3d6c8ea8ae0d4efda7c6762f2e9358e643f15ab8dce1e96ef233eb3b3d9afed49fb02024f07635e9efe1c8a94e5cb7bbd32877a7a63d920fd5f565a2e2fe8fb3be16f328fed6f328f9c9ab14f390ffa379907f35bccc37fcab99f2fd6bf1add0dc0f6e4708c62614dff55014bc4553fbcd69cb830a78f3a6dcf0cb985a1ba407fa6267657a4f7e2f3e99c5dd57c57919f98cf0911df8374303e857325fefe7e7c27f73e4b8f29e117cbddc3e36bad230c1062efe6de9d17a89b58e570f05fba26edd0fe15c9f1fc00775bdebb2fa86f36c165f40dc9b70e2bc65c0a73a787f597aeeac0f20165c0f31ed281e96d02d3dbb76b2bd899ab1c3bb3827d2be7d89a510d6cb15f92f4d7078775dd0ac7589aaef912f9f3d7e9d1b7959cbccc8531ae0ee2c514ecb9c94f2bf57a5c12434343382237a93b282bc727ab4577f883a3b67caecc93f350b5cfe75aeb57928feca4671b39be6b517dca45315f8edd73e5ec94237645bdd82136dfffec3665b49ed13e15bd2bbb7747ea95eabd7be11a1fc8d11c96195f5aeb8a1468cafa9cbbdaad70d716e942b24f78ae87e28d68be593d77a4de3c7e4635fbbe68bec4be9173effcbdfc54715c292b7fbbe7569cdf15757881dc9c94638ed60fe18d9c92578ced4d853ae7fdc139efb6d84168324dff9c6768f9dc2b25d75ea2cffdbe7596ff0916853d68c5f7e89ece24bfc767e01817c86dfaf9c7f799694df553b8257677fae21c39cbf1632bbc7b3f8f52e18c6d51cd4d0ea774a56728678e41cdc97314c54a2eda2389f6bd069b2f379674b3be6cac3b3f618ce3889d755c1714c5948a6ae3b3b5efa323e36339826fbbc175ae578b89cb8bfbfe7de6fd9b5ec46fbbb8cd7958472d0cd5a9cb47b9691daaede344dd822d74cf79948b05219be622e7ef0665d382faed2277c32dea4de4f7548f391771f17673b0928a3fbfb5bcdef11a56afb31ccbf27078ad9cabf7729b77c7adc42b0a6ca41cdba7d299b8e2f9c8b3672e82f75ff65eddad990bf7ee327a371333b4580e680c7073f2cd35c7728fc7a64c5f02965f88a356e8b756883be6e9b6a5c5c8a17d4a3e3e5f5fad355574cdaadc0d17b99772ce46922b8be08a64eff9a3df3d60231cff2e946d9d83f6480e2658defacda07cc4eb91536f3ed8dfd714aff5eedd03d7e6e591a1d0e055b5039b7716360f16ba1aac4c2fa76ef768cfdf7ecf14e670407f8bdf857bb61ccc0b15ef3bd44534187bade5c57ab0329ccc29ccace478f2e6e273d046049697e0b29e3cfe92db8fbf7e74826f4a385fa8c3c75f3ff2eed37c2ee862bee7837b242f3405cc4fc08bdbef6740186ee4793b2cb7ebaf7551ff0c1e276bf080d26569adc17b7fc7f1fd6e329bb9a672db9c3829ee9fe3311e5192c3fb75b2787a9dcc2fd02bb1bf1e6f9e0ce5d415781120d998706b78ee74555c5e8573642783fb3a3dcd379fd20579bcdf294e0199d86351be5615736a8b4e91af17479645f1421864a1ae22b989b0d8261abe2bf0daf9401e4da7b936a4cdb881cdcb6f16df81f7732c1b18dbadb3b69882bafabc330f36eb31b5692934febfcaf77fa96dda7a05d4fffe3979fc75014c89fd7502f15db4c57dc9d24c4fea4d380fe611f1f2091d91ef874fdb3fdf1ce61a7d4cf119dbc73d4cefcf7bcaf64ae9b2a4fd9592cddd9d76903fe25c794c71380ed78ec5caef469b732dc2ef68c2cfab3a103af2f0ad449f4d19dcc7ccf94cf37228cd261a57eebd63cf0c7500462ce7229ecb480e3d84fbe75a5d29d716aaa20fa23dd2181798cacbbfdacefffc4fe3a11118bfc6fea2f1fdff1a3fa74ee37ba3f1d0900c6f0c7ffafbef87863359b84bf33fd6ccfb62cface9f8d797d9dc32c074b2f8fee5cf61fbe9f5cbc6035fe6963bf60cfca7bfac9917ccfcb1bff80bfffa3f9bb90d9f3ff1ff3b83ffb7c70b6302e6f0471fbfe9c0f71e1af3c976dcf8dea29bade643c39bd9e3c6f747f62bfaf1afc5047d9fa1e8d6bf69e6df34fd467ffdce7efbde64fff38d669916c37c63ff45d1df29aaf1d098ccffb227bf1adfff6b80f9f8a1310fd1109ec7abc6f7af8f7ffcc13c34047fd6f8dea21ebf3ed2df1e1a1298f8d3c677faa1d1436f6559867a7c688c2676e33b4d51d44383dffda8fef55760d854e33bf5d018d8f099d44363981c3a07a6782a8f54eb2bfce7cc9ace1bdfe96f8f0f8da7c5c48383198eadc677baf9478b6952dfbe3e3e34a439fc4d8bfa46fdc17ea5befdfdd0e8653efa95fae3db1f2c1b7d349ef6df0f8d76f6a974abc9304cf4d1afcdafadd657f66beb6f34fca5bf9c8fedc6f7ff8f7aa01ea8fff737dc7d77fc0bad115cb6c61777e68dbfccc1726acc27d37fff97697db18d85f1e5d7d8768dc51767b2f8e22ecdac98ec4949e3a12178c1ecd7e2a7b170530217fffd7966e13fbc19bf9cf102ff3c98cdc84f3d6361b98deffe128087c670618071bca9e85f83b1319ff9f8b3fcac3301e379f469fce6f89fcfe320fef96d3c5f643e0d7f95f9466f662fe1fbfeaf41865f7c40d048277ee3fbe2d772fc70d622a289f466f6e9bbe0ccfee3cd6cf41c79fc6b3e41eb43ff8766d1290fd05c221570704a64af2a1dfebf1f1a708c8def8d9fcfad4753593bb627871603152c35e90d1fd7c2242264014b7d4b4d6479c0bfbe39939fdbc71fc4887937a0113be41e4d65b3b4b6c12374b28dee80b29e67ab57d666edb0c9f6c2e6caf2ac55effd69dd1bb6b4b7d1e68d28bc49f6321ef3f4dcf47b5fcdb7c47318696b79bda5e981addd6efa26abad4cbfb722419415022e55a3b17cdbbcbe3f153f376e7e870e6b6b8982124371667707eb3f27df561a2b855ad85c1aaa44bd7af6ca9eb49656d822018072cf26411de8505276f7e9eb6bd87ab758f1fdd56b0616db5fea4c8b79659adb578604c0b62fcb5e5bc8182f5c1c001878add01c0d80ee7568b3db6f097e87d6940d6a40d7f7bf47009707c859b7f0e575ee58185d1511d8f1cfa100d760d96bd30b43d94047033aa8b1c37cd040380cdcf5cd7c8b2fc208acebe78892b8b7362722633969044cb86714f4609a28503320c027a8313a96cbdcc6e8d47b7632ff983bafccf376eb90f34c836f8576d48cbd036d5b992ab7323d79491aa4d39fdb7f4e1813c6e6188be65bb0fe09507372e9b5894061045e72a1f1ae0f39da6208f9144f0004141190a6e720e7791950c67d52acd47942cde9f8f7b8c93a496c9d588f6e2f02af44ce1c320253cfecacb588141c1302a120efcfc9a3d347cdd9bb396a0c74a84520f07260f32e7408c9b3e4c54f7f0034c65d1a0a3cc3a9ef61802385fad76b1b81e0ecbe93723ac5666adc781f81f9f6b8145e5e1c9b97df0dbe19c0fd4e7dae8d806fdcccef08713722aa42c620369431808fc0bbaee50d584d1581d076d746176cc9b8e1f8184315295be9cc7f60d09eadc9e894cd74427d88d624697887e3cc1a196a0f01aba77e879d03344f5d81ff7e849fd93da79d35d2b9d0642460b1bd79f4b3de954368cc6382f2d6dc50a426011f5d1f9161044c9e68b83f41a6c1b6480e5f15a833c1d24890e944646df85c3fe58359f94fff7a9bb6468337447c8ac08bb20e0ddebf17c7665aa181cfc3daf25a3e22410d1f9d3e5e6be898419d3d17f8bd200621eca45d13113747c0185910a728183dc0c4663c1d58ac84413330614d14fca550b08ea1be5acf7b41e9c59f3bf2ecacc306ffb632d9fed1b5b3bcd62a876029abcf8b1ddac2c0360d6cbe33d5d4815b031943df564428a3915c2d7475e0ea7c87d24a928ee581b88cbae2caf6c054577b0e029581cf20fbac2950c7f523626e5af33609b089ce12ea3edbeb0426df89c9fb8b805276ce70bf6e00b283eb8601a5b9d064f500aecdbe1c7726262bc7a4c899672102584dd55d43d9b89a07e604ccad0088637796ca04fb2e450e51a5592b0bdc95d05d5f0961efb920fb07809d76e7f84f1fcb9bc5b828a1732dc2a5e4fc4cbeb3b5dbf4c26406918d7a3540b4d4ba46b6dca49ef745eb5df77ba1acbf2a0888bf0690b0942c5d846caaba3c81a5115e06e8f808c072c2c60b4293d9800f5863d7f207cdfadf2b425f7165fa52a0791bf0aa927114834a45bee1de380b01ada2ffce9d4722514c6c9a72046f8701b9ca9120572340ceb33f86b17f570dc4cb2900f2e2747e1044496f642f907bd04276e5636477b816f1496c5e5e942107c8d890a541b7ab82760904b86be4c90b4d157fedc07f3b539d07a43066ed40794df836ab0868d4e23b21960b40e90a5595a0b70239eff1628b7db9ca2ffc499d3dc00ddf68a973acd16d5fff1501f91d28cac8f95cb64023b3e7951bc5e3b9fb31c148945cdad98c431afa4650c76f0dd4284e23e0cbf190fea5ab609b9f90910026846a8542d75d6bea60567467203f8c6f2d2d064c4c7eb480326277739ae1d11ee981ae6ca689673e595e0b8e29c8dc2324194ce6755a71e94453a45faf0a8d139c7510ca7a9d772384b235a04a93e15420e58a89dafc9ea329cd6992943b95f0537b75fb2c6db8d6f0be416b9d22883d7b1e9748ac5f9bdc2b69cf24498c6bb7a56272e932a4af87df5d1bc88be9cd6b005b47ef390f683d99ac4731dd17c7e45bef11a9b1e5c90b931d80a43cd77c0e7b86d2fc95002e0f754507d01e418975fe9ba30db9b9c9c471ce5057e8950deff62411fb15c0c0cf01064bdde165801dda470090e1f327870b31f36d773934e07dba5bd38f03a8f5dca6c5cba1cdcb8f5827c463ba00e905946be80b729489e2ea3b59c07986e4bff550536cfc73db753576406bca7a2ef0cd15d43ff1d9e88a2b04eacacbd31f6fb701606bc0bd56454a575d2a75efbcedeeaf6baf435d00b7c2e102db5057d63747e232f2e4792582fe8332bdcbbf5921f6676c5c90056d92505736c426916686fa84f609c59995bea3f95312234677c852e80c6628c713e7c2e0ff6302955592c007cb8fbd15ba1c6df9dcca2a476851ee6ea87e4724ef8a613ce7d85ebba935ba1180721ae83c705f5574366e0e24ff4d91a786f242eeadf341f207e4df9a276f494e60a12b8340db817947b90244da00f73e653bdc04d916de33b2571140f90bb96f26bada23b29afa5c2217046578017444e842ece91a75f5051b2c71fe4795669986b1ebd8d8209373eb0c025391b736df599c43ce891a2a7838ce11f117e173a13d9bc919b73956537b8ed59527260fb6062f4feb26e71ce177c72459326a2e91284da1d73169c399f3a92b0f7716497bbe7f3ad5d401406b32a41151d4ab8a64e4abc9e4d9f0e9625e447ccaa7e367173c2b734d95a857855ee99864635a438ebc07df29f08977762f7366067c07da7728df8b1a9cf01d3e4fbf2fca0bd74df2be712db6ef984a6b8a084b1432c6cc39a93c87da48ac8ae531fd2cf911fe1de72ce3668e825c6387d265a40716360328a34d279ac30a6333b8866c846a17d2cda7970437dce55daf1e431decea2e1275b267de1d5d1d5870ad52a48549df2d5ebfbae3a62f095dbfab794cde13d5c65e57acb458eed2eb00c65df87769af212426a8fd589d1f9dc578ed6bd0f951ed5d72bfcbe427f37292d1b31626330066e29975db3d6fb4f4dc1fad536716fb94adb73ed5e9617d2dcf13f27c97d7eaf23a3599dec2a8c3969f2674cc4b96bcf8f4187aa2ae2e4b7abcb195ce3cb207347fea68ca63e633e80ce0da643ff2ed32b5a61fa3bb73c9d95275c26d2e487e46e8267b0b3019aa39c97e06cdf1739e93c331efbc18248e2f4c381a3751efc0094a008094ab2929a7b3cbe8706c1b56af2b29d2e387c8d3bc0cb95fb2917dbe6b6e6f8502dfa20c5e0eb16ff9e218ea0098c312b6fdde1a958bcda4f7a0428c66b717939f2015a3b9ee3a94254dcfae43895ccede19920b6a41f66591363d52e7abd0135d15916c59db72e7e9acf7a7c771a8f91c35da9a9e9597ef2a94737c8735a1ce0aa378c8aeb977b032f2720bc7c75926a67a7c5c15eba68ad7fce95ffd21f762287660f39db9f0129341a7ee04a1edbebc51d3e0cf10e937d42362919c13d471af6d6e6ba0666d8e3250ff41676ef22dd60a398fe496e1de001bd59ec1b3f0e2e8be3c37dbdcc44035de2ddff23a6b8307ef4257041ad30af53694f99cde8ba3eb5c3ed679706d8ec7410fee13a92358c231585ea5ef1f022529f1bd2a6718af95ad344be9923ca08aa2754be4ae8b6bca12b1b78f8c11a05ecc7dc0a48bc70746f03dbc1cdadde9597628d1430e8eb5702ec9f7c03b65679ba0b8d4b7dcfe901d91fa1ad545da6d9cdf250053b5f78c585e0be5b2c789dc750d73fc27d8a54b0cc6f529ec52d48b7c49bb34bac3c60a58ea24276c75e5d0e25bdb28366ba09e46d483806a6a1239c2752c97c3488650ddd18af48eae342f001a5b2aee56703f94a89fa9769ef2ce57b4aec8af8b89c97d80ce49d46f4672d738a7c303140740b5f65d794b62d764fd621d3647f5e2508fb28263b2831926efc624dd5500964ebc73f7016a0ee48b8564bd31caf5d0c0544460211b5ede9620ef3efbfde9711c00e03a54bf72584680e9cb0b5d15a39eb9184cc960e4a60dedaa6eaf8a1dec54a9093b3ae753fcacfcb9ae7f02791be9ffb8966308ef894d60b1034218af398979c7751df03fbb0bd6a8679adf34918c2b7dd407a191738ffaaca31a82b81e1dd552c1bf3386320002bf0063d55e59de602bf03ad40de88c64fa2ff3fa9b8fae79657f2f779daaf98005e7312d5355bedfddb781138071734d11819907447d5cce6fd18f9ad90aed9a133ad495ce1413db71648ed80fcaf4d8a07e556803435d99edc7aeb03fa7dc0b39b256e1becf91b18caf7c31bd6531080723c8052cff8c72a23c3a9ab241208470ad6c6f948913af1d9b71d15d1cd9c0505fe94a676b285057492bcb1fb89ab70102df5920128e2866d495688d71c8f7707f35d1618958ee3fd6af768ec7756860f3eeeab7923555daeaaab48dc8167575303399fbbd74e05edac23db4d5dfc54e42e73f9a13b289b4e10ea7e775c2f1c82f565d17f9a9c335fc3bd6bfc8ee7ff265e883f3835053eda51872ef38b7d59ce2fa1554fbe562cc9a51c2efe6669ada73344f06e68443f5527a57746d8475d19c0a5d6966b2f25c6f734b33e4e6508f41ff41f346c80fbbc7ff7ee3f85ffb488f4b960ce150ad72e67915f6ab74ed723cb79c98de30797797acf5c97d6eb6f6476906962a834cdea810f325f2bb6f3c16919b6b3e63ae957b07caf7711fadbbcfc8515efd7d732b4c700eb0422eaaf23d52ba176bb78739351370ccf216813057acc53f24c77d128b2418838ea5caae9989c9a1e7df7aae37b33e718f151cbb1a81a193ba88646c0dcb4255bc810f90d588502825af65e2611f24af78bc35d53184028fdf0775d30e97ab087b8ae4519fabe16708d530349c737c869fbcf02f427e51a67ee1e4f95f31067cb46730f1bc646ee5236be052f3aaa15e934bade3e9b59a1cd113ab282661f19dc02276bdc0ef0855045e7eb4f88d6b7a1dca64c526026cc7f83b75e715b3738feadad0bc5f59ecef095dce355421ca33ee08d6da1c1877b9b9a6345d9b6f8563d48f8e31796e154f2ece6747183965f0b0de5f8a747b25bd5e49a7e7f65fc57252ad5fb65d94273f1917a88afd5cde763ecd6e26bdae31161496616530c5989bcd08ab368141db8a627e6b4d1509a6eb093564156234257a4ff6efac7ca2c3545fc9a823fe1c51a3239866fbd862795872c7f478de9d91d1e9e93d3f46e49fef0f205bea28f9df0df4afa3f75fa027b7ce7cf32de03244eb86fd83d89f6d266caab5ad8a6b939500c1750d505d08c2b1c1f575b1dfdbe54293e580e50f9aaf6d749ea9748d6854af57e16c9738d7476338978addd424cbe7c4683e2836734dec848f8ac15c19eba052aca51e9c9b33622ab5c552ae8a65505bcce4bab2e5135fe1d6e40b909c55b518c8c1d8478c2f41f261491fdfe03ba1a64894ae8aa8c6460b6f44ce76eb406adca2dc548c0392c86745792ad7b5bccebbcdcba1a14a94a194c2ebbb94bc5d0e832ec202ae01131f636f3ecd4c56f435a5198cbd380e140a5d68a7482b73725e6d730693d34177918aec1f807288aae0580c58eaac3cd754c1f981b0795aa1ce7496861ac45c24d6845bebaab83599c780c4af5626bf011a8b6b2e7ef0346d760701f4bfe3b1fbbda0eedae7f26b8a62741cc2e74b60300bf82e4735aaba02a23a90c0f46cdae43ba1d0765db41e9eed9a1ef81ad53c601e0e39b498d692f08420024f78a72372bdb6bbb0950d65a09c70b496cd6d19dcaf5bc3d28fe6593b5eb6d70af592319873f1cf490f43dd989de978e62de2801fdc1f8cdf790dacfa7b2cee1e8bbbc7e26e391687b8316ecb9e9f9e805570e8dc81185b3ddd9b7fc1bce5356369d9b80de60f3a7d4e9f11038fe0dda7eb9fafd59f88f1ef9d51022bfa8c9ce17087eb8b89b1e13b31de4513cf2bc5d7c74d75450f4c8f70dc25f8da1077a782fae13f123383d8eadc308d578cecf2bdb9122e0147e765cf509a00c579937c5865ee80dbc0fc4ad581ec7123a409c4f3f0f62ee9eb127fa88eb3807d86b372e6b1ffb68ef2cb4437495496fbac6e5926be71c2afac34d6cfc66b10c502702ca30cbfc0257c32c65d597ebfd6779aace813192ec777743e1715911b7447d5ed7fae2c84a3dfaf9d6f4c530653cce359fb9ca16f1698f5aff5dae0119e63ddefa52d6f5dfbfedee32927e8827b3ce51e4fb9c7537ed778ca057993505cfcea36fc5b26a7728e2d5f94433179d9876730ca53096d7769b27d842310e59f5edb519d2caea1d0d87e96ffb9660ceb4cbe2cc63b2dcca5cd75c54635b1a63f40dcd33ff8e6ca6e23aef728473517ba7660f30eee01e43bef761bc784e07a47eff96cb9a383f6f455b898a599c98a54ad363c3a8f1f62bfbb3a3f0875dc7752736e8e602ed6cfdd3bc37c0175bf570e3fc26740582ab5ef6d2aee50c626ce9eb1a3fd339f94cb3ac19985edae327bd32bc221aad6735ba9dfb680532be6feadda9f985b4f77aaad59a54fb1428fe249fd89a8fe29e95fe078dea97ccf55f234557ab58ededbfb72e55b5e8bb60eeb97fe68da7a1becddc3e9f39873be0bf354076cdc9ccf65ecddcc9e5b8cbcb1159427b80e6e258951239eff1aeabf480d103c2bd91ae273ecea4c1e0fe16825eccaa799c5caef469b73ad10e18cff1c4d2571d09e3ab62a61acc721079f1be84cd3b5510f81f46ec07ba2cc59bda45d0dc898e199dbc39dc7e7f2eaf3fd3c39a563bdf007ea712bf2d99d765f55beb38aee2df9047ebb43f7d6aebe7557f79de03a4cc9d76b9b8b6dec57e8bfa1d8710ac772aaa903f7c4189153337e44845d9fa9f3bdca3a7c74bf7e74c7ecce4f7e9f4e3db9d79d8f587bdce6721c1e88c733d5df029f23e4d710d3a8ce1873e7028b01bee97510e6b0c54833b866b5f3d41c5d97c3774c5e0ceb7ea7dcef94fb9d72bf533ee44ef145c4c35b83ef328cb97009f7ef99753d2b841bae0a087f58531e1dc465a08a513e6e3dc6f292e65d27f17193e5e2dc9dc177b646840febc961125fa5e69aa0bc358a3033d626837ab443a13b58e1fb12c95018c517acee34c2164c71c0eee383b8aec538f8deedeac0f2123c989f303f80f7efec58dd1975cc6ea82bda614c81c2ba8ae9c24ad47ae6710294e60228cf0190773e678837c81f807117af77c5fad3c3e715f3bae3b39a964fa8ab93fff62cafe3e39f9f669a225136bc73dbdcd264e800cb2feacb0a4d26001a0bf7727a1b3d909edb443809f05ca298d95e8deaf5d7e14630084ccc2bbfc0f7b640f8e58f7369d424eb529293fe02f27d3637fc2dd4fabfe13d237b15e5a3c9dda788c08afadb939f4bf4f3a29c0903fd1611584c8bb6b0eef88cfdbc513d25e66ea92daefbe854c17cc9e5ed469c5e4f33521311903961bb20c20c56f540efcaae59a2c7e4a2dcf6510fe80b1a53a413795bd9cc85b64bea1ba6043f01db6ed08f36bd41607b600af5dfa7e40cfa688e62cf8aea9f3f206e14edf5a9f1229d36f9b5f383df009de9cc7f10fc0dcc61971333faf0785025d9cec6823e659ce763fb51d2b53a7b7ec8a5798dd3ef3b0b6701d78cb69631af5a173f3bd6d9ace0688a149a4cb36996b0112e29d7a9be89046e4cd531d7e54b1e90b5f4fc137c8729bea75d9cb1c82fac850731d1d370755ddd8fde55b296a3000f696db21285622ef1d8ebaea58c797c93bd542b8b1db866323ef809631b684d27f4dc503ea05ecd9302bb3bada98749827b5c6a8ebde1f93571446617a88fb5a6be308d69d1a63f08c727be2fba578b64eb2837fac7f9dba7f09ddf2ecff95571b46e90cfbc64af4669fef00bf1969fc8977e299ef2233c56eeaa2487a553b517ea6c39cb5f9b35b4490dbe05fd93d49d598517ef4c3ebcd378f04ee5bf3bc27b6733add0389477ced18fa772155d842f097320b2262bfe4ae882aa3c63e7f18b9dc82b760a9f18f94efa3c1fe735887c85437d64c4e6c73cb585b1ca43baa7ae58a507f7595898d087ad21be13fb0c21ca4f9e834dc2118cbc39c97526623a29d9ad95af20ee854171fa44dea6dc58efb1c96ab1c977d4af77fdf8fa337ccf19b2fa4cf02f2993b5312e246f0393b1434de56688c318f91b365a675ccf46bb86b2c1755d693fbbb6184e9f01093e7fe4cbcd85ee606593be499d91573a2bba16ef421b738efc331ce743b510a89606d7e0c4f6c05dc62bcb38e27dac43378fd07d7b464c12601ffcb51df16b37df758c4bea9a5e676e32f6ca567ba7ca4d9d7afc0dad7924fb9dabceeb7e1e2ae2a965622f35e048b5e0199c0b2f08cbec8cf311c714a1ec1843f9c9c173b819b9ef47b1d83ec2678be4ffa471dfe5baa22d63b2f2d2ee8ab5d833d1bbceb169e2f1e2da74142fc2788dc9787a9d717c69652b4dcaf263aced7263bce74c2bfa8c2436787d39ed20ddf27c463d8b02ede8f587d9d0e4fd913c76487df9a7d39387f1173ed61e20986657b703645e9eeb2ac67e384b6fc6988c4dda5444604db8c978c851706e16efae70dca0ce9ed7015c6bbc8e3b7f2fc6b9317d79a1797228f06253e8a63ffb09f3f307f35379b5a8a406f5de3f74ef1fbaedfea1fdf3720ceb2c96455b69623c2c059f75245b6aaf7c0fdde9ef4f8d03ded128ffcc0e8aedf4cab92d7909f59315d5d8115ea49f43716632746e5efbf8332be6982e27afb96b673d37398147394387dc21b1deae9a838be7795e2eee34f9dd5ba7137373e9752eccd1998cee194a7edfcc67940173c2ad744f0f10b7dc5d0ecacb81d29a18cae6b7910381a7579a0710ef13b68f39a80327ba2a54cde766f6efdc3a81d3f2bb1959ac94e7cd7cb774be37f3bd4a77ea91fc6fe673656a5e3e636f30c2abbbbe5f268bbd33fc3179345d935e561b68136e6ba0decc5628bce07e59d39329a18bfaad12fd8cb5c564e1f8a2f8c12963fdbcf1055f0e8dfd5acd5aeba9918f54432df520ed8b9dc7bf886bef1dd447da955db3cd6564bee618d8dedce29a085cfbdf1d4099a011066ff6b3f7d86c553c86b877b2564c86337a0efbc3442feb90732d565a690c201836186f21e252477acdef3b3bd9eb7f1cc642a2af05faad262b87d0eed654696b3252a0a9880f1ee327101c4af839bc5f3b99fe8c7d05442ffecebc98e115315c0fbd17e914e9bd0c1f4ac9be89846e2018a3e59e7d981faf4a3caa4cdd7fb18ed9f10b54a9ff2fb2f74ec6552ddb635fe2fe3ce92ecddeab492c5d82fd7e2aa74415ffb3029ed171db715faeecd064e5f5c15e1fc00ddf68a973e41ce69cdb8218f2217b31e77359db317bcf9fd05f8370db6d6c4b84f0fb862aa239dc18eec52998b187cea26c7a60632b23c748f2444e921cef8887203051fc995b695e0034b67f1bbd367b5c9fd8473b794e7561af5cd03f22d84957f78f86f03d67d401601b33b21f07312f06c6f792c2b1ca51bb7adc9ea3f3c0d755894275ba1e8a37425b6e65a33c68dade4be02fce34559a097c67ae33ad10da7da5fac22e5a0383b0b9d25cf3084f65a7d771edf98ba3b162d3ea0e76358b213735141b586cdfd1197989e36bf254e05b8cae0a707e493b3d81ad89f1c03465e39bac18d8bc5b0a87fc77c80d27e72c20bc51e283a9726079f2f468ff5995d871355baa48870b7b327ac11cf29b225306df9ae25a017b6628f05d2f11465e6085dc5457c5c0f6e4e98de78473d709db5934b07977a5b751dd066bf000617d47e7c050a1fe904343d5815e81b3b8e4b9c895ed287e71ccc68ae58ec4a6059e06a80605f58dcadb53fb18abbc3f3d0e1160bb46a22a9fcbe23d2fccf38c28977b7d1342a9983fa0708e85bd9a4012fa432a94deb4426eafe2f35f989b7e1bbebc2c7a5b872ab45b4f9eff68d39b5c72fea2387a91a5419bda4807f8cd0ae4fc9e8fa92f36b832f91a306e007acf1931ec01d0bd88fb1dda5aadb93ee42833e426243e18e80ce2e386bf7391afee47fd59f5c5014d6613d70c0d304778640786f06f1867550402dfd962ec71798a7f17738bd718dfcee131c9ea8c52381b83c0e63739381b2fd7c0d9d81a7c2bb4895cd584ed817cd4ba7044eedc5aa9bbf0cead75e7d63ae22fddb9b57e6b6eadf6617f1bf1c41fc2c93ee637943f93a5cf636ebc2a19fb7baf761ef3cea2ac34034b954196fb64870b8cebf5231bc464c4ffd51589aae06397f3adabfbd4d056cac68d91cd74c69c4adb69b783090cfd5c6e65fa52a0791bf0aa629bb5a61c3dbc3bb78622423bbaafa922eaeb3f2b96bac3268fb0c8b7bada477b6766304dad10d5c3132ee5e616de1b9ada770cbec3e838a6188d2f3079408d495fa9c5cb213e5724ce086d1a4f0e516e45e9477e41a82b1ba88719e22364725cb83e68dcfd903a81dc754fd40cec70fb23bf8091291c9fcde0d2fa3d275a138b416b4a197c871278d7b5bd118a4743fbce62c0c4503688df19d78971c0c2fe59ec9becf60e616d435f0d7e7f0e650e3e0bee67e6fe7b477ea9ea7eca5a05e26b2d8cbcbbeec8ddf8496b17526b2f1c8df3ecdbb8257c822bfa2788e3a0448d42f5bd8a7937235bb9640dcb411ba1642df3d1584a7abdf2e22a093bb6446c65ef797b5c6aa7d60b5489db978fd99f16afc7ba76572382f96e4ef55daad4b857a8652f11a7d93febacb8b2d5a783fa65d4117f8ea8d19178c1fef92e8ad11eeacbcdf95cb64737bde7a770e1e018e5a2949d3f6d3ebf6571e933b6d2b5edfc51e2de85f7e808da2415f369b9f63eba7ff1dd6cc33bbebd3b8bf06e37d45eeace879f8363ab52a7744d2e90a275c17822e8ec453152640bc6f606b48979b04579eb84bd8cf11b2e8b395a578d84cd03aa9eb83b8ecd9e87a947e2bb182f636a401b96ef3405beb3d4dbdc5253f540ff186eb391a10ee6c99a5bb2ae042f6d10582c37d7d4a9a329cd29d427b607fc6bf22240fb64cccbd39f4391b27c79af77ac743d9b2733ba2a366dde85363ad4d504affbdb55e411f75c68540dbe679bd4b29e9c0b2aa8a5bf0cbe1d5987c866f82cbd32480ec8d8fb1e58229be670ad6e5ecda1674079c1f7675c6758dc8743277dfe43750195b1882bd9c545ba6faa07501754e13f2a730fbfedf856d0fdabe39eca89aec0f78f1c03de5d4c672bf0705d5ad00f7134b5e744b2b5cb01a21edc29b2c778b084be3e7c1fface5b33cbe5f56e3203f073f2e8c8bc1b5821aa9bc11c59783cd8f7efda81c9af1dcdc33d0786622fe1fb63ff9dc76b62332e30d3e3c775388ab482e3a95adb5cc17638d986489ed3011ef39f689fc959bde6be246afb96d05681b69611f3b2619e126293b186b299e7e678b17f81ce98d0b567baf298da13522384f6596f57f43b4ada37a5ec9c7d9d73513ebed2f74bc158ceac753b87a72ff9dc0fe3ebfb88f3f6c13c7ee5eedabcb3f0996a713c2988e373f5e01727f9cd4e8dfbbfc7cf99a058fb4ea655c4191110cc1b64b7585e33c28c0ca09d83fffd34d3fc29941d17c5b419cdc13ccc847799155716db4b71dafea8bd867ab73709fee48f9bfbe7ab11722dcf0676fd716f0af98835f1f1d4d9030975f9ab02726379578dc5fb5c68b24f67c7e2efbd51f7dea87f5a6f94cd77429d91eb88b33c27ef264d157d5d3d3de6f2739ae2a520796411c0b3a9ab3abad748df54f29eac331658305f5cdb654e76987c248e19ea2adc6b9981f72ce2324edee79fb357e94371514ca6391f0f69cc4d80ff56437c5b5aeb8a0475c67b84c98fc77a063e30f9b7e6c9dbb85fa99b784f37f19e6ecfd154e4eb93b32101d203846a5348cf17c674c0bf5f9b0c58463892b8563df9ecf47752ef22b81186f2886415ca8be5b5e665623517e5dc6639a031f04eeb39981f82e4fb7675ef9f6efd6eb17e258537b493cfcf84d3f0928331747e0df230835d34e1b6b6caad4d564c721ade7e0df2347337eefccad3e677af53b8449d82f339fa35eef550f77aa87b3dd427d63367d443256d1a3ac8c63ddea612ca8b7d60dce339b2ad5236799b1b26f2c5d5ce6711ae614ebd348a1774c595d9e692be88a3f95328c3db4c6fc18dc446906f169acc3a65530b9d447dfb913af1caf3fe84f1134369be9bac086d21b846dbd45d5c07e64ce6fd881323b6054ef739e517f1a5e67889687ad2caf2b995e575285ded39fd847d11f7e3e071d5550353a40b9d037d99195b79cf56d9dcacadb26fff5f04cb4ee0d3cf15ba126d75b995e50f50bfc767c1b22bc4883d717ef73ecd8fedd34cfa2f246fb58f8d342175191873e6cf3e85f46ede792d7d564b9fd3dc339abc5f6ab35fe2754298493ca0ac30cd3173233d9ccf093bdb1925e6928865e4f50526edf3dfdd3e712dbe13f5df5d3f1e3e054b8d698516df42f87456c83d6b2ae76a1e989fc9573dea4f4be4112f5a7371742e771be56ea3dc6d94bb8d72411ba5b3d6e29e73ba549dc92dc45b927a311b3338b7eface80e4fbdf3c6ed9443eb7338a6929407947f0cec6e2f5dab52e1dc9638b3d13aecea9edef6f29097e196ded9600b9d6095c5f7d35b109a4c8bfa39149bbadaabc16e49d9d92fbaa207a607aadc393762b31c9cc7addb2b8774fd425707aece77286dbf9632d77e39b7be11d5c5b022958ef1d1d3e49a7e3e1c8354bcb2ee5ad8b4cefe746b27ba1a335f984a87b279393c118fef50dee598fd11f3a2628ca2b86ebf503e33b2fb4b57c136b727d497e01abcdb7c2b14baee5a5307b3a273918a0fecf16ca3f58477ef5c6f738f16d42bcfd4a4cf83695eef68349733e798f47117062337ad2cce5654ffa26c80c60e56d66437b6827392f29bf76a87911ed1035dd94c13ebf5646472dc44cfd2a4c6f4449fbe841eba7e3da708df6df9fd549c5e7821b8a8eab91c619b95a60cb6fbf1a7d4f31ddd1757e69073e1dc0c780613fd3c75d7a10dc9bea472300577ee1bdf72f56e6f2ff694b67b38cff25a0b81ef40db66a6ab42aaefafb63b3bbfe67d06efca2331d35c7d61ab62f0aa266cde0fc4c618220e69716e28cd5f57f053f07323dcac241f03eecd246756dea671b512f2036544694e5f995628f0091dc403d4e366865c109d434369126c31b045cfe0916e8363a952ff714dbf47807261e15aa1a2f8ec2dadd9e7c3f0f3eacd3f6772b4a7637a10bd8e7aa093fa9e60af684c67897a9811fe0ac6f0d3944787d4aaa33540787b2cd8968dcd5d14a72127578dea26b1ac4e53f2d98e70f124d79c20bcf0b5a68a448ee13c314f019639792a74a5a6c596ac75babd3ebb4b6371df63d8f718f63d865d770cbbf2b9bf4c4fa6703bb8eb077938d338aa34d2e7e361190cfacc384bc440ae198f897b5094e41d74c3189d77ded03b6fe89d37f4d3f386de42ce321987b934367e7fc8d1057de508473c1307ba157ffde09ac418870518f918f3301dbfab628f9d9b9b3c2297115fcfb19abf433c731f51f317618c9d8bdd30225806f1de886ccfb1187765f9fdb9c0bbb4a97496afaa083465e0627c5374d7dea46c46987a09ecd6e479f2ad90233c4d6bc7e8ca0b4d795c589eecea7c0761bf62ccba1ab15bdb156a5355a4b373b1866f44264727609715f8b0926bf3b26fb26233f6f71431e9dfd1a8478019a53938e2b154e8abbd76ffccfefac4384d88ab976941db255a8349b297d656c5b5c94a00c584ba7bf27cd9d8647b0ffbe150af5b9c8f83f6a4a9206cc210d93f6aaf3c2766f9f7a5de6b7932d2c724469bc21b2d83f197ded3425ecbadc9e894cd74c2dcdc44f17ccaf268e5ceed142cbcf49c9efed5579a4da12bad747fc06aaa085edbdccae2091fa667ede2a318f7cb33547181e6f9b65e59cfe5df7702565e75992c38af198ecf3258ac07f9460de833746dd7f246a578418fc98eae8a8ca148b9b66cf1f32aae457a6ea7ee43bc1fd6739313ba12b07c3d48e45a169a3a75acaeb8b23d30d5871c377a015b68c3fd5365c5e25b7343919aa5f86e8f3dab2bae3446de5afb3839c53aa288dfd6e742939180de95a1cebac4f3e69af27889f3e0db0a986a4579dee275bb0d5dcadb34f2d7a08d34e4304e9342e22ade0e9be91f7b1ed8810bd7c1f2f263b71565053e37d0a378e3b13316d555a76d82a3182a6578c013753a877cd343f6cbc975b3f13af9f2d2503b74c2674dd5c866b835163187d425ea9d8ab8e0cad67775771c2997ae7f4ad740d791e34ebcef3c4e3a9cffc158512b7dc2ad081e6b625f075bcc63d1827b94ac8f0c74b5573b865d5e7fd385e6718bf5c6f7dcf23db77ccf2ddf73cbb7945b0e32b8188bccfdf7d972cc39f349d47bdd628ef958ff04c6c959246bd16e99b7fe8ea776c753bbe3a9dd309e9af769b048923d311f92334ffa27b7c22bd94ff7e8e6f2ca9f32b77bdefc3cf93c8577ad90f7944f3ddbb7426e662bb46b4ee850573a530df3a9a371dca85ca6b8ca4e99d32df4980b076265a9f3a364b15be8ccdf17609cee2b7712b5f0735d9128782ec75dceb579e7545b3dbfc7c003c0e4fbbb674fb9ecd8cfed954cf7431ec42cbc4c4fe8115cc4d2eb908c775e2796186154d298932029cb935afa67228c4c71effd67f0600d701f218067d864ad9c3a092e1b976b26621efbbd55c8c7d96c3fa0afe6e0fa44bc6fa87748ed3906df6273ea251c74a7a6f55f8c616e61cc7e6063ce90b806da0a6fb4df263ed7999855b91e9b83b59325736ea57b2e8be47e3f0e77095feec5c99c03c762e535d4f9113fc327f1e5f6780aa25acb13e777af81be400d74de3d72c82fd598cef255a181aea25c1da9d9a371ee0eead68f8e751dc2a5ba2497f7b175a8817b4a531e9d37450667f2f044772a8bb98d2560773147626c4744fc31bbbb34e28fa1b2f5b6f5dfa59da5f082f621ca7bbcc4bdd45d1bf5d9c2fdb0c2ec3dc8b996374ae81a798af0b54eab4bbce7f5ee79bdc231def37a7bbaee9ed7fb5df37a3b7f06e86d3aee8dc2dfad9cd7dbd490d78bf46818e51a4a625edd84cf91ec29bc08efd7a9f9955be3fd4ae5d4b0de3cb58ff4ae373f162f36c2befaecb84ca3681e9d1d9e572d38b2d04fa0a5e7fe68ed684c87d294cd4a0f51ac6c6d792dcf503650ee4393d5033de97327b08cf4f6ce761650ac54a2b55d9d4006e3eb46fa9500e1891f72c398337e98e51720365537292398f3d29c703f4794c4bdb5516f936bf22d1fcf9d0b4d460f4cb846a48f20d1e794587f829143d6c86405e86f24e2b35c1ae3ef46f20f15316e8fddf935c69be989a622591da6c6f0b938839e777815a26b4119eaa4f9563f39c6edcaf436cd5735c9597693f55e65fdebdbad2bbafbd78573bbfbd7376a27b6fff1fef5dd1fbdfba3777ff496fdd14cbec780e3efa2f5c25801d3e633aacbfa485f333dc6741de3a41e8eb5cc3a453e22b4cf57e624836f9db06f49dd0245f2513393457d78137d086d01696e2b28ff3483efbb953ab46aeb5dec73eead45024316614328cda82f2de367715b5ded473dee5b836fd126df77346fe4a0baa5ae0ccf9903d7fb963061f6cece219c8dbaf0b32f5cf32b176049a5b05efc816b284d645f9a8cf8bfba2251378249945beb7bc69ceac29f760ed7a3277b5c6e4f7f276bc492eb5f17efd42ed697dadf1bc2c922e37b49cb5f357eccc239de0246ba535cfb9ac6d27e55d377c6abd25a9adde9c24a709c5fa816382f7653b6ee35c9977e81ba57527315ad49545fb55fa73833195080ed58e8ebad2dafb5d5df82591eb7cdc158970afd5109fce9396101ae40a15f6b75e1fb475f8de75e0117cbf1f14a45fb717cbcf4e9e3d54e1def7e7d5bc977dacafad477aecc53d7c8e7f270684a7e97e00de6d4bc6b8cbb321429c38d80e5fb48ec7dd6dbc78a48c77287dcc2505da03f5313bb2bd27b77da213f2e960db04458316a2fefcc5e228730ebedd7a57fce7984bfc73ca4fdbccde79cc76f723ea4dfe37cac73eee794ed23f07430e6e5e9cfa14859bebc873777a8de3aba1b745507960f2803e5b2e9c044dc3ca3abcdc9f246fbdc9de9389a632ae05157fa2dc11f84f67e7febb7e43d5035965d1853ceef338eeec185a13aa7c4c1a3efbb45b5d799fb2ce30fedece0c1e1f1adb08fd274cd1769aea9d236ffee3cbf96db64d6c7f62f1f77aa00373cf75d87629f05726cf2399c7c0730cb2f28d373e3327af3dde05b087bb1629ea4c8ef3ea2bf644657c5a6cdbb81e9590b4369ce0da5094ec1c388f780d9b7332b9c113acfd6243edf01bf2451b3313aaceb4c9623380f9b6793ef6471172fc7c1e5cbf363bafbfc1eb0835807057bbe093eaa07c4c638db37a93becaef051ba83b28ed92ab9324fcec3f078ae33251785dc0a67ae1f5f1277e6a467efdfbbd1fa137d792579752e62a71cb12b80edc9e1581dcc0ca5e9bf2ac4a61c5e4b2f0da69fdea624eb19ed53d1bbb27b77247759f3dd4b07e343f50d8765666bf1f2bba174e6e7dcd55a110f75ce5d5ba40bc9eff15c0fc51bf17cb37aee08974cf48c6af67d61dc8dd837b977fe7ebd5e715c29237f89e7569cdff5747881dc6cce9217a6352dc0952e19339517e7bcdf38e7dd284fda5aeaf938db25c7bf6f235458fbadad9cf97d351fafaae4f70353b12adfa37b3a33ba43f1193872d7bcdca69f7f749fa595cee7f300945c6b609e754ef6fdd80aef9e9c73c62c76109a4cd33fef19f299639073f21c85b1928bf226ebc7fd934bd87cb9b1a4dbf56563ddf909631c47ecaca367f1a5bcce6ce7d5eec8ddc3e36bada39ac63eb3712df66ab164a893eefbf779f72fb88cdf76699bf3888e52c0635d3eca4deb504fb84d5be89ef328150b4236cd45cedf0dcaa62fd1d665f2d737a937a1df7342cc399f9351d950053538f9b5efacf85e0227d5357d208fa6d36bad817b9b77c7cdc42bf26da4fd77563b13fbdfbfd8f9c8b3672e82555df65edd61accee0de5d46ef666286beb4d61529d094fd7c73cdb1dce3b129a5b9d5553147371cf15babc41df3741bfcbedfbf987eb3f84ea82914a9f1dee79a2da8fbbec4bd94773676bd7d116778f69e3ffedd621be1f877916cf7a13d9283039bdb9f01e56312afc73ea6c0687f5f535c64bb7335d5d4019079b0d087346ba883d9ab3a084c45fe6a324d70025ede7e7d3640bd80e86fbb7771e85de97ea4be63c3bfa9c1caf44697c2770b7515f5aebc133e39844540eec3c47872ed8c35b41175554cf0c609cb1f747ff923748dff76e6bf5e656af923ccbd4fd3ef7d4fdda7795c6e87f608984a27304fc06cd8ef976a72e68423cfe35c9d1fc0716e6b58eb228c765c4bcfb881cdcb6f16df81f77eccf9a731adb9c977d616b31f27c5f8071c3c1fc0f2127c9293c75ffdf6e3af0bf0fbefafc7b409a09c6a436ea223d9101c8bef50362f87085fe5f2fd5bb10ceeeb7411601e6229b95791bec7f81f72f24edce7414ed4918439b54527c997d09187c3b7e3fdb0477a608f72306b4ab329cba2988f1f6ecf0c7500462ce7a2de924836e07dc16f5cab2bedd71f159e79d1b2ba8bde7fe505f9ff66fa835e2fd476d3fef13e5bfeb8404f5cce3ac658290433fadd80b641ac37e13c5a4ba1cba13ec6c1b4e7f4b6d347e91a5835bb33b69fb7c9e3c33cc07d49304b92b2b9ab8338840975ae3ca67b8de6082789711c4dedc1b31ceaca067e9ed1879c3c9aae2f83c59d399f022fbad83fc33a682cc371e5de3bacc1034a97a5b5a648202187ef26b3996b2ab7cdb585aae883f7688fa499aed0ee4f67f63f8d874660fc1afb8bc6f7ff6bfc9c3a8def8dc6434332bc31fce9efbf1f1ace64e12ecdff5833ef8b3db3a6e35f5f6673cb00d3c9e2fb973f87eda7d72f1b0f7c995beed833f09ffe0a7ecdfe3b01e3bff02fffb399dbf0e913ffbf33f87f7bbc3026600e7ff4f17b0abff5d0984fb6e3c6779a6ad2adaf0f0d6f668f1bdf1f59fce35f8b09fa3a43d1ad7fd3ccbf69fa8dfefa9dfdf6bdc9fee71bfdc8b418a6c5fe8ba2bf5354e3a13199ff654f7e35beffd700f3f143631ea2113c8f578def5f1ffff883796808feacf1bd453d7e7da45b0f0d094cfc69e33bfdd0e8a1b7b22c433d3e3446131b8e87a21e1afcee47f5afbf02c3a61adfa987c6c086cfa41e1ac3d4d83930c59379a4f03f67d674def8ce50df1e1a4f8b890747331c5b8def74f38f16d3a4be7d7d7c684873f89bd62343fdc1d22cfdf743a397f9e857ea8f6f7fb06cf4d178de7f3f34dad9a7d2ad26c330d147bf36ff68b5beb27ffcf1371affd25fcec776e3fbff473d500fd4fffb1beebd3bfe851609ae5be38b3bf3c65fe6603935e693e9bfffcbb4bed8c6c2f8f26b6cbbc6e28b33597c7197665648f664a4f1d010bc60f66bf1d358b829718bfffe3cb3f01fde8c5fce78817f1ecc66e4a79eb1b0dcc6777f09c04363b830c038de55f4afc1d898cf7cfc597ed69980f13cfa347e73fccfe77110fffc369e2f329f86bfca7ca337b397f07dffd720c32f3e1e68a413bff17df16b397e386b11d1447a33fbf45d7066fff166367a8e3cfe359fa0f5a1ff43b3e88c07682e9102383825b257158efedf0f0d38c2c6f7c6cfe7d6a3a9ac1ddb93438b81ca939af4868fd071864eea0a01de6da9892c0ff8d73767f273fbf8835c1ee822d486dca3a96c96d63678b4b6d0211a50d6f36cf5cadaac1d36d95ed85c599eb5eabd3fad7bc396f636dabc698c0b4ce5650fd87cccd373d3ef7d35df12cf61a4ade5f596a607b676bbe99bacb632fdde8a38e42b5391294d8dc6f26df39a03981e3f37e1c4eb1e98eb15de83d6246b3874dd85c937b77f668239d091b4bb83f59f936f2b8d95422d6c2e0d55a25e3d7b654f5a4b2b6c91c057fe7863c7ff058151bde88aeedaca86fa391437b6d299a3465ca5bff73d9bef843a2353c84957f1a575ee58b272f1fafeb4301530870e06744ce3c6b4c386c1c166ef9f3c155f8051837704c8388af66ac849ba3a70e38bb2dd5aec643017aceb9bf9166c89ac2d76f37884f35cf6daf4c25036f0a2864e6e98791ea3abe236cfb881cf34f85668470061c9bdc7a0870830c462dc95e5f7739bced17c6320a07ca03debb9c9258114755ede1a8abdc4444698bc0413f3000216d24780f4ba077c7b47da9e0575f72cafb510f856446cbf3059119140d97c676e32f6f6b5cdb9d0a0d5c344608091434391b79818a6b58e49e1fd9e63b23a347c29b86eaf136e64f023c7e65b6b53696ded3697483e80088c28028ddc816b765ce9adcd457be5186a0fad010ae8be35e3cfe1e67a54b4f12f026cb2de339499e2b5c5ebde5ad9cf9967fae2ca64fbfb4665465e0f18ea4501bb0594599def505a0da4e5a3ae3c3179f04e8c6407e946051ac52fe5406cf2c06b40047c0af71f2cc9338821dd9998ac4c452053b622ce0d45725332a9eaaea16c768443508662128126a5296089c041f99d915f3749c2e1754360347dcb6b318682ce1e7a9fe5d1f13c35af4563409e9163659ea529cda9c077184d01f30411113c971139c4d2e63b8189405db85da0a37da344443901717c970694a10ee6fab01cc1c28949667466fff4395af33681c5b805a430177e9fb7712db6bf3095d634ba7bf712f27b005ec2c9c92cb29ef11d5492e4e9b4a2197cbfc4b6517c4f9624ca386f5d072b2da483527b782e107f62ae288953f33b6b231c48ced36be59dc7ebbe93ef8476775a07e064421f88c062b995e94b81e66dc0abcab9963f687e38d952de798f03bd31e06189b51236794174a14a203d617794008d8d6cdd2ca9529270fa2260b9a7823cde1a586e12d81313b79d4c327e2c0194b6773f80b82d71477d3ef0ca63c470789d62a2e6b8097e67132e2c4fde5a7c6b69316062f2a305d1790b83919b563609113506291ba0b103e8733d5a704f9f73d733847ebbc934b70622dea5d79a2a5621910d4d66034a92c7562c68145d8d992fa0ed6ff3725803815b5b53a45f50dfa2a4c719c4a87de46b6c108817f65b10c169109d2de84f435f05eeabc9caa1c6a4c91d1029e831c0dc2320b9a581719f37939f53b4d64eb4d609a0b6f3e7f1b97c8a77438d89796bb69de2353cdb96a90d944269feaae15cf6e07b4adefff900f979c0aefc6605f700138840dba84521b2908898e4adde98c01bb4d7b73b12d63c005f936f4179c5c4259ebc30d9014000b584bce62ae413e7021911f92ed3b02d942a042c453a94b0d5e5d018d2c9247061b17a192288d224107904109edbb47839b479f911eb82cb823e639f2f92ef9dce45329efab71e6a8a8d7f6ebbaec60e684d59cf05beb9823a2f96b1aeb8323cf9dde6e5e98f12e7a1a2fd7b12b0b301655215295d75a9d4b97edb9d9d6bafc3c50b2d0a48818e9c875057d63707943bf2e439d12b179069f26f0515c320ffc5c63a69a54fe2e20de887cf0cf529267f42855afe94001f433d335f0a9dc1cc507b8ec67496022f028187ff074b1dc74ea19d1cc748b1fcd85ba1cbd196cfad2c66742b40bbc378ce0962fa1b5aa3b273ba3298340d741eb8af2a3a1b370768fea6c8534379c1fb7401d0e88838474324cb28d7b1d09541a00df1bd98c881209b0dee7dc2debc0d72b829de33b2573bf2687cdf4c74b5476435f5b904c03994e105d0db691bae2e5d7d49004394d752a559a6b1eea88d72d436c9b34900ce6d680cc9b1755011f8d6e63b0beb1ca236b427709c239c9382bf574670af022b9577e2584ded4579acadc1cbd38fcec7a1c27055a234855ec700fb67cee71245b16580cc48912f0264cf69c2d9ad8deac2bf6f53058a79763bdfa17419cd7561338032da34652834187bad2c8894b357743842a0fee978d9258122f9ced66ed30b93c1e4107a0de4866fe89d5ce29d1c5a0f8b1db8a6fa747ade7bba2f5b50b799e9f745325ac61eb92409624f53254ae0e9958e890fc818777a82d82255e770797f359f2cb1581ed3eb01c65df8772955749e13273adc3c530880880ba3119904bf93ef0bdf1fbb3ceef563332f09bdb7ab613a3d5683eb79e29cf0cededce9ce3ea96120350bb5c64913be635707169693c856a93ef6da62a3c572977e96fc08ff4ec69fdbc453146b3c70ef5c10e420ba9fe2b5bfbe7d346dbdf5a94e2fbddfa7ea78f22ca447e579e29975ebf3a8262e7966919d13d5419a4a6baa27eb74cb3439dde53523af71bdc9d5ed924142c79c42985590c74adab5418af8a8dba1356513d94093f1101174a73f83ce00ae9f4cf8baef2633003fcb90925f4b77a7498a9244b389d8609ac8c85265d78c6c1f5e6c92d848ea3338eef239cfc9e138474e8cc58f622bfb4ddcc7ea1dca122e97d2d9d9ff727ddc28a650211e79508fc731b10401f12e1e61a4c806d78ea60ca628871fae1d5da15d83c4954d7630837283eb754fab3511aad59b38a7d69c08c45796c939c6f6fe75d7a1727ea03cb9eade193a569f12cba22f2fb1cf4c0353118185644bde963c4f67bd3f3d8e034d8687629cc5728eef305f5ee8bb7afeb8215be75b41514dd891b35bae56ecf0b8aac4c90fae39ea737819043a03284d593b6f8408314b5cf7e365f073389cfe81f4db900bac905b939c2cd47173a12b0524378b63e6ca666eb2f656e0f5152603857b23332887c4688e36e43c5bd9cc055e0c346f13988c1d6a2a3733949e6379f2bbc98a284e64e5e8f0a3eb5cad86ab706d4ad776e5ee5314bb69c2318495be7fa8a9b8ccf7aa9ce11db15d195d9207d850b46e8539bcc4f392f1858f8c11ac2daf9543fe73f1f8401fbe4757456a5c32cf516087623d94000f41df1fae9da46da2b751ce37afcf21ee497a6d237272eab58dfa9148dd42cdb628ea71e180e50f9a895aabebcff19f60977ae8ff9fc32e9da2b15ed22e8deeb026ea718afaa454716db212cae7ea6d2e40315054b3866a697639b4ee4e2e2319c2351384189c6f4d501d4499f352a0abcbe44c2b9da7fd7599ecd615f9753161ef5841e724ea9b0a2dbe05ef7654c36828280e80f2e2b62a2573a6eb58870dd7a87edac6e72a22fe5e695e0034b65fb596bafa9d9b03e452c6d6b79566d467b6d03c3944f786da3b5e3372fefbd37ae100a8cbdb54fa139e892a3626d1214be81f581ec95fee40337ee92a60a15db557237decbff2750047e77c8a9f953fd7a77fc9aa14e9ff75d41f88eb02c1d646757528e69c98f7a323e3fc24fc8f1aab5ca0319db9d99d22198f88fff1b97f720ce531ceb1db7c67aaa90317d51e76a39ecc91633072d3665aa1deed395067913392e9237c3ac1ceafeeefe5ae53351fb0e03ca665aacaf7736ce00408d1c6d5bc3471577939bf413f8a776953e92c5f5511680a21d4e5c91cb11f94e939c1f9b77117e9ca6c2f7585fd39e15ec891b52af77d8e8ca57de5cbe9adadc98a14eaa9f84de404f5662320a96604b6948a13bfb639d6c077716403437d0534550aa0aeb2985648c8dd1c4da157a667c531238b95df8d36f99eda4be8b0747ff73fd2af6e1f8feb988a4c197cebb792358b9580c54a118921b07977a5dfefa5e27bc997e01ed2bf8d9d847c99684ec82672c9dd139acc7a29bca0bb098cf90ef2535fdbd006c2fa17d9fd6d5b853eb8de155d9b79f4055e42b92dd31ba03a397d08efb50e95c495807eb7c0bbae1572135d919742d70e6cde9d5a5e878db0292cc65dd9ca662af0cd95c06f56a66743ff61a20fa11f26dfe37fbf71fc4f385ccb8f3009708e14fb4338b6dff40fe9e5ca3ab85a3fb65310d3139377f7097dd94e41ed8f1cf5c0a6f34685d82591df7de3b188dc5cf3e973ad6aff56b075a33b2a013c7da8772117a0daf47be5ebed33cfab708f94aebf8fe79657cb99c42dbb9c1c733816296f09a87184a1968cc9a1e7df7aae37b33e519c1a8ddd2200bb515d4432b686e3d61540913f485635427c50ba87ea83e5951035d453c7c00a0e5e1f2959b39be8b740f6946b284df45d93e4512bf449c56b53aa5f2abdf6a7d83adfb4f72626bad996a85f387dfed78b011fef894a3c2f915bc9ef9da8a9062e35af1aea3553ef3ba35633cabfb5a298c45a534088ed7ac7d99127ad1d5d75d726df59a21e397feac47880b5e33864e71ed5b5a179af88bfe7587c27b026519e71470423f0f2a3c56f5cd3eb50262b36715f3cc20caab3563f4b58b27f9fede7b3c30827681fbb6c9f3ca8779884a752fd50691b32bf5736c6f0a9d2032814e5c995c1d4500919491bfaa5349119b12920d0789ccfd25411d5891aea0098c38ab9bc0ab6f3497633ca8fc77217cbf0a9b84d55ec9f0a319ae3fd58fb7275142361d4117f8ea8d161b2ab1cf9ae85b8a9f85c9e948bbfb5be75f4fe0bf4e2c6b5d73e48d814718f34c1e704a82e02ed27ae2f8bfd3e8415c8cba1dd9dce913cfbfd548d64646754f11dae89c710ad1bb1a7eaab3fb83ce14ab12f718890292bcb37d05f7e4afdff219996098e57b6defd82bec0353113b2f12adccf7bfa9c6e04e3a0b9cd903c1eaa99aa07df669a887b5c4097568a35dc0486417afe311e4d228e12f7cd24ef07bca7b7839fe1935cc8adc9172039f26ab1babc189d18e772225c8964fe87e4750c44562851ba2a06163b08b432fe5c1d72b65b07a4cb864a738a71d063fc8fc8674dc4935dd7f23aef362f87862a518652caa7bb94bc5d904c9860edd650bb8cb1309f66262bfa9ad20cc651ad06c28c83768ab43227d3b3620c196c4f07dd452ab27f00ca41aa82633160a9b3f25c5305e707ea3b6b853ad3591a6a10f32e58136eadabe2d6641e036c3321c233a0b183c0f646ce0f9ea6cdee2080fe4a3c76bf17d4dc775a614d49eca29bc65a16f05d8e6a31750560bb10f562d8b4c97742a1edba683d3cdb353df0358edbb18203ed6a8b692d7f602e8a1db6a5aa03a1ed2e6c654319503e87d15a36b765f0be2e85dd9187d79896f15258f5640d6bc61b6745bf64ece5d361a9a7eeb5bad7f57a38eef7d8d93d76768f9ddd6cec0c6449fc3fdefedeab653813df11c84b03de79997ad062ce1e12ff79be8dd85736ce82fcbdcee973fa8c5875d89eab07e3628471ef9d51021bf90caca1e10e7f57de0afc4b8a034cdbf52c12bc0a6eaa2b7a607a328adf26b12db2bc57f819b563ba10db9a1ba67185d11db03757c221e0e8bcec194a13a0b8ec844bf0877daa7ec13ffb14ce357c28decbcef6aee12c605fe63c5cf468bc6b0763fb45ba49a2b2dc6b75cb32f165137e60a5b1de62aefa008711de4bb2b7e5f879cee3fa4a714ad6e1b741ffb0c6f945b1908591cf07733d6e28af15ea1fc031b6c356a9f7bd04c7a566fe2d6e8671168fcb6d65beac6299a22daff6798626fb54b3fca6ebb5ea7d37c221bfca3ba37cedae36ab1c8fe3411fb664ff6025ac80dcbc47d2a7af58fb991b773e992bac4a6d67f9baced36a3a091e7ecc0f87eb934f8de354a955ae52a77cdc06ded7bbacb8b2d5a7e27302b8e11b2d758ee8f51cf92ecaab1fe128cb7c2e8bcf2c646ced2bf30eadac740ce45ab89fe91ccb39388acaa3939befe03740471c44514ee36906752ff6cfa25cc5cdd9e63f33b995d8462fcabb98bceca33a5992db12daeed264fb8e36dce5ac500f30aa47c575171a8b3039f07a47eff95c5c62504eb19cd4c2512ccd70df786d36369a5ffdf67567aaa39c60191ed34bbe575e680a98d76c73ae0dc49d5faf4d6fab62edf3447864f5be331593a9f9dd983bef1aefbcf3fddef97eef7cbfb7c9f75b91df6417174c63c15cabde89d4bc40bfe9941eefdcf3b787098e7181dc5d3cf76946305c5cc4273be17e8ea6923868238c2a5423a90d39f8dc40679aae8d6ae6a57703eabb32f9f7cbe236e231435d5280217ef5f97e9e9ccc05b0c53f471fb97c028f5bea797b3d24513de7aece39c1e997c54e72757e10eaaab47d6d73f0ce0fcc343e21c6713b2d86e3d4dc9f8be571afaef52aeb70efd34d73ab44798babe72edfb2b1903d5d7a6a3ded3e2703c228ccaf99a5515d2de6880516037cd3eb50881b9191667a497c868b72401f5d97c3774c5efce57ea7dcef94fb9d72bf533ee44ef1451ce7b8beef328c395f09c7ed9975312b8407ad0a8ecd7f7334e5d1417c99aa18f9daebf130c2954b72c2ed6343187c676bb439cf6405c4a5057579c4b55a73dc3e6f8d224c9fb5c9fcffecfd5973e2c8b6368e7f97baddf59e2d84e9dd74c47b616110a86cba9834fde31f2734f8485829ac538ce28dfddd7f912b333521406290a136171d5d55c64839ad5cc3b39e077a9243e0fb85fb12f650c8f22656d7633a1629add35d0e09d7b578877203ebc8f2f159ea473594bbeaa5f0612c67e7990fd5c57a8779e13ef1bbf5c05721393d4b9503cb9793d8e09c5a801c1aa35a98c0017e1d66d8771bd0cf8ef713e49c93d8c473f5e1afaff57f0b386303f8da250edb20c895f97248f651a2c7f4caf3501536f9c879a0bae635a26b7e73f8f8ac86f9b9fb7b57dbdf4c6ac78f327afc3cf6eb2564f1cd9a1561a3bfbcffbe9fd4a26777ced99af555f13f5c259f4b6ab457c730b07ce554006d85337c2211b4ab5aee5c576cd76c79b4ef9ef8408c1bd7f691672b9df91761859d3417895e33c5b5f383622c7e501b02fb8a68372e7511f18602f6ef2e63e02fd6e20df590e287afefdf6731274e19be9ebc78783893e766ebf9936253023a2ee2e3e6e075be186353726fef6297aaf2bb0fecbdb40f84e329a5b13da05db8934ba3bd74fbb5dc2f69ab797765cd060cbf73f59c68ea79e769a501e611b057543f8c7e7764b3ada9e06a756965ced0a2e27d9dea3b48c49f65dfb9aafe8efd7b2d3dfea4ae5f4ad728e2f1ce6237aad5fb8bf25815d86a813debdc1c8c551fba66320757713e7ec07a2ab6719c6589cdad2d76e63d31c2a1dd5dbf11f48a4c6bd8afaeba87e203f09f55f044808f564daf9159ef73f8dfa0efb30856ef5caca7df5fd94a83b366de69e33b845f691de6bb2371e7d771db9d5217b9e17ac835e3ee5bac7b14ab7714d7193cae6f58bcc6575a57f1909e6111fd8eccb9dfa707f669f2c57511cfd265ba8c1e13d3865be1782aee4b2ca9bf74a6eed2897a4ba7ea2c1dd157b257963f2fa209ef94ed2dcb5fff73f5f136eb9f5edbb1f966688469ffab8c3ed199ba44a7e9119da24354567fa884eed031bda1023a43557179c03abf2a9bc0f42bc84d7a91ff0cb9eb3363de2db6b526cd8327f2925f1f3b8490bf4ec6ba85def591af2997afd178c4bd5790a719e0e79cb35779c25d688bcd3ae56d9ce94a7366f99db521221c5b60bf7f46e619705dd07744b882a23353b1ae443fb0bb1127e30be5a7e4ccba4dfb186d64f276a8a9c227f6314d88cb6cb80309feaee61a6057acd81fd83ef678e99c248d69af5f3702edc473ea4563bc5e90c7eb4a2bdb4738c6249a3af81c89cd995997b7a7ee9b2aedf884cc39dbfb571dd7e33c94ada7925cdcab023c5c55d453594ef20538c14e3f1f039a3382bda37868d013610cb7b3ef599eb30defc5f6ff49effdd8d7657d9966cd9c0dc36afc19faacb37c1af6be04e708f922926772d3b580caea4c2f665d5eda5da911f9ddc5def151572a1733d2dce0f5f7e990f04c9dd11b42fbf7bfcc8726cf8ff04f643cf767270f70807d31f722e104bb7e7d7382cf8125ba2bd32f88f1cbdd8f31cf89392379eb9e28357af8bc8b32e17d28803fbde49d2f8bf25c57c93c26ec26b6831ff8ccdb4a6daaab3d479b798e9dfeecfdd9cdc3f8cf3cec29c125de9e1e37abf35c4abf38d246496878c598cc747f5dd29ece7b22b3b149cd2ee0c53d8d2fbd800dce5f8313b5ba11c3ed82af7bdd79b8a236f2ce79918f70acc77b91e4a9a7c24287b32ec1deb2b627d6b4ca3c3ffd1ed81fc3bef807edd52cd30398bbcf0fd6677ca85595f93ee7dc3acdd9fb357feea06e6388cd853e1228775064b7973f5bcd75c9313ab1ed3eb7a6546effeecc13f34b67f24257a513eb627b6bac2bddd7833d7d3277b8070003eaeb3efa78ec8352fb6061f212f6697f937dd0764ca5393514d07c22feb1886da084ac69c97a7c66fd4eadcb67d6b16c7d3eb3174bd7e9e3df9de1bb1adf67fd72d88052772a992b8a4fb9643d79bf5669728d12f1db57e6b3804feefa71993cf1cec80f207934667dbabc3ced75fb01e0deea3d6704bdc0d25257078e05fd5589fec5cab887e4d1f825d21829ffaef7d1dfb2a797f56bf3b1b0c6610539aef45e3a4f5790e2e7a1efb62bbb664bc8c479d5e61676c7c6741d086f69af3bc4317b0d7862b39fbd8fbd7b3bbd59b3b807b452ee85f3303c61829fc0b5eafd95c623ca554378159846b8aef6e17cc67b6ff0755c0a891eec447faaa3a9fdadc9f7034d059d73c29340b9c7f1e7c87ac57bba4acccf65b811f05c17e416bd3f6ed8f08aba8bfbfb32204fa97117ec8f78683c3e341e1f1a8fb7adf17888dbe546782d1eba8fb15d79e83efe1c499f9adaffacc0b7ece1e79cd7472a211607475cef50bf693b5a5d6a58dde14aaf4bae25ba81160a9ea1d8c8aa0f1c9d979724bf287b3db1c943dd33eda326f82309e795a66c66665d0a6cd12dc4217ec9f86a2476b6c64bca178dfccc488b83f0777d5833fc3e31e6b8270e039d97b7764b98e94a03f269ba3270ccba8e087771229ee8ca5bb27fdb8cdbcc35457b65f98833c442bd60bf432d3839e6299e13aa2db5b11514eacae050feb874aeb8947ed45e1bbebb472f5833eeebeaf0d3e407041bc0bb81869f3512889d10d11638567dc4ebcae0b66bc0f9f3045888b1227386d8f4084ec3fe34143cb6e81c04562878ba2a05b62f7b57e5826c9ddeb37876afe4e9cf4fbdc7a57a27d36bbeb7ae331eb5db8bb78f1eb757036bff18d3b5a6a9c06bcaa686df75c2b9c2ebb857eb4ff7ea0dec1dffde5a34eaf706236efbf74bbe5ecd39e3ef8fdbe145c7efa1c170526bbf8edbfc01cd85fc7dfea8bf548793f79bf32a386c26f839e77032112d6ac6571d9afc06113e5209f5c4ce967074cb1ef9b748c3bae23a8cb432638c509b6882533fb00b3f239cb13ec9011a8abdc4be14fc1bc92d40ffd85de5fa66c3c01637395c21edcbf376a479972ae0d2f8adf3980f8dab87c6d543e3eaa17175598dabd6618e20d084cc89890b6b2f54c42594cde39dcb29242b8dc0526594d52031798d9c41aa6dca7c1c9397fe5757fadc8df0056535bf20e63d634c97e3043aac7d70d9ba795d5899b37ea0f91bf4aa0aae351b362aaaa1af4d1ec70ad25c1f0903e6279e554f8fb9d699ffb9d5d501ac5d96dfd40a818b80eaf13680935953078e2176789de43dd9fb0526681513fc9125ca213957910f1cf3930367338e3df0bb6cf03d80bf8b33c3acdd26f1cf7bf74beaf8b9f39ec8a3faba2a415d278a3b78992339e40ccfeaeccd617362f130a79c2176b89ee8bab63f017c80253697168fa686b209ecae4775120464113f208a7de2b5034e6f882b2c5f9ee33d87bf0baf67e65e87fa028e39ef0e4b3023e70c740e0bc4180fddd9939ffdf0c91f3ef9c327ff0ff4c9c93d0cfa7e8e4df08a21b6dd862a21f8379837927f1f7bfdbfb3bceea5cf65f13359c41f1a99fca66c8f63deb99cc0de243e09b99b63cc0ff669022b4cf93af873d8cfb9154ecf7df3427c75b0292c07e9ba762b3e8bd8d730d4b7940f6252de8e3238a01bc22070863aac24af2d8b88338beab9ecc163dbe43b284fca30b0eac25c533d47531a1ebe3b6d1fcde879aa389f4d72bb097e3a3aafc4bfd745b4b5c48dfb3e125cd3879a026f28f63575051c53414fba3268f666c3d0deedcb24fba12ead6cf5f9405e57e675556ad8a28b7d6aecef50beeb3fafc3d9c2b09bd78f155b9ada47fd8fc1c9fb710f36fd32bc87741ed87eba273c085bc3818f9680092d8f0b81bdc76a17ec4ecdf12f6a96ef2d52b1e5edf10a88d037d8867d550ef377d016c63a2b247f04751f47f365fc7c84fdc55ed776ad50c0f3b282f843ec6c7b6de01fe1fb2dc81f4cf591804c4542ba08f8fac09c0a2e791ef051fd23a515c5737f0037fbf869d9eb0c3ff13d88ff23cf27ef43efcbbaa16ce6b9f546e227f8a497d2fed495a7d4fbe3efd345f9c3e4f1fbdc38cf8147de39ad2973c57549e0c75ea7c2c4003c1062ba5f44bb86e69b6c1ecdcd167c8f6bd541af187f4f943382f33312ea86282f536b423146b0cecae016b4589dc3d85fa215f7aade972ef138a93f77417de2b3f5e06efabc657501297680c426533db245a9cf25cee22630fd053e0761b2efa83476b9047eff984663e2fb92f7e95772917d182a9d8369353cc0297ffdc4b8408bbf0772baf19e96417bc150879fa0639fd01fc67eb941fb7cf1df7f885203ef1d4d696c2937cd32a1dd1b9af5fef6554de4e5475ed579f697686d3ee2dcfa178ebd2a9ff4227a3db6d809755e2ed41776c15c318baf7f270c8e67f26f0b233f77574ad3b9d4f8664268d69fbf5247ba50deef10eeb6a2bc5fb6067d6ebe4f367db4b1958963246bfdd358375723fc760cc3b7d2fc0069f51218f5827e4469ff01fc866cdf15f80da78fe90e357323db77fdbc4a7c474d054e53a599ae9e9e63211c4cb1c605a9f34a089f4d5dd55db345741f7a623f88ee9fafba9353e325fda4493d0aaa4310ea2a5e6b99877b98f61225eff5bbe02fbd219e674bec849ac255c15bee5af899eab030ce292f469bc0fbd610f6afac50c0f71b8f6d504f6c3ba6227f18626769a8fd05dd2f245eef22fc0e811646f13cd3a5f7597fc28fee5b80fd36e8c9c3b6ab2badcc2239948be6c1d373447a3a13ff367b639cff9e3ec2e7b68634de754d1f6d4d9a2b27b1dab081e7d450de22fc37f5eff07927bd132377fb6344732304fb129afcfaeefc5253ec4c75655d85df56b3f8ceac902f7a493e06beb9c43e91a6a0a5ddaaf6d97a5d0e7451beb446e7872136839dba71f9f5a0fbf8f4d8a09cffdcc7eff451680df6c52234cfb077fc5563681ef8da07bef63ef0b5cee13c767f8eefb90c67c5df030e7efe859c15e4bd2e10431ee2810e7b22790e5e37f219ca2f70073c16037ee35a3187cc55c65915aea47738ffe1e9aa804c7fb87d2598cb1bdbab436489f252efbe3985f3c9a9efdb8d3dcd3ac99d5a099f1d72a37ef3175b5f43c5cf6ba01bb18f6db6463d1162618247511a4c7378ada9926b2a3287c765280ddee41760136dd10dac50207a0c7798e3607e74a571e054986b8a84cc97b37a0cd6a6d8f9d01577658af09d10076923616180adc0fb8cc478afa416ec196a1fff4ea36a7e9449ea1c6c5ccd97e709ccd359e37860a018cf6fdfd5f94a74d892fb388fd7f4a4fd1c6ba4cbdb9ed859ea2d01bd77f13941b49763e2585d39b4c4e656a778385bed23c62794b4b515e7f20649dbb8c39f9ab9df75f58de20ee5274bdc60df92d5dcd7b62aadcd3a1e138cbf66f11396eb4bdadfab70b2f6c45af02ecadecf91c459337907135510bb8d6c5f0edfd5e1273eb7af0a5a129ddddd5cdf115eb60707db0dfbae0f0e36098f05ef4b7c7e2ba98f249f7716279bc87e0f7a0ee11de8dfb1bd859a438aa72d958783dfe174b5505c7f594dc1f4f899efc0e6896113a2bfebaa0b1c6c94279ad57b5626e4663a01dc9d903796b745f6e00dd64f0ed680f3725730d61275e7c27b7acf3b9c89814dad79af3b4456bd604db0880df6da0efb9e5ecb45efa2fc61ab4357f337e8c7a8c05928618b4bdae4936d73d2460fd2e7969dd99d73f343949f74a55fb3c5ced4142701f8255037eda7780b33e7efabf19dac572be682cf8f5faae17cf7ed1ae00188af7375fcdb30519f388f9f5308c1dfec12cd717ac7d1de2cfc331d3f670bfeb52f33ce668fe1c6485d1deef67dbe6ad575f5aead605f6d13107d48a67350c9386fa77e782c3645c2685ceb778ed4d072ea3d25ea28978c6d093f5f05b12dc93364fc8433702868a98be803ef390bf8190464f9b500db567ccfb0bc06add9bba427398aad8113c2f29b6b3de6a3a84e8f94ccf9ce9d47f0a3971dd723874331293cfeb77e15f1c418bf13e5ff3c43b789e9810c197706abf13a9a525b112dfa0dc10b0377865cb51679669c44479f7133332e658d77578602799785c9e37febcc298e9933541d55a90f7d197d90fea7c9a38f0b6036cee0d7775776585b684aa3717bf99cbe6bf978cf76e6863a6c5ca04ea9929e288a95006dfb35e52c27785fea736c6de02dee409d451f812d5c9875e956ea402f9a2a7906b601228ab9783aa4e78ed927c8edb5686f19d14da0b88d7e0db8a7696d8bd42e6b2beb4e6b43915da802ff4aece6797deef4ce8ed709c7aed4a675fb909bc5319f55973f8c96b02239ea46d536393156e69f537f213e3f2b732ab8a6d25ceaa1b0d5b10df63b73b6bfcc3a79c72bd9e5fbf41dc44e68b72ae019c6cf39b36ea9a9c01f41f20bf59e43c6df5c46d8d4141695f88bf877bea0ae93cc999cf3deb7131b16ea7902be8c7be4e5ad54c7a81cc75ac57d4ffe2630fdf9d7f73d3d7a9c1e3d4e97f6f15a87eb1c1107c8ed736dc1f32f819364fbfa9d7081e6e225a077979cf3183b11e962d27ccc684d38abc8fdc5f05f6c8d6f858b8bcd1bdccd513d7a8618260df5ba42cd9a092b0b72110d8ff62613fbde95f19c44fb19df4796288776d79b43ae8ad606198e8fe17eabe4ea3a625b97567873b615d6c4aa0b6ee138267e6e6e3c03dfabf6d71a8ec1ba9d9aa66cd26b4c720d37b527e3f1d3d806de51de5a62e7431f091b5be9cc0d456f2470beb0a637b4b73e4cb1b3cdeeaf1bb0952ff05e25f5480f63cd625b096325f918327e1efb087dd6a37927f77984bba776f10ae3bcc33c4e146f8c7a8e390e42936f723f47524357dfaac04bb2d8e38cdc8eec6abce38c6bfd97c164edc4e3a1ba67a08323136d34b1ed4ce29fc778a68a63671687b0bd38543a1f464bf839e1fac2b82544710ae38ed2f13e5388869d361206f1cfa3f5ac508b7e4f5f58ab546cbbd0d5a1ab8b1d4edbcdc36f2ecfe3811696d80cabee95341539d4f94a72050b93c73e9e57c5b3a69ad2fff5aad4b06d42d6f4b4dec70767c8239ebe8b78fa82772de0adea5215356cc954859535cbe1a23b9533a4cd6ca890c078e1cfa199e953ecfe48f8d0d4a16b8acdd96be21e7b4dc7cb49ad62c2cd38488e098fb33fb7156c7f9f3f935ca47a8bc4ea96d8e4c85eeacccdaee7984ad3837da50c02a2814a7ac8625fa062ce062f9aab142f1ee5a9bfffb9bc2f5f239a8322b9f473750275d5fd30bbb2772a07c119f722acef11ddfe9cfcbb1c1aa35a5293e7ebb007bedb805c93283f91398edee9323913112d8d10ce89db13e3fd4b6af1c9bfeba1a6d8e4cf2dd7d5eac39aa6ace73db1b1c26bca30f5788f419f86287b3f0a60d0b2f7cd35fa4f0cd04d96406f27a57994d00ebaf63cdc61cfca4257a55915f8e4318909e25a68f7ed2c5c03fbbec498c858f01d123fc3319427e20bf09b1ac967547d27d690e5db28e615da6c13f5e33e99ffe47d483e6f85a437caf29b732b841e57b8f3ccae4c38e3ef4d530adf7b8a1498fed971e1a538735c2bac05565811678edfaf59f5e1ca3c87bff310674e45b86bfc1d9a5f4d4fc3803e8b61eead997c969ef56024bc987c6d0a989b3887e4e844e71a9fb9ba21ca9c013de9d06ffb69d62da2d5178d5b58d8ca8633b00f377afe24732a03feed47d207edeac8020e66ca834bf2fa5bc897c71c6315db227606991ebd544b68670bbd767446937695e512b7c0b34f398049fdcc5dd9e43efd88e7b55633bbc300efb35ecb853b4a57010b1c24dfc9f6e5107a74666f31b74eb70f9cf791fdaeae072fbf66ace0bdd0f4beb4be41e695e5e21778fe4dbe64cf5bee1d0a6b07f97e83d40292f7cdd6109b35531c806eba81cf82b841fa8df41a67ed025ba7a8c62136eb941fe793e0b9e3bbb7d7ed7f9a7579ae134d834fbc8f4d51f62ecadfd4dae9eddca72f16cd01f651c0d723b8f4940e4af17e4c7989e7d18ace37c150fe1c4938365ae83e0aadfa202fced9b5d505629e93ec50fefe5cff44507f679a12f83d995d26ba7dd3e745a42fa14a5ba6af89f76baf6b07b6e838da489819aa8ecca9200d5b5007a959bcecfd1d0a5b5b91981fc301ce1afb89aa8440fb8907ec37ec6feba5c058cbf73a16df3719bbaf2b0dfc8cb0a0e622326732f68399bd20bc80c496857a7e8cfbf56bcf7ce41697f2dd6d1e7106d34ce33b0b7d04ebea5afe24be8f95c19faff5e702fdbee5f5197ac562b59c354e9fc3439fcf596386d96ef6fc05d2d5e71b5d337837e77594ba37ea863afc4cf93a6dd4ee899d501f09bf7455e05e213718f3e7514e3db0d53f5bcd7591bef0c239f09cf52f3a4f511c9d3c4f87ef3a1c9f71968f3e8ec4fd87ee84aae27e16fb5cdf8727da4e67e6e03bdb57056d933ebb91e406625a45313f63de5d8fefd79a561fd6203728a225d5419adbf4dc6954f7e57d04362631bebcdf1d7eea0a0a7bdd280f1de5adadf0c919a9f8fe6ae2986269d607713d672ab8e6cc8bfdeb2ed1a84ef64b5961d5398a0ee83fc51c6f4fce407d5b808656bc7782245f5152cf3269b32dde5dd9cac603cdae6e9fb366f287dd95435d19e4e4620497f038c90db011a9f869f777f1da186acf61da553d11af7f676ef2f6f6752a483856317979db131b2be61f680a5ae258ee3d9163a1daea099f5fde56994f399befc3975626bf419af2b4378f5e0dc74194d3b8be1da9cb5b5b6c2e7a22e19bc2fef0593c076df6eec9dc9b0e7c61a47f39b1ff98f6a6529beacad023383d090127068ffd3f6c13127667d7b654ae2560ab7dcee43987f424e1b36b25e3fcaac77e33bd2eac7fef603c5a880f1c7abd2ed2bfd12b9747744db108c7fba59f5b736db1ff7999be1c968fcc5d8b43fdc597e46721bc75d5f074913895daae73ec16ad05247c0de829663d4e2b7dfafcc97a3d492d3b79369b847b8dbe07be07f569c27fdf56cb273188fbe2c8fb475c121d624792f77b4b70d97bc3185aee96f6f123bde5a57c10c0e9f31ab37d54872c557fb9197b746bbd77c05f53b1ae03f45a548c51a4bdb1177be6e35eb9eb7bc579f08f3ef8476f9027ffd177f3e8bbf9adb0c01467d9a8c0efeed3de80cb608e501fd9ad24bf9f44fde90ef0021e8981abc61cad7411f9efa3b46f4f6ce299e3b82f0cec5657abe658203c6157d5a33a741ee3f9a9b11e83ecd97b55f11ea8fdd255b4cde57467fa5e785f74ddb5a60e3ff7e980d939fc60600f7c844c71e0bc7705d7169d66cfa37b6e540b327e34f5cbe85d7d5a3d23c63a57d163c09e958e294f8de9c796287f103feecdb1793700beac641d54fcd3319406c5570bbee537592d3c8183c7717f362f6e053d5142d8b7499f2121207d12c342988e4bc6fca3781c79b669ad2b7de2c301160b7d18ad547d9133c318dbdf13f5d0e4398a1d023b45c6df7259ef87a3f11d4e53362b3df41ccd97b1cf9e7e2f91f62414c380dc5d9e525336f333f0ffe59ec577e6e66562ea52cf35950ea7f1ce65ecfc2d602cf19a556ac73af37374871267da35c575ca76e9336965525c0feb03d395547f96f32361af2aae93eccc01e3b2d5f84d4dc7be375e8b944f94b03909db91b13f517eb6485fc035318c044353fb304434d75bb5842dfd4a1dcaf41d80e36fe8f3dec5fe44ef7b313ece341f5b6085c95eb135be7f11ed310becee9ba3f16e80fd981f22d58413b12d4ae79b098eac33b7f8c43daddc0c2f4ed65f710da581f4560e6e27854b865ae157ccd9cde2300fe55dd2b67a2f0e33cb2fb1ff6c558ee74ad83cba7e39e7d135a7c9b58ff7d0ebc76f8c9df4ffbccd3543848397ddab3177353bab6bc7e41bf3f751d267ee7f1a80cf49e2a4087e2a792675d55d9bd8ff5687f8f73ff03d48cfe703a357919e54457ee00b7ece19f1eb0bf1915277c414ef397c178c2605f2b197ed71c13e28bbbf8ebf5b45f9ac3d5acdecbe5d14d210f71a2f63c263f865be5ba2662f0d0bc60ca9efcb6a88537eeaa807a865077acb72747fe3eaa10018c15e77e85abe8dec1d7ff0cb7dab18dbd146ed4843fcf4315dcef73947437c06fd140bea072c127ec057d63b13fe09ab8764b067ac0f24d13f76f6fee45d64463a7170561d437d4bfaacf3645f9ca10eb7d11ddb7299ce358eef33581cc0c4bb66b7bfea896c6cb25744873773d75ca99e7a528c46f6ff17ccd905ebb54e5c83401073e7e5f1527b7a2621d2a3c5f8f51358dd43363b6d7bf6fa9fef8abc93a7df73b68aebf19d66f3527364bda462cb1cbf929e47f051a3b54fdcc54fbf71ef4e6375a36b46637a96bb829a72f2acce7b62736976bd64cd81e68fd2b978d04a4b9d49d02f0e341e71f8f7211f4ccfe75dc6862cdf9bce09ecadaf1fb217d5d5d7492efcea1c961ec56da5ecb3d4e88927e092f6d4dba10699de73d3f711f039cd6c65e35ad3b426e78f91b0d0d421e898400f68c5b5ad3199fb749e6be6a539de3ee23afc25c6f795b9654bec70a08935bd390ec201f66b75555a5e206f2c00bea02ecf35b597d51026eb91c0f48c26438a374e6b3965f22d2bda1f45ebec507bbc857826396f8ca326d415bb668a9d70470716f6bb1bf771b6519b62ca57a63f21386ca519eaa39d1a2ef4e345f8eddbc1dbad2c1fb83dbf2cbe1ed725ef22784eafede058c650ec982781d71c03b811da193da8343e9e60efdb594e61b66e648efcdb8955e23963fcea31a7603c3ee0bb70337a52e9fe07d25be182fe2ba92d43dc02fc2fb09ff17324a4b70ae0a032bec1b1f898e20202c823c9397638bd0fd379cca930d5082f2cfed9df030ef6cba19c75a1bef37dd8eedef13a876bf17d1cc30146fa8cef81bda50376b231cbc57c57e9a71db90f1fb5d647adf5516b7dd45a0ffef7a8b53e6aad8f5a6bf273b7506b45ef6265f8e14ef4accbe087d53d38d9784c97c7c95689d1db375facd6908b978ef9a82f8f97be1dde55aae97da836f1e8fd742ae31420fd1057e74299881de0ea803e934e1fd9dd21e5f7389d4fd94a7e6737face799cab1242b32eb83adf01fc2e3e6396d80ccc19cb77a1a5c5cb21390bd5e65df7cf07d392165c0b74e386d86fdeeaea90e995b39c06681d6a8aed122cef70d5eb0a2b837205e9d80fc37b6776973d50734d9150215cfeb97a433379ab297621bd8182dabd45c687ef3d1c47e0588babf8d9335b419eae6c0af25a17ed33bb905d9f510df58afa3f584ef11cbd096a8bf78eff8eb48e93fd6ef7a03b3b887b427b316eefac1c345aea22fad080d38ef63c97c34625fa547bffea89de521f3d453d72e93b0bdbec3eba153e82d49d94c0868d32bc85fa88c6be09ed5989479e140abe2976663db10939215bec843a2f73a9bbec63ee18a3067a9d46bd72c9f92277342f17d19acffaedd7c195f9a4273ec3a571285f5d11b62cead53f5b7399712426b45c61aca4c79a3cc75074fa195a9bb8037e8d01bf71adfa1bf3a9ae32ce1ba90132fcd9f615bff7cded559ae7edbe3911afc05936bab3649ad6297b2aa2a5ed377fb1f53554fcbc06ba913c7b9bad11b68f316f6983e983a5eca0a13478935fb03a75807d7ad39fdc257f86a66cf0982ac0f7101e032dc95f713a7f2fe14448f0f75a750169c0772203f653531a333d596b553a1ed576db9b07070ca9f2e468a38c762ce3ac2858a3be28a71dac0fcb8f26b5efbe760e6e276755246e9190a934f9425a7217e484d394a17755de8ed6e1fa715c4ba031c36dc507d95e87737d25a594df5b463367c757bd0abf53846d27b112f845a78fe90eef22cb9717665dafa26632d295da0ac78e97e25949f2af337bcbc6a3b768cd2053dfdbe12faf3acf49decf8d780ad27c29497e7396d70cc9bcc91eab0169092cde6b6b5757ae320e947cdf1bfeffaa4a489fde9cfd1b25743901d7fb8370b6cd4c5ff67eb0315c2086b4457941d790aedf644eb0d5f1f3684c7d1bb61025f4364704c34ce23f7b493888d9bb92d8b1d4f8aab28b47ef66887f17546bf6b662c29df9a77c8297e0675487c8a43e29b38fafadc433c22767807d547e81223c74ab00dfdd97eccb785e28cf0ba72b3582c7ee329f730d679baef7b2d7c6f775f317f6b1696fc565715367e5d390772fb6f242f9e4dcf54a68c1784cbb1bb459daa85d84d3bce05d5dfacecedcdd910639bc6332279c7fc662bd15650073c8f44f469361110ef3aaf620a72b1c59f7d12def4399f527e1f725769df467cc74a5812c1f7d9cd4bb74c27e656b49e730ae8590779be1bb11df2f54f37edffbcd7be264a9874f60b735bee9e9e30667a843a691fa61f243f4738abf03e686fc7d268466fd19c6467ee720e6eb16727d67aee1119f83e4a497449735ca5107f8f352fd8d72f412bd6f9d9797ba2a055a98e6937e6d09e8d5b796bdee30b0c50dc98177e93cdf615c077990ebc774822e0e83441c7512f7dc249d43c3f134024c0ac3ad881d0ff234225a521d5f86139b7f3d4f2f7e37c4e22eb80b2e3e9efbc2aa10fb758e4676e11c23a9a3568c17019c51c5cf4ce5742b7ef6dc501abfaa9e634d95cec7019d91c7b5c4e6d620e7ec0b63426165f1916db9443f4fc86a11bac8b4161bc8a6bad1644d08df03f4c792de66fc7982fba0394feccbc6b9f8e74fcd97b706607b11476ac76869f1c8833bb8e5dd481c999acb88e3c4f227247788ef4bea47e8aa45f969a0d640f5502504b59e3ac14d121c36c5b8802d8fedd50f11db6f367ef06d0273d60f74e8451c04b7dcb373019deaa9aee07d7aa33ac508fb8e7da427fabd0d654072426c3d7f630d694dd1b3b5e7db591b4f5f99e26665f3ff996b63d5872ee093f335896e607d22bb9ed68ca5364e6fd5425dd1a27be2b52544fab2646cbfb3ce37f641f0be3dc011d52ad533bcfbec92f311affbf33f46a0413b4449fc16d13384fb9ae620054e53a599ae0ee63db1c3d1cf22d3bfdb75a33d23696eafbdf7eca1defd478e77df7ecee1fd89b0bf7393cfd14252869e515c5337b3eed7ce4f25e701f24e137a261c536c7e24793888ff1cc7ff17e6b0bb4edf24d1268ce29c4947fa39e126bb58b43d3d58477138f53efadb7776352c0bc47e163ff9c378e9ede2f78fe703b6fa38f87c0bf7e8d81c7f5feef4f79d9cfcbefde989ef3bdbe5f528f8cc9ab94febe7e81c35e7a7ce91d595d0a9bf6b8b9da929a6e73857df83dd3d647f1feef1c3fbf3487eac27d6827751f67e8e24ce9ac93b369afc0ed5b2ddb73794c6dc501ac80a73b4922ea27fec84bfc938b6bfc938b8df641cb5df641cfc6f318ed973cefd9caa1139a6829e7465d0eccd86a1bd8b6349ddfd7bee0664fb72f8ae0e3fa1af56414b13fb59a36b8d4908537cba7998b391b0305417e92fdcd4ee4ab51dfe5dfa3bf41e288b33de9747633aec7beec15af07e2a46197e7fb7e67158af2a9ba396bb87dfaf49f2bd7e674efb7d72efce0bf06dacccdd3ef94beba91f5abf7dfb786eecf6a556c31de06f82cbd81bda3b3b2a59ffd81b471eb65fbaaa236b8638c281590b4c9ff4429f589bc36bb0caf1334bf8b7728eaf79981b221b7b0f0fdbba15a943345cb3cdfa19ffbc4a1dde56d6c76cf7d93d18877aa1f7adb9297aa5faa42f6837384d91e6476dffd7d80ececa89c9aae11d191ef5e573f73c3d0f657be4af357f05fb774efa6e232776ddc73570c9fd6a1cbbe78af92947fc0a99d755a9618bc0c5bb603ee5d5ec9238b8779f92cd67c4ffb5e759d9b53bc20351eddd8be7f80056e2f09e9991de114d599f7357bb25eeda7db690ae1319eba17c238c376be7f6dbf5f47794f3eff78d97fa3772ee9dbf8315d99f57caeebff87b4b8eef8a367ccfbe391977b5d52906f5547c0ff89b0a77cef383739e6dd587a1c9efe1212ef81ddaae8f5062eefbb5737fdf3a2bfe440b3d274f7ee41eddb199f4dfc91938d663789b71fef175e69b9ebe87e3a8d85ccb8b73f6594e1c5be2d9bb759412676c0b75fd3dbcdf85bf4339f31d72f8cbf7e64a2e899d26eb5e81cf979b4bbad95836b29d7798e338e2671db705fb724a7b78ce76fa632747deaf4e6adf9ab279213d79d7ca89cb8bc7faddf3fa791789db2eee731eb6510b4375aa8a516eda866ad39bf4851e358f62b920f0692e72fe6e706f5ad8be5de46eb845bb0971cfa5382e5cb39bc333bafff35bcb7f3bae0ded7796efb23c1a5dabe6eab76ff3eeb8957cc51e1f29c7f7297526ae783ef2fc99433583fd7be6c47b359e3317afdd65ec6e26674839d6dc9c7a73c5b9dce3b929c231be9783786fdc5a22ef9867db086ffb29f5f84bf21e5fe45eca391b518d4c42962a07962f7bd97bfee8ef1ef0118eff2ededbba80fd919c9eeabcf9fb241c337fa6c69b73e727d735d5bf153f7be8daa23c3180538968badb225ae86ab032fd1cdcee510ec9ddfe0f197ad9e067d1b322dd67d0db60eb8e6d510dbdfbcda53eba505ff221ddede4fbe48d6526601f11597ea20f63faf44b6e3dfdfad109fe54c2f9421d3dfdfa91779fe6f704ecef0338b846f24253d0fc847efb5d9cbad759f644fa7d62c7d3a1eff0edfa733d039d9fddfe15f29e7543449c2ef7d71abef7e35ebf0f93dfcc3555d8e6e44949af61a42f1bf739bd4e17cfafd3f905fa6a77e763eccb789fba3d5142b037804796e8a15e059f1fefc15d9b9ea7657840bf30473f32aed7aa520eb6e894fdd5766459922ec4117748c3d23567489e785eae0f69f36e608bf2d8123b1f117f3ac9bdce4db1b3b6f83db8fabc338f36eb776ed3546ae4ffaa38f8a5b66ad62be2fef7efe9d3af0bf4d7ecce138aeea22dd162ed7fea49bb89c7c13f3916e89948e2207cdefe3d76f86b70fe44676c970b3657bfeb8066d79f3b7b33bed36a96ef412f66c48174c1fd08fe6fc4f3b576acbafc61b404d702bd570999f8f3aa8e7a1d7934be907ed3a13e684d6934e0bd72ef1dfbd350876852175c8d9f247a00fb2b53dcb856b79feb0b95b1076c8d34de45a6d2fe47cbf9bffff7dbf76f81f1eb7db6f8f6d7fffbf6d373befdf5eddbf76f7dc37fc77ffaf7bfbf7f73a60b7769fe97f5e9ffd3feb4bcf75ffffc9c5b06f2a68bbffef9f7a8f5fcfacf8d8ffe39b7dc77df203ffaeff93cf86ff20fffb599dbf89ba7b3fff9c4ffb7df17c614cdf11f67e419b9bff1fddb7cba7dfff657ed8f26dfa87dffe67fdaefdffe7aaaff017ffcefc5147e95e76acdff53e3ff4fad36aefdf157fdcfbf1af5fffab3d6e09b7c9dabff83abfdc571dfbe7f9bceffdb9efefaf6d7ff1868fefefddb3c84a7bfbcafbefdf5c7d3bffec57fffd69b7d7efbabc93dfdf1c473dfbff5d174e67dfbabf6fddb1b3cb55ee7b9a7efdf2653fbdb5f358ee3be7f13e33faafffddf816173dffee2be7f1bdaf83bb9efdf46a97717904706f3c435ffc07ffdb4bc39feda3fbe7f7b5e4c7dfc36a377ebdb5fb5c6bf9a7c83fbf38fa7efdffa73fc2fcd7ffdc1fd8bffa351fff7f76f6f998ffec1fdebcf7fd5ebeca3d1b8fffdfd5b2bfbadb56683e779f6d13f1a7f369b7fd4fffce3dff0fecbd972fe6e7ffbebffc77de7be73ffff7fe33577df7fc124e179fbf64ff7d37fffe71c2d3d633ef5fecffff0cd7fdac6c2f8e7af77db3516ff74a68b7fba4b33bb3976f6c6b7efdf7a7ef0f96bf1d358b8a96d16fdfce5d3223f181bbf9cf705f9f3f0f393fee9cd5858eeb7bf664b84be7f1b2d0cf41ead2afc6df86ecc3f67e4b3e267678adee7ecd3e4c9d15f5fde83e8cfe3f7f922f369fc4f99df78fbb497f879ffef1b7dfdfdc702de743afbf6d7e2d7f2fdfb5993080379fbb44f5f05e7f3bffc4f1bbe477eff359fc2fcd4feab5687b31dc058d8c13f3824ba56058ffcbfbf7fc36ff7edaf6f3f5f9a4fa6b2766c5f0e411cff839bbe8d9ed6bda9800dfe0a1a9cb7dc549687e2ebd899fedc3efda04ecb87819dd691f0642a9ba5b50d9e70506d74879cf5f2b97aaddb753b6cd4dfc2c6caf2add5dbc7f3fa6dd4d4c693cd981ab869f6f27d176b7373f6f687394e7c0fdfdf5afedbd2f4d1d66e3566665d5b99b3b7154d9aac4c45e63495bdcb9f9bd78fe7fddfcb122df5fe1a076c7677b8fe7bfae74aabf7432d6c2c0db5cfbdfaf6ca9e369756d8a4817ec1ef24c91b1c387276f7f98fd7b0f961d5a58f57bf1158f5c152e79bfc2bdfd8bef234d1b56d2fdf5abd8c931293010ffd66684e8648f73b35b33b68f6669d9aa66c803458dffd3ddac43d84a0dc2297d4b9efc2ebaab4854b74d4c373b07c6bd51686b2c101050e44a3c0f8a02370b859f94f731c5d78ac41f9e784eb0be396307e57fb401837e1e50fec0cdb5dcf99881bd79c3e7f4e6afdc18f91204273b34a1a98a943e6e63630bf6c16f19eadc563fbc0637f5abf2ab5c014e5ad2d3697fab897fe3e00cbf7f31c1cfc9d9f665de2d833537bacd5dcf9f9eeef4bc8543aa1517fcb4b562efe9e3d9360bddd1c0fb8ce5baf1d1398e339e8898420c86e091f9af20484d8b6da87c0dd0c0546083465040e40b2037346c90cba686d287dd714378d5e3726a6d65b4c54bfdfb0ea43648e84adaef46b968fb8f791b036c5cef2b5256c6da5ffd9133b208a64d6fba827e23d4bc4ca0de5c9197b682cb784f1a4f5fcf4f6f2bc781b3ba4017c96432e901c6f575a99f541dc74cdc6df89de679c789f017e9f5ecb1d4f6acf41624e022b4c9228b2dfad25c65283b190a6746cef26ffa0e21359115fb22770e0af4abfac6ca022e29f3557f64b634bf7edc28af72d76f45c4a98179a7c93cb09bad24dee0782fb7dc51cb0850afe6c4ed2ffd2422348a869fe2621145443b6d8f13475e89e41f63eb0fc266f28203c06f602d691049aaee6376b11b948579e9a44a48c38f24ac3eb891d5e53d05c53a4c014615fc4040440eed4094c48780871505284f4f892e48187e78d900976a595ed234f57df76ceaba6482b5ba5445eddec7775967a4b706dbf139862676a281bb099317141246e0fa23a7130554854fe3204f2e51a3a32c5a1fed67ad94b36b8b910d9e0d6aa3fff41f7d7d60092b9d385110b8c67ae61bf43a9615fcb3794bce7b52ff9bce8eebbf273d87c56f53ccfe4df168632b8a0a0e7b13d22adac2202ad678bdd907d52192963bdbffe7b26ad4cf192e2a847e652ec8476d7abee794076d85c5a3c9a9ae264c19e7f94f068f7fd8e12329dfbfe49e116f03dc26244ab8708018b12891526b3dceb2744fe6d3992a1d61ea2a104f9aea6acf1bdbea0f75588ef7b93def7783d49c11448a7cb900eedf7c9f2dff124d239424054732d7fb18d85f0184952c335412cac46fd09a9012244849c6bada912ec0b43c5be6c81a25c2bc797295c70390a2e48dbb07c60139c39463c74d85eeddab7bd82f507c006399fcb020fd26b5dbed9331ab3ad3402fcbb717130f6e95e5520115d99b37ea0f91bf4aa0aae351b365e95057a57df720b254c90d9acf79cf7aee0daa293bd0b425dedaf4dbeb135a0b1b606e4b9ef7b0a72389e33c541fc5d9e109afc06bd2ac8cb4b5ab3f19c0638925c8d9f2f4c8514282a20246f694aff17de5350243a83947c0024791b98fb48fc54ec07ec4c5ba1e09afe808849d5e550e3417c2a2a8e5861d544e430d70e9bebc88e5c621cf740408efd143f1e5785be11b2f866cdf2fbe78be61f22acbe20d0d314d1d2d805431e2c761f2366863394b9cfc7f83905058cf69cc13049cc0744cd23422a4849478910843849eedf8acf1d88d433b240215dc82464db3d71b3c2f69a884a80880807c26e6a7f65abd2873ebe8ab8e7390ddc7047172506390e84126a04681203b812025ca967daaa1400596634877b41eb4508438feedb43fbd7c03e842a71baea72a9751d9f2fca35180924860351887632ff42844a127fd76792abf38c5cbcf3617765d76cad1dd36f627bc3cec2daf29bff8bedbcae00c9f82d106b7ee235b66643f4de1da4ee95c4fd74ed79b80d91a59984ccdb13841de9cac62d23e072684f0fe9df355fde6604e5fd08c4817d0ede0dac16ac13e47775224607b11ab99b9e1c99887c47750cfcff5824ac1926847e60ff48f537c7eacaa12536b7004ebc09d18178cc6cbfdfd41cdd8830a3a9c89ea1b41744a8297d460e0912547446faba320c34ba4e1710e268477538108c73514fac215d442e6d0649e4e8f17dbbc06b9ff2156e410c6f4cd68cae151363a4f78d22218b12f89bc9cf256a30b08779d9a36247e03f5768ab2f49640875178b77d30d7657f2a927995a970c60f03ea729b5f519b5b6095e135dec60df0de241009983bd41db9e18db885ed776ad5058db8a3437d4fea7ae0c8ae4d30efb18c57d0bec530ce0d94a442c0e0071ab3e744df53922ed3e733c55d5bf08d877c244c2067b63d0f72efe793f05544cc7be871b05f691bd5110e80b1300ba1231a26bd5070b53697a20eaa7e4904f5dba26edc1339dc433c91e38ffacb435f0eba0be0a0d1124a7927e1eabc3be562c303e163b5bbb252c4c7ec8b01b5ccef9283d862bc4a7b9c48707f6637a3e5417ff7c9b6a64c8d400f118c13e8e6a20e2f48acfa922ff61f28d1c42f2341077c004a05eaed2481cd741af9f136dc7f886048eebccbb22c20826841d92b15a2ca055751e3469db23ac56ea5e28f5ee95e53ef7efbbf477c94ff8e7f4fd930d17002ecf23eda9d6d6b33318cd7d05b69ee2c152eb5da0be985b53a4df25d656ba28cf13df59b59fc3b08fc9330b31e4b8d67f194cd660a7f5245e77fad8afe5f7eb70a585d0e87a75df7d98b03123054461e18e3eb34e95c0afa5458d7bdd244e18f207ae39cd7c06ce00c13ab2582e169efe42dbddce15811652be7b5a28dab154d935196e0a44a63bcbec67481c7a9fe7e4708e3b2fe7087e562ef1c4b1da7d1971b952b8907d361cc1bb96c785ecb5e368a9b338d9b7986067945f3192e76fba06512ac001856b47576aaea110c170b33efcc4fb06c7921a15152fe2d3efcc51b15c4c6a0d4e117cc331809ccac95c771e4ae78e4a8abded6b963db81767f292e1694d454216ec2d795bf03c9df5fcf47b9cd0707d789f3f1d1290d4c56670887ce4c0d92d267879f8bdcae29ef6ceb9f5d2107aed61a0f388d394b533e625a8e764ee04e7477bf87334f2fe05f66d24045628ac698d09dbb879afdb0fa051b53bfc34d43747533673b36e6fa127602a84ba8ad746e6f133f059d046826f2b9b794f9402cddf04266f879a2a7c1aca9b63f9f28759973cbce78b0890eed9f7e7ce513981d29d752a29589af3bbb94dac457eafcc1926735533fd42b6a490f0f12131bdccf725736d5f99232042f3d7cf0f0cf0737455e2de0bd6b5f7f8a1c40e8da860b6d826f59dd1da49fa267a42503cd387118992beb600d7c8bd927a2e25a7abbc372334eb50bb6e246ad5d71fe37f825feac3ffefc32ff5e05d2fe997b23bac01754d8ae3b555694d7ae620271b403d007a04003b13d704bbf1be647b8888f836394394f1ffa7862f7f14cabbedb1d545f032a5ced3eebc4ce37985b84e6231e9bb128b7fc7b56a52c33114c8037890cb57fb2851df5e47366cb406bc3715de5fe139c3ffd7fc0069f542b59df3eedce262fca97d6d2b0d222cabc80bcd9743b837d437e22b7a8d9731d89902be62f9e7a7edc201528c437895c37b242dd69c2010faa5aba88efd2aab8c1fdc2a85013b3ae65385b577c7fafc0f39eeb78db01b704f88686b038e0e72ce897147380efc1ff7ae0a81c677e666d763bdbb2bd27b8bcffd33f4d132cc00c39503760a7eae07ba38710c5e6ed87c33d4bb6f0eb659f48ca4fb1c8b087aefb10fe7ce57c91870cf792c2cdc9ebfe67b85dc37aee6cbf3df268e12dd9aa97496afaa843465e86afe06f5443a461207657a64482dfabd0bb632dbf75c627d4eb81772f65a99fb3e678fa563e5cbd9ad2de9e347b96491f7b84fb08d318158ab81e78ac7f174324ffcda12ea06b98b990f8ced15d2d47e806d95c537432ad6ec684a6d65fa569433a2644ee4f7a08f99d9b0788ffcc7c6d5ade3791d539139436cfe567bcdaaf79155efd33c3ebecbdc95feb897f6df4bb33e5ec3da6fe327412cc3c6043e914bef9ed0e4d7cb5e1bee26f42e76204e7d6d611f88d85ff0fb5bb68a6370bd2bb936ff34eb897da86d99fe10702b04ebd5e1a8ef13c5dd3dd175ad5098ea8abc24647dae67f99d3ad83f7fe058bcbbb2958dd7131bab9eb85999be8de387a93ec27198fcc8fffdc6f9bfdee15e96204b7c7c089b9cf9bee2eb551cab1c8d2d27a72725efee9298e5e4f766b13fb2e9a38dad4c3275a3bddc2a2ceebef15c446eadf9f4b196f57fcbf4611fc3d967f6512ede7ef696161e28528b2a7f8f14eebd8ac696d74388df5925c4c317dcc702c945ca5b4a40bbb195ce3c939383efbff55a6f667e589e7a99e07e8b7011c9dc1ac95b97e40bf882bdaa51b2f6d47e2d920ffba2fd4ac9e5abc131d47b0e991fe0698b7a02f6713c99b48e5a92ffc229c581d13a2b66f853fb6810a18b6d01fcc2e9e3bf5e0ef8788f60e2fb12b5957c4c784518b8d4b82ac06ba69e77065693d5df9a2c27b1d614143212ee583c65ede8aa0bdc7e9a3a5c5933cf89f973aac6b865c7ce706d30ee158df71c4bec04d694d51963f18a9e283f017fa0dfe1ccbad420fde4c0a973abbc6dcc7f0e19c74d410eb583774519fc50611f32afdf2ae2782cd71fdbdb57273f95d7a78cff5cc2773ec96f66bdad119713d9c3ba380ce27dda5f99d49fc1e70d7219a47ee95a3ec1aa9e82212b91a339de73b2bbaff608e1413fc960e235c7c3d1610eb21c4eb04a049bf672a71c8a03880f555ce0e7eb7a70e1f917e8bdadb2ce7c0bfc0b6cde202e8830e73394f0a5849a351356163fa1bca908f020c04f43707551bc0b1c87a21cda5d6f0ee7987234b03c3ff3afae22b472207773a99c4d457bf99cdcccd7e464aec991f055b9976b731a94c9b154c46773462ea5b21cca55390baaca955c796fd118e1e6f6974cdeab5ceee370ce23e29160715122b6ffd454c9d5ea4364f980adf9b8957d16cf03c1b6453529c6f791ac63d1fa942176424de973ba2a05567d18684578f72eb5df2e29224cb9732be09c07eecc5ecb5d59beed9a3efa23caffd47b20bc65f1cde58ff330cd196e4d01ee22f07f4439a03edf16db3b5bd9b8d6f4f95353f0f3a599a6348277861b01de370159b3feca9c7a346fd59c9ba2fc41b016cf9fa62acf6d11ad4dc0e29077b742af6acc73e13925b9b9b693e14e76e02e57019b8aa03eabf61c8b474bbd2ecf35b5e7fc809ebc66a8f39da5a1060ceb00bc5dba2a6d4dfe2920785610d3425a7d18d8fec4f921d66a667718e0fd19cde5ecad08bfd7ad70d5b3f155c66b8df7e195f9ea498f42555c9b993c6565f348f832afc1edfec88d3d72638fdc58cefb7d756eccc88af3df807f7d0a67c0a1f326475ce5e9beca0bd60faf99dbcae651209e3b634cf7c83d47f9e3d338e46bf509125e796194e0643ebd7687127cbaea9ba38d92da5c645c491daeac9618decf1adff4f47163a1ab4317fad2bf92bb82f9ce9d344f30f8c99dec5805cad12f78baa207a62f43de35d9d371379c5b693cc60e77594a503d8fe7eea2b127894faa380bd4973fab76cdde17b0f550e725b649ab0fb25a5f55ef65125f7d24e2bc32ef7a2f7a01331693939cc29563a5ad213643bb55c9b356966f2d587daf883ed0e95a4d745f807e4855716033d4096753557a5bae2e0e435ded178acf2e334679a129685e9d8e85f0497811ab7a9e1c9ad5addf234ff1c8533cf2143bf7fc234f71f3798a4beafed4a55905bef1cf4cede00c1f796fad60ae2b363e7bac1ee3fc101b2b1b7ac4a23acb9ce1402956e003efd7948e70d5dccc99ba50acf5b7a766246e900eba4190e7e0de47cf9f78ad7a62ec8fff18ad1d9b479cd1223d6e9ad2e77a906b81f966cfb9971ac921bff5b29abebcbbb266834a7c64bcb6d5fac71d4fef4a08fa262af23d285760851ab12ef0da57f53c5b95aaf4c543b3fe5cd9d85271f8f437d0304e6a2e11ffa6c05cf636fbfa384bf57096ebdfdca3c91469c196ed77cbc5699dead395e97b2bd1f37652bf1bbe3f937e3cc94b9dacff5ba6de50a2f7e7f83db9bbafecd0accbeb5c3b8084d1b8d6ef1c397f39e7755f9de5802f99f3b9ac5f9959ebadae766a24cf7d1dfe439a63051df70af044c46fc46764877bfa1cff355d87023ea684ffd66bb95b5be97ff6c4ce16f8aadbcdd18043ed1fc037001844b727e2ef4533d3ef70ba32702cbeffa917c4555ed27f9dd077c6672d5b8ba4e7f1eae3bd9b9ac8b19eea43f8ce923a6827dd53e5efaa7df7d5e4045db443f75584974ce088638dbcf4fe9af7c4c8d7c57112c999a6f810f11e699f96836955cc431071a0a771a3579987afeefb66774ce2fc7c65ed308ad1aacf8f5c4e0b02f41f53fd123e604df3f20b5d1970ab447315ffd95e6a84bb76abf12e329549e57a27c7e6e5f01d939b2b7adc298f3be571a73cee942fb9532cd04b9f5710bbc41aaa4433767e262ea509fcd3d694e8d79b530138f12d9fd6bbea4283ec97b45e37cd43afc81980cf7e6a2af6f581cb8dd75529c9d35131a6256f8e9866bfb0829e5fb5e7d8e29f705fc21e5225965758bf8f18475d4a3b748767c2103b5ba345ee5ddb97c3a48ee21de5e1c9ba9d9b9b3b077fdb95903e3ddc9b9ec51318a35a98c026e671c917e6902fcc1d9f771e7db7017dd2a2fc44e6b7245ef2c8f924757e7236d37a58d83627ffae879a62933fb75c57ab0f6b9ab29ef7c4c6ca5410ec57e8ebe94a2be08c1765efc78de84b1bc07f2e71f81c426e2c8ba96c5f7f1e6ea4877d41f4c76be49e9e521df2e31a0cd5ec752fa55d7e81fd7db686f82d60d3b39af1fbb4ff17c9cf65f5fa214ef1e5ad599743b01d77d90fcaf08144f3a3b23cee5428c31992173388a005d57229d6c0a37de0c40f605cb3b68f3c5be9ccabd640a7b9710770d7914dd46ba6b8767e50dcc00f6a4388af0671f35217116f2860ffee526be68bb56d433da4f8dd2fc813b1b53e353f349cc973b3f5fc698af24c53d6011d17d13ecbc9117d75fea7dcdecee47eee33aff3b5fd13694c4c36eeb8b81e6eea79e7f5e9030613fad4a91e17fdeec8665b53c1d5ead2ca9ca145c5fb3a85fb4ff08e947de7aa62c7fd7b2d3dfea44e5e4a2728ca2b7eadc67e8cd9bfbead16d8b3cef037200f61d587aed912a277afbac63b60faafdb64ef4f736b8b9d643ef09e72193097afca26a8122fa6f1887bbf76ef0df86445c6d4db9c8145a37bb2067d9557ee5bfa30ebf2d2ee4a8d139fc3eecb7d7be6a856f697c5d1a7e85fdfb0eef555f9956e50dfba604f43613de90be9589fa89f7d21ddea23ba4686d82ca669d82add3374f63ecb9f9b67ec6b7e9a3c8e3b527761199db4f3f4d14ed4453b550fed880e5addac4bbf8aea529da54775191d2aa289d7b557963f4fd88292ba5367ea4d9da833758abe14bd0fd3e7f928cf3d8b01e403fd56740ea86ee9de1ce421db53550e12d6795a9b1b4aa38abc4d140b903ae3191c195e9b70a7f11b5ab38c7335a9bd5b2d7f3db37b907f4fd6630abdeb23e75832e7d80f2ae153f4e03967ecd53ee145ec0e5736e50bd47979a5d725d7125dd0b485f882cc33d4c74da513984413d74dc7cf95e5665e0c35a1ef0e31dbdab1c5669df619ce74a539b3fccedac03ea6b2c671d88cf8448069004c0cc1d145e7e2b1c74bf318810e6015b6798cf7c339b9c60989b9e74c6fd9043c09c11f6aca66a5f3cd9a159eb86f2ac5c39039677bffaae37a9c87b2bc5ee99c4b057c4666bdcfe1f51c00a7d619e723ca1536c35e279026d0973c44b7b3efa31ceb0bf084b1fd7fca7b3ff675595f66652b0dce9a55e2cfb0679de3d3b0efa018f39a6b401ed98a7dda6dc5f979be593367c3f03df2bb8bbde3a3165a2e6664fdecd7dfa704577d46dda8037e74ebcb7c68f2fc17b61f194efceeec642e9fc117fb018493ebfaf7ff049f0bcaa97096bd649c80e64c5e68be1cf644a9d1eb0ef1d8d686d85cea05f0a597b497b228cf7595cc631ce7457c304b5ba94d75b5e76833cfb1d39fbdbf7afbe1ba541eb694e00e1ffd3f8ffe9f1befffd9392f8772d3e9bd4874e4a7c24287b32ec1deb2b6c57be04e7e7efa3df0dd8c7d9b0f5a07cbf5cf4bd7b4d25afe4c27a7d9f3dd55066f5bf83bcbd6962eb65ff3e76efdd36b3ba45628903b6414d9edb2b5b7689c67d5e04edcbf3bf374624d2e3dcf7b6b732bddd7833d7d3077b80700e3e9eb3efa78ec8352fb6061f25260e6635bee701fb41d53694e0d057480887f2c621b28216b5ab28e9b59bfb3f101a7d575337bb1547d37fdbbc5ebbc99df2b73a71ea9fb663e5708eb7287bdbdc00777fdb84c9e78eb333416e4d198f5a2f2f2b4d7ed0736d5cd1f41bfabb4d4d5816341ff54a23fb1b25cac3c1ab3bc41e78477bdc3bc82ad4ac117e3a22136aa60efb6d331d859f87e8aa117a01fd4563a73c2e791d8ebd5e6bc76c616632008861f7a7fbbb26bb6042ffbd9472eb62c8f42d403592997c27958fe24df40676bf1cd0f4321dc33942781696a833db35b42bcf75a5fc78d90e84fc1f1eaca5625ec6fbb56bdbfd278e4daa00b4e780f286f24fe1cac57820be29efa03883dfc9d741267d2f5b85573f986c166f0fd227a0e05fb1d12679f707e16d135f868ef8b714ac5328571fc076c48ccab5f02cfbfcf8ff34ee6392dda0b7ffc7edcdd1365b1b8f8de4c72db52eef313b514cac4ed6578868efb84bb67bf2ead6cf539b74767d2917e4eb8c99173b77b4ef3cec8313f30e773599f307b7f97ef93f181c7bc467c0409ff7e60f930861be3a53881c3f5d01944f2d2503b357d240449ddc1a48637e1df474b8213694e814be4e5367a6672b9f43aa78fa92a6e940bc63d84d3e8fa714f0f3fe76cdf91f98562a407017c5b5a5d6a58dd618cab0d05cf506c64d5078ececb4b923f94bd9ed8e4a1ae99f6e3127c88ae6bf18ea3299b995997025b740bf5775db2363b123b5be325a525bec6be7ec29e130cf948f8b066f87d62ec614f1c063a2f6fed9630d39506e4cbb06f6dd675644d0537e57f27b82e293f976b8af6caf211678885f8c07f875a6f72cc533c27d4bfdad80a0af534c7f6c936bbb4ed3e68c377f7e8056bc27d5d1d7e9afc80d4fe7937d0f0b3468cb30e6d21c7e0235e5706b75de3cd9f27f0afc68acc1962d323380cfbd300eeede81c04562878ba2a05b62f7b2579f18f9f8bdd774de6258ef956d1bea3b966c75408a604ce97fa766a3f6299e7a7de03db263857f561e973b97fcdf7d66dc6a3767bf1f6d1e3f6f2f9ef1fe3de9ecb09e70aafe35ead3fddab69b577fc7b6bcda8df1b8cb8eddf2ff9fdf2e78cbf3f6e87171dbf8706c349adfd3a6ef30774bdf2f7f9a3be5261ceaf39af828366829f730ea79228fb4c4b1cfb5a26bf41bdee70d513259af74333d077867f6b438c1ef5595597df5b993106a84d34a7a91fd8859f11de537fe2686a1fb8c0214f89ff8d695517e043bc54de3a4f572463330e6b35898833f378317674ffcee1c5e87f9a758963bc7657e5e08058b4a086d14373eaa13975c4a77a684e3d34a77e27cda9dee1b81774c20ff1481ff3df0b9fc5e2e730ef0c4ac91c5cc97398770665d3471b5b9964354122fe5caa8bca7c8195e60748ab9788750bc6b8a5635b8869b3f95bf05d4e1fd33d72e7faf2d6129b4b8b4753539c2ca8ef584d0dbc2eaccc593fd0fc0dea7504d79a419ffc5939cd88c37b4439bbbb7d64b760ed5669eecfc61670e64ccb77f686ef0bd7063d011d416e2f7a3f3437d46183f669ae75558273c5f27dd8f7d055096a1c7a8bf9e71232b1fd85ef1aaeb23526b287e4a72fa9c3e7cf7b5c938fb9e4997fbed5d501e449b3fcad5628b039d9c29c76879f9a3a700cb1c3eb242fbcc6ff6e28526082be30c15f59a21c9238298a11e2b5034e6a1c9be177d9e03dc7d3f5ccdc7b243e7cefde151680c43aa35a9073c7edea0f5fc627ad161b909ee3cafc7dc2d57f153f9fddf321f3610b62390edee10531bc47730e697f322fff10fb974572103bdfb7a30176623dbd4c7ebb446efba4bc36b585318682e8b49c1a5394f1fd4b60b88fe73376f7d5ccf29b352bdf0e0c265e733cdcc951a4cf5fce79dd5b273ed0879af3b94c4f6a66ad4fd17021f744ad90ff3df6fa7f6779d5333eccb5fdef51e23ec4f7db08fb0a17f0c327702f923b9333c40e973883f8ce0dac307517e3cfe17bb80c7ee79a5a16fbe6057c1219ce1ccb21828f16f90176d7730cf5cdc9f8b1c05370616ecdaa30049ca10e2bc94bcb24877916771ccd83525e886160d585b9a67a8ea634bc9ed8706d1fcdbe468b0bdbf14d126b4ae795f89fba88b696b871df47826bfa100ff186625f93d71ffb254fba3268f666c3d0deed9b3c8af3d2551d5933c419c067560b4c9ff04d27fda50bee43e82de87f54a08bed516ce7cbc935927cecf86570f82d3a0fd44728d0cf771b3d21788c740d872d4369b8194e9c1cfb9187c5d3035394890e468cbfdbe937795593b1f7813a79798edd52feef3e5b37f4113efb65f47a8adcbb7f47fa20e4bef5a16750c473d10cf59110d82da1aea96f0e9e179307ed5bd70a05b6a7a29a18f48d2b43ec7f3986f2e46823781efccecf59b65fa0bfd2c5c93f5ea7c2c4000c09625a4f649d680c6ef3686eb68429c5d6073adfc0cf8fe2689dcc49dd10e565fafd092e45e39bf87dca627c8bfb0aa7fb0cc9f329c23bb7619d991f7fc5754962dd9eb06f827dab20d21123ba1ad407b303535ce7d63c218e10f1d99a3836ef2296d3a76b4230330a5e67d92b1b5f14f4670af93539b6fd92fa7185ef953def7226f6eb0c5db9837e5165fa725f71debe5677ae55ec8ecd3b0bf7844dd17814e5cf2ae1e515937a5c27e6dfc5f87b48ce3bded3440b01514e17f057429263c171035a467f6fb9d377d83b1dc82deb5381e804535d60cb6f6ead30a5c11a54ae5f13af4daceffb8563bf1fcc4c27d47999abae478dc48057eebbaba2b7cf33f9b785919f9bbb4a2eddea4a2bab48afdde15cfaa307e8d103f49fd603c469aa34d3d52af226a93bc7b57c1bd9a7e750fe3148e928d03aad2fe3b3896c725f91fea0d4fd57a52e44fe7829666a99e09223f9c8ae84f05aebaa8eef4faaad9ff275eeaf27e76b793db6ef6a9fd3156e61f132be1302bbebe1e7ba80af1c07a1c937b99f23a9a1ab6f156048fa0dab3e44e64818eb4abf66f9802f18986267d96bb9e349ed39380f4f127dff36f1fd6bfcfdaf2d616b439f4b07e21db3de47115f882221bd2504e654f87b24f727bd4e7fd07b71d66f2d6ef377013b7d495f7552475b5b9417bd4e1f619f01702c1d61ae294fce8f4e7f3c6979b10f7ba5f1de8b7f6a2a32a729c0377965ac353eaba0d7bab6fc26c94dedf88fed4bfa8fd1b9d578d7b5fcce078e390cb5cf194a3f07cb709d67d39ea8a49dbff23c83bd0d4d7efd05cf965c8d9f2f4ca5c3e1b9ae5c6bf2e13f3ffce7fbf49fb1af049add380625f9f0ebd7c247d83ed425aed711429387bcfc399c785b96e737d8f79275fa39e1fac2b825c4763fd5870f5848826da0f7b6547f2358d1aeb4325ba4b6077a5645f05417f5bdd99d250cd8bb47f80cb5cfea4a6ced487da3dd1c0fb8ce1be8fd90394df5df27f8a1d91d31b342b2972dbf39273c613268eadd6a9eebc121f4e0107a7008edbd23bf9043c8c5be682e0705adf765fdd49ae57b8b2496ff0b71829fc01f4fb0eda9fe820b600505a29d3967d8fe04272060f9937ff72dbf33237f7efed4943ef062beb684a5c9d782a88601f63d405a7d88f45681bee382f753e97b2a795ff96ec312e590f458a47a1a12359b2bcfc33df60351bfe355e97f6aaae4e2b1583efe37f4618515f4cab37c453be7f905f1ebb9b94dd6b345fa7c504fcc1b5f5c978fe62199f710116785c44f7d6d096b5b95d666bd8fff0c18c2444e0cfc3ebc4f7ae206d9be3cafba46796c1e99ae17fe1e4369b09afd87217642fcdeba2a05567d1868f537e8fb21b877961f5a3b565dfe30086626b0bb6f14f7b276acae1c5a62738bff0c18d06e22ef24621f123471e6baaa23b355a556ef1e6c79ab702f3e1d7ba57d3b51ee84cc6f81e716e4beccadf945671fcee282f20c5f2e4f12ddcd695faf60fee9267a698669bb7221bfb9ed64ec153e5f6b88b79231e1edfbcd7b39ab4f1cdfa39ffd8c7ef6c2e7fe32b5fea2362d7556abeb49045faf32fc842e76387d54736d75f869d6a5e0ddcf8f9f2e99678f6b36b52d60d8d4616093bfd3fbb677143bbd73bf1cc5045ee3fec1f6096c6a99fbe112f31698aae06af5c1c214655e57d6d7e6f7c176aa969333bae8bd0e63512557e765ef55e9d46cd15d59511ffcd3f428c675f7cc14d84757e0f35181673034d48072fad4a85de884ef57f68d4c5fe66cbe191a61cdb5fcfea7a10e719c57b3fcabf332b9b6d85ee8fe666517cc2d9e7cfef67041dce2fe78e45d1f79d747de35e7fdae9f773dd6f31df1a9e2df8d39cba2f8392fc7b0d8637b16062f37ac2cef2aabd3281b6c8357d65478b2f01e7bd9d1a848719dbcaa84eb64174305dfe71b8a3cd75bf1770d48cf31e06e737a2c6b9427e8cc3c1bf22ae00b1fd33c8293a82f7fa4307ca7f6ff46eb9caae353fc5daab617c5801af6858966f327f46eb35c553257d4058c52d59a4b47e689e1a4f6d5e3811f28953fcc60a4a6efd01b86b607b156f7a9df74303f93c7dd90e6d7aaddaa4e748233adcfb87ea37d42ec6b795e95de9e3c750aff41f322c6ee5e4cec2f3d34792ee216677a49665d0fe0eec89c4b9bef6c939cb165f9107be538119d5379117bbb789868ec31a631ad3b9d388b2c9f1de4ac5d6c8f66d2ca84fe57f491d0ca5ad93ea2fd9e29fe37e8174df47196cd4f395fce65be5bef2ca2d7fa67510ee8dcf39ae1b38e6cc769ef92de53fb75a939bb2b6cff9efeb9d27dd9b3fccec26a3566665dfb3df46951766fcb61af6bbb5698eaf3c6778da82bc3d160521be0736ee5e4078fbe7bf93d7efebedf1933f3ad52eb7d31be76a33be4aceedb1faf6133d0d5a1ffea37433d6c86baffb6b27cfda3ffd20edfa605b8ff779f79aa4e6f7a9f9fa9191cefc3e77f0c46c06fc9ebaab4d594cdfc7d14f35d8e26497bf7fc29cbb2346c790ef4c9130e72b6af4643ef8d7b1bf7c2ffd87dc5fa2ed27a0d05fac58b73ea67e60ac71b457afe8bdc17857afe598c98e849b989de135a0bad108b007f777eb4f59a29aecfe929019e2e7d26cf4d3aae0486978defcb629e31ccebf3e710de2fea0b29face8f5eaab3f6738dea0f7fc1beee109d811f67685424f493e91ed98d85d3581ae8d7fbb0fce6f25de1e6116f2ce403e4c0163bd33c5e31cac1e269ead0ed75872e70d802f60aefbb1ae16914d1b67a5edd289e27dc332d774ce623d55f05f34c7362793992391e076844e15803fa31fba1c9371ae668cdb8ef022bc4f388382de6f14bf2990526f43942ddc061f308bd9c7579612a90139e1b6a9fbbd33cc3d7ea4427fb1e79e0dce20c5587bfb39a61057d8f895ebe3ed8385b443cfcbd4df066e7de51a071e777b0cd87181f7f4f367ece8cdfd1f80ea72b76b2b698dacf691f129eedf64497d66413319bd80c880ffee7e6adf5c4bfbdf49e5eb98634a90d96430f0d26e1d3e6efb137fde9e9d2a4f3b6781b7b9437bcfd8fca717609ccdf24331f63b21f52f7e8f5e7551047b2307e1db71b7f17a983dc06575dba0e79fc8c2d323efb4e3d24e30be7d99d43758c7cbeda9c7c4ca2be119dc957357d265f158a0155323a64d979de972b3994673d12db9a62b37e011c7ba91c97f5d2107a2d7b6ed6ad59af9bb14f0c0f9bf2058648c76353884e2239e31c3ee3d8af5c1f8e612e8aaf4ecf63aeaddeab25b730f921d108cdc32a16cf0794ef1b84b8fe79662a4d8fbcfbe43f69de3f0dc5fefca23d0ecf96422183b762f8e6144eda239a68b4f6d58eefae433994127992e3b99063f98e43398d03798b0235ce349eabd27a6783fcecec5a67022b2f0e11f41274b18f2ead6c75e068ca66de1333e3843e2339d2c4d05409f5ba7dceac4b48c77ba32bad345ede5abcecbd929e13cef23b4b8baf05767798a817ee89a1ba4268a8baabd5715c941ae71cc7573ad4349a5b7d94dc7b6849c6d7760c8a374ae43f3d93f796665d9abd6edbebd70f6dfdf6e1acc61e1acbadc678d27a7a7a7b795ef43f04fe6dd6dbf43e1a59be07fe8df451bb3fa75f167f4929bfea23a7d7e1ded7af0dbeb033a93d3b7fbf3caf5fc7dafa56fb631f78e36af0c699fdb3203ca315e07d4fe77f3bd5ffcee927499fdb5715f66e05fc5b197bd129c1237bc21d63f20d946fa326e9dc90d80c75653027fd887d64d5fb60afcc7acfb1bb926bcefa0b431d72ccef3bd0dbb5b67cc46b4abf917d2eeb79032c313f49c6a081393d2db69fd49e97cc9ed91f52f836eafd83dc3dc278d27aa677cf33ccaf36ae1c1b2465e2f54992ff36d95fa88b32a729686e85828bcf86dd1256a63fc9da78c6054cb8a20926e871b79cc0bd90f1318a61f66f431375a75fea22fa4c784d93df3b15b6b62a000f498273e3f6f599bcccd98eb53c4e1bdf03137c0e26b8a8bf95c96b125c1fe05c0bf816d93115e83db8026f70c53ad57c73a9fb0ca7d799939c21eb95be6e5f8ba134385db1c32a9fa9a9ba6b281b97e96a9efbdcb3757b1f1abd0f8dde4b7372b40e639f593fff3d6846e7f9bdb1decab97c7d09dd9a185792ad8d913ba40456f9ba1c7d693f5e267e3cd3168a35eb689d3fe2cfc88fddcae0880be778939c4867f7eee4c7d78bfc9c432dd05bb55fba8ab6d93dcbf4734d51feb001b3e1ae3575f8592c9701bc1bf9b55a1f21531c38ef5dc1b545a7d9f3a25aeac5fb760ebc5b051c85b9fbee94fb229717ca9c6631c59d9aa66cc0b626e34d9d47bcae3ce5f625e0f706dda87183ad0189d7e1df9ec0dee9e9bac86e0eb96aec4e7e1ec7c9e5e2049ef1744f85a5caae49e62cea6bd247c2cc5075949ed3dd1e84c2f3711f75fc227a4ffb39dba21ec1dc7bf1681c5eb5a6dcf1f3b8d32f74398d29d45feb4a3fd327949b5f2ab0ff4ac6fe257cbed2e731df073c763e777a83d83d3ca90b48e3d33d4179be45f24c6b3cbb9fa39a520df270d7d561db398385b0e170a7ca4b8217a9215391908548ddaa84fedac9cf4fbfc709f895c36b5fb46fa364ddb25cbf42e9bec3fd6339b7df215a27eb85e892eaad447f3f8ffd2a98a3d43d6e85296e7eb01b9ab276265d796a8af1d961f9de5e475f995d79816dd968248c74550f889d7fde1cc0851c7cdfd2fa6e876cce89fd5845b026477e37d455d8c71f857b188bf764a4e78a9ee9a3bd840cf72a1fd0863f1c1364d62871afe7c7bbd7c0d4e5d4f4fa2bd3d7d93ec6fe55929fa70a6d9d9ce70b127d7e02db792a4738dc45e8bd2b50be508619a2ba6ff43980c5513624afcd7a7da15e272f137c38f8f73d43ed7f9862736bab1289a5b335bbca75f276f39abd76c401f906e365fa3d9daf998f5bac6bdd006602fcf9ebf36e6de85a5f8ed728d2cf5486ff6bab7d8e3cbf067f4ef976c5b8d86e827372901a8bf0233b9613f4acf3e27f498ffd88b9aef4011f90e4b4a5d86be8d1d145e453bd6f2e750e89cf97f77b73c6f7a1ed70f10635ab9ef6e313bd311f86d859eafce416f98a049dbc3bb9bbda3be388b9096e7f6e1f5c9b67706d1eaa415d541b6536447a9df446441cd3d7c7d34a89e73a23f6dc0bf51ae9aabb6667829d0393d7620e6dd0f493e7942bd6b7fce682eedf9ae9c77c86f0fb4ad34bd9f91bf08346891a6b85fecfc2e4d3e79ecc692a475465dfee3e0d87a2fec2daf29bebeaf09b606bafcdff496b2117e58665b6c24dde4dafcace3d508cb7f236705205eed94bf028a2a8af3df64d53fc5cec4c065628603b4374396603c625446acf7e67ab8ff27e0f7a7803a671a4296819e56e67f23693a385bede48ab4069cc0a693ee5dd6d57c568753cf2eec4ff1e65c711d54dee606e1ff8b0afe08c2c9917eaf09a82e69a2205d5e784b2cfbea17c1070244835c6af8fef7a4de97fe86a7fdbeb0e57842341c667877c5fba06127135646b4811b6b8eadc5106237635bfa982797be4981e39a6478ee991637ae4981e39a63bc83111bb7cfd9c12d4af590ea9d7725f4cbee1334c99a66cf0de9bf7da68698bf28cf8faa4872deb1b9cc35b2553be5c6aa7a6d0130731c6f3675efdeab52524736144f7af9df50bbd9bd2821b909889f84dadb3c695e2b221bac531b735ace739eb988eeb22df8dda9fbbe198cbc923dd1e5fcd9ef7cafa9d192e887c1ebd727c1dbea10a5bc24f549b9bf54b68cf97ea2958fff4da8ec46f567668ed702db13b32c3ab1498d32cafd2f3415b7f59cdf5f45ce6da82bd5cc87a607529cf88525be9227ce612dab6a7f0a5243872fed3e6de0d74def9a2bd0ecfdecb0994e5023294a79be4023a84c13a80b3dacbbf99880dafcfb999f0c969aec8f9d1cec318ad9d64bd88f67e0bb6df094cb13335c87d7a36076d324638e73d8eeabb56cb0113d7532ee45726724c89fd725ddff02e3839f7e6596a19bc6e857c9d692c6492b393edf587bff31f75e73efc9d87bff3f077627f67bfce69a59cc539b59cb3f2376213f44d4d719dc20f25714587b14487b1c3afbb581a72b78b9b9545f5f1d335a3afc51b25398973b05a89fee4db9fb7bba99d25388b4d5efa5f3c7f86aaa35725cfb72ecdcbb6ae548779ef58923ef3bd8e21eb8f7fcd382acae5276d3ee5c01806b63f59e471ce54c1cb9ac8effe4cbc0fe1e7cc9e93f3f428384d9566ba1add71c4dee48d3b5fab629ad35f97f6df76f1948e8d7f2ea2e5576bba949d6782d102bd8850e7658e719613fc6c6e2f548ca14a700742bca40c1c980bf2b38c0fb68bc7ed75edc016ddc0ccaec1ddc6c2c5cfdc0e277c859a34a93edfd16936e32b38ed751fad2de2ab2f6e95dffe5e628c5eb9fcc55d70dcffa6737fc33cf7597e7bb4fc8fe0b72fe62757515b88e2bd71e23dfe9ea6f2d1e7e97ce7fa05c97156e30f7c551c7d785e99bed7d0b57c1bd9ad5a1a839ae89dcad5fc823b119f9be632c6c8a7ce591ef6b46ea8c34f6cdbd2737e375c4127c49c37595b38e5bdb336219de32bc6a7542217bb59d979bc2b55dcd762b37ef7f746599f34f651be28ff1dd73dfed3e6de10d1ccc8e30aab60af9367df7d9d87dad074dc96c299e571ceecebd749eaa229cda9e1034711af8f6a6e064b50710d22f12ee3cf9ddaff393c8a7bfc80ec78abf1052ac65f94985fc6e59e9fa7cbf6ff5493a3bb3f7c69f1f3757b18d433defd81dbb8ab3bc579e036ee65ee1fb88d5bc36de075b7d5b72afc233c2f356b7b7add6d48ffaef911dfeaca12d99e6bb8664b60e38979d1bfce5f89c64bea5fc3a89f8571079875213a539ab2762c3cdf5d799be0aaff0affa10c970adb47a1aed45ccb5f6cefa92f75e2cb0b4d957e15dd93c7f6e740197a46bc17f15cd37d2235123ef7ed6b232109994a2734ea6f51fe51178701d802bf33879a2dbd5bac9997c8bf0aaee5c3be088ad6584bde47e9b53fd6f398de5733cb6fd6acfc5eeec1c46b8e873bfc3b690d9e1c4e9bbdda0f47b410b2f76bdaafcdacb5c5cb1b5b91971a5f5c03046c89389902bf00febb8fbf0385781ce7dfbf857a92f7dd01e802ba33d06700eb40f65b7c0ff85664476f45d36342d622d5df58e4dd2fe8c73965f8b72fc2b77d4c3b3e7df71de30f2fbc3fcfb67ff1fbaf296f4ac4670ffde96cddc40db6e96b3ab6a54e78b0d796dff46c3a6787f29c39eb57ba7fbf700f7bab602eb4c4fa814d547b0b1de295cdca221c4df7b38ebe0ce70ddfbb86622f41d3541c422c80f726d334a5be343c575706fbe3aebcb92e61274a9ce3ccfa1f8ccd766dd7be386d06dc4ee1ab52730dbf19923839c96b75845bbfbc4ec649f634bd2f9e698f7da4a51058a1001c0a966faf081f4f1bdfe9ff8bd752e35dd7f46df4da123cc89d8acd35f16353fab5c4cf991e88b1ef7dadfd6160d58515e41d32b8aafde7afa446c1799a047f5a2fb49790e66341c3566cac7ae26685d7d09a6663bfdf79bd9a9c21cae18daed3d8e4415f8dbc6397f878777bf71dc2f1e47dee803f7550c3ef54ac400e56087286aae4eabcecbd2a3167edbe7cf6e5b9eb2087166a8a8df49620d8eaf0d3ac4bc1bb5f8adf29bfde25a6f14204d3d3c1efffa9ab3d27d32312ddf194d7b16e88e8c3003d6ad0c08eee09d37791e523ce0a850f4d15582d28d0d537a677bec5f367f17a23d587dc9590a5ca81e5139fc00a9f9c81826d828b6d12a7abd222ae27619bd55f997e1f59dd01f13b46304e648e1b901f807a02df5cda5d6965b6c07fe40d65089a60e473956b9143df94e57766ba327006f1fc663837db4e2667417b6ea2b970e37d207b89b9a7fd3df6a7a1f43f19ef53c2ce2fb11d31d4219e3bd762751a91695175b85e177c92ad3e4bf73bc7312ed8f5edeb54104c663bbbd827e0a2ba28e39ad278794db5ed5d9ad7c07e2ef07c5a7e93e8dcd7019f1ede55cf50b57c7ba9f156c7a3bc094c7f5e9996b2257642c28d9e930bba2477b30ff98245dab65d4e3739ca11b1fc67588cbff0602eae604c57387fb4efae49e5262fc1cbdcf174114539787c36a98d0cdf4789dabfd8a17c76a868cf4d71fb7cbe3f86edf688e5e023fcc3a9f9e80757f1b5b88ae3f392a751e923fcbea01958405faf9a9ced8e46f6b99accf2d2c077db28a3071bd7bc228e6d12bf53ecc6cb6de47273755b3ba78fe9f2b5fa84167d71ad7aa2913d156a24c71bf9b8d9fdf8f7808335ffc2fd78216df0785f37604da82db455696dd6fb08c71880bb980d11f18d606e127565ec170ac89a01370fb6a11ce93fa7fe265be332faa757d5ba67f346f95ce93e7d5720774deeb8ae1c5a6273ab8f04d7f4078e01394ff09940cb35b19f412f435725e03702bf88703831df9f69e2df8afe78491ef85cffebfabd362c066aefc4f0ce50ec70fab95ca4228c8b691944b1b2e5cb1fba8278c0bd40dcb5f3fcca7b8cd9bbedc49f53a14d6b8809ae89b3c67517b84c724f406f64757d2979bce43beb51a3be16f697af7f4672f6432b7afe793dfd69df620a58e84cdec8cedb430e8d9f5d6b06bc6c6b869330bb9e63d5e5359e73b2b7a886bb380c34c50e35a50638264dc5b67633b701d385d798ea91ec8e3531d755ebd8ef8e7b108f3bee53cbcbd765723c52fdedc8d8d68e5917684cb699bf8f84adad0ac93a9ca3cd3c471791abd725d78c737681296e6a567d48f09de4ae72b3f9c89e487201380ebad59c0e3b6f99f52d9677b80d5da576da57bf10c66af79c92bd5197b8a41f77f3182b2f7397c63d0ba78def11b39f13b33b05f39c15ebc4a5ce6a65794e53444ba3484ef032b963cf503a33cbef2cae32af513f489437bc276dba644eef121a2927e3388be65e7ac5f32fcea9f80fc0d425b0bba41e75721ef7a11bf205ba21d1986751ee2cd296ccfa6baf4ac25f5398efcc2d0c5e6e58f9fc3e8c3378654d85270bafe9cb4e8d857dcf6eaf1aac851ee8cac6eb75ddb5a60e3f7f8ea467236353e9f86aa68f36b6725a3c15f9b015c44e43f6acf3e2246cabd786883e58ec6275a595ed234f87fab6c01b6abf06fd0cbebcb67c799bf04776383ccc7acfb1f8e602fbe9565d40a0c9c16b8ea10eaace39b4d93d94f0c5aa1ceb2df777647cd23baa17eefad917b94777e2dc6ebf66758595352338ee7bb94787e9f3bd3f8e2f38be47bfc719fd1ead8271c14c08cdfaf3ef1a0f7c686ccf5d5eb7fad1a7f6e8537bd8ad4bdbad33fad4004b95d3a3d6ebc25c917e23aff132c69fbf002f64a1fd78c8771e09d2b020a7fce133f8e418492c41ac1b4e35ca892f7a2b3d6cd9f1d3987bd91353f89014be328e6d4ae4278bf7c85f1d57adf19df51e4eb5cbd7b5d8b30ae6c9f7c46653cb47489f0af11d0adcf751ccc06a22a5f6d745f52213e36438626d2605baa239f17c0b9c190ad11cb37a58a9fd74020f21b69befa2ecfd1c499c359377f8418ee6687cc0e137805fd2b7b07f313794064ae5602e89fbf765cee69bff1f7b5fd69e2ab2bffb5d727bfaeca5b8dca7edbbc644d01de9562343dd31f807b540ce7248f03cfbbb9fa7aa188a494191903417fdacb53a51a8f137bdbff7f5540ff934c20ed969a537efeaf6b206cc7f1f1abc71d2edbd3993271b15e7d3848e214f8af6f716c7fbc7b9101cdd638f409ef7b4dee4d7981b790a63213bbe3178d103d5d60e2f3ca7eefaebc5f9ceab1d9d4082d76ad29b9ad1be6193fba6d2faf585e77cf57c4726f6bacd77b4f98e366ec8fabdaf95ef889dd522b9ce6af21ec857f8555f6d39aa7f3c625edb1e93b6c7a4ed31c9b5018fec31b97637e3311b52df459f8d30cfa17f89ce6bccbffc7e35d751475974eda4becb8374a95e14796e8d5fc05eebe977e92464f5db62bf84fb380106a2793681fd7132bc323cbe04ebaf4882a7f58433ba7b742fc262aa9278c6faccbc7fc6b98fbeef1bf9f38a7b23d62b2aa710f6e97270aff1b88f3ec067439d599277ec4d6bafefc6d7e1325e152cd8bdc6182eb2cf630e7fa60cdfafa948fded981b6d747b70d63dd635f8698413b621d4bd0ae354dc9b81ded128c41bd5e2595b3ceb65dfa9c5b37e71ffc06cf1ac2d9eb58177688b67cdb40b2d9ef51be359b7c8ef7c95b00f79886a58dd5f4086e7cc1a9323a0f3be31b88147c542b13b8dc28d66d7e36c08356e66ae78d632387330deb26ee24ef36348ff7d6fd400f6fddd03cd93581bef140c639809b6e7b133777b1d7549613c93febe82fdf0df4d15c58e7c9a5732c117f9697db38bf47a0431cf2ce498f25231a2856237cd637728de31d2dc8a2e35cf100cebd483cbc19614f53dda1c72f5fe9c239e813c2e10c35534a7f86e1f1cf1fbd4364601ea0e70156659dbdec1bc0bf264a331fd2308f897eb1baf7fdebbaee60074ce4fbab32de663b6fe6bebbfb6feeb77f35f2ff978074316a0bebecf9725df51ad1f7beb78681bf32a1de02aae8d43fb237b74376bbd71f46e091c3b9e67a68f79d13fb3dee1cf6f7dfc3523ec179833e6c3d28bd650f3b4a1d11e25ba845d9dc13c9e3ede08db484be9cdcf44d3d94cfaabb47e9f857ddb9e70521868611c133f3969dcf2d3fc7311af09fbac71a3737467d632de26e2aeb27cd98e2acff760510c377033a727639d746746ec7b85cf2a5cef68aeafd3d63bf2c6d6d63bda7a475bef08e6d4d3980ff82ac18c757f79d4bc865c54409a1d747ee21a36dc03c980e3abba05e9b5bfaa91d0d66cda983765dbda98f72bc4bce3cbbcb72896c4dca6b837581e75557982c780fd709f77f16d2bfc85f971efd70b2eb41f33cea0886381978ab998517c15e200e37d7c3ed6c8031280e81c2a0cd15c55e5a949e24976836317af21fcb690c49c99fccc2f158df30bf630eaf6600f165db716fe5afcac885b1873608f2610d8a247cee55dbd8dd41a2d710d8ed80914d7a235c379fa008b88ef59b27e75ebfee2383bbe0fd7ec827af7087bc85373b3c07537621fd03cca53139d79c3f67bae48dc8073027562fc2ee8f5c7eda76ca19f9f635a91397ee2ab94d0c54fda8784b6d28c191c0d2e7eef5f8a1b2ed5b0637a4d911dc87fb764add2118f648c5da84913a8433477e2f90a5f7f21edcdbb7537af68362ab27006f2eca0f58c2390c797b41a4beb34deacd188f5d9471b851974d13e56ec0fe8eb2741cd11ba64bc011f2e7e7f5c67d7a4d1d1d79b72b5356b298c70d2edb9a5d9020cf2635a6fe228523fe411c33c4ddc60af4a02d679c2185d9ef534468080173d204f2fe9bc27fcaf32f6a944bc7e45ff3d3de789fdca034be345cca3a6f704680cbb1640b1860d7d1cf6e0a28e5c690db9dbf5e37ed79ffb0b200bef1a83ee8d09b21d98034191e6284673f5de1cfaeb6fa1fbdd18e2bc281917ffadd6eaac31a93ac3279e47ff6e73623afa91065aa47b7bd29ca9a930b837d81b0fadb7b7ced42da2fd7783ee5f89b8a78cdedf159d627bb069d0791180d45d037972a6fa14a81ef5dc75f9ebbbad8b2af537843f6576d06df1ac7383a3ce64ea9234e70c71f0a83024fec03a823df6a439c85ecda142f200dfe53edb01e9e3fd5542f1e6bee16b62418dff93e8407b0534646fd08f2dd3f75d4237f68a66ac70d26ce0825ef8b343e033915c6e770fa4d1b641775ba62f40d6283516333e16ac47b301d83f9c9a801930409ef85a4bc24e91fa0ef0719be4fb46679d113b5fe63e2ca2497b458f96c211847b35c89bf9315e4c2f2707ef1bd3f47c95594f9581ab71a2036ae0af5d5279fe3b3866e8fcc479ccbd98988b9541ffa67448797a6cec0ee3349271f890b5346e80fc53dc5b39e64647b2b7061b551ae11ebe64cf268a395e998137e6fdfbd51ec5f77aecb975e72ea867bf05b9333a5f86396fcf3a276ed0bf155a6b87aec1a03b9523fd8b644c3837b71f73a3bdc6f49d203e53a49f38a6d318c15564dc479aac9d5a9a3d3b61dedc30860be3435fb32a7aee97ef7d6c6e0da8c502e4dbbc160bf035b100b621f537be86158a9bf07e06d2ac483d388977bfb8f7d17f65eafc77d4b38aea387ebeae288cd9575c5f2b595fceb2ed4b35e0165d44dc6734cf26c0be226454e90302a610fe2f7c5e217e95f23ef0efcaa63fa3dec9c45ca781fd1d91181faf6b14f3d33aa3db94cff005eb54c0118fbe5f7bd039d123be9fb8ad819f830bef01676a2ea967dfe16306f6724d7ca63f4d6a7c666c7cc497b1c69ce11ab678a4f5e590ff18f7ab88ff79530db6522e42d0d56c529fd03d7646dd9d416dabfef1d7d687965f938a7f97f813fd5c6788b69d423006b1bb37efdebf5073ab50e3147fc749c3189b3af86d235cfdbdfca0c08647cc8f42f783f93869854131d884e0871ca2afa160aee5585f6618e7d5cf7f1b9b87c84f9480abe15a2fbd2e018f8e60a13de4fb8a1d6c0770ac49f662c8cd1962c11bda9719e9ebc639770ae0069bc2c59fe68fac821f2ecded447857079ec151facccde7874bc58901fee6c6f1b5b8b83b707159fe56660f043f39e999eff710bc70ecacd687c5fe70357b5f1b065b47772a2f66e88c64de6d3763afe339f32ec6b1b418e86c1bd162a05b0cf477bdebff0118e867aa9f3685f3bd5b8f65c1063db699ba2cca82a5fb799b9237ba3827d7b0cf58ab857b89c5516538cd0bd4b583b147fbee3be632b7b198add25c26bd3693ded45479f1a0483f0fba2d5a801badb530dfd9101c7ef65ce038570c6af9e1cf8df398b3ba9a343abeca13a84801fe13fb0a656cc2757b108e79ded16db836e479663c4bff3c3b57d2c57b2f735f36e46e2436ae923b7183ebb2cc00d9ee607faee9da95214fdeb59e40e7a61b7f4f06f313ea0f31a30e908c938ef976c91c2814ee58e7454fe70667baa6f0c03bd32c8a171fdf8749bfe979f1e7de81554faf692ed64f6706b6c11b5642d7e8d27fa5716577dd7bd9637aff7b3b3aae16ec596340c760468136918feb426728ae0d0c6ce869321ee7751c5ac67d5ed67f2fb92773ce6b21ac5a6a6df2716b96a5dbf39e224f60aecf5c6aef889e61c34da67660fef7959d8bf8d86e5c8768fffd89eede3390278c2a617c28ce6d6bd2a88ffb157ac005dcd29c89ec442f8259fcae7bc5614f1a0737abecfc49d9efc27d207a6f9a8b4f48df11b9f85782479488165b15dfa771a3749fd40de701f4441770a3a372192b9d9ab786dca58e21a118e6c3d5ec25d153b7c54073641bf25cfe63cf83d051f03c4cb2737225f70afa5e550a392cafe6cd080f57dc27b85a8f7004c2292a5ed0b8f2d708c5b117f1b117fc979b710cd13c85f981481f94f201e510cfefa218e655c67da0f7e9a53899df59984b8ceafdad9cf737b44d8fc767bc05cfba07f39be4b955ec41d718629e2c57b3e7ae61c3ad218df67e1fb18b7b8cb3b53d6ae70ca3c68fe3e8459293589a9c0c79e6d7b9fb5b55062ee0454b1bd23e84e1625dd2841e648b99bd7837b698d91633db62665bfeac47d6c3d19c7634463869f5d5e0a3bc5d81b52c589f0eb914825a69c1ef6e04ae87ae6356724fdfaa8bd8b47b3aa68549784b6ead5d9789b35aaddc594e7f5f0edece3f2f547c13fa502a7a5f1ecfcbf5dc6cf17357f8cc659db7aaebb7624e8d33eaf3154e68cfa92886b475536326ff174842a721f589186752582fbb7d4c0da99be13fe37b6fdb7f7e235cbb9fb6f782fe8a7bf75cb8871d486b847775873de9ccd2d7808418278efd205e8cd59030ee8e133d83dfee43bc726f6c6abdf98eac3359cf32b89f82989fd279eabfb9f1ff8af5a5447da1fdec7ae0e888b9799c3924be0aae97527c22ac876b21cebcff3a0c71cdde981b74544e447fae555bdc18453466927bb501fd2c686d0d6eb0d198f71a7490d05cce4f0a33d83f204712ee557f3c182b048698afec3dd012c27dd461ada5febe656afc177324d1de23bf8fcfa434c3dc007aa0fbb4207c437e1ee82b71a6e338f9559e589a6d14f2ed2fc66977f81c019f7ac33064556173427bbd9232710258531973f6137f119f190a2381e368204f3aabc53bc6421a43f6a4afd913d6485eb327c576a1d26b0c7e2286e3a9d3eed58545bb954f3023fe8d9fc1c7e7c767e879e31179de1df7bf8cec2edabb3acfee554920582cbfdf4e25fad370fc0267c66666e2de8d21eb616e1582ebeda91cdca881bd086d018bd75a91e7b0f63e45c89ed0de5adaa323887837eb19674dfd57997eb72374b03f15c7491e35a6ff17900cf42c062cf1f9747278206bea0127ef59c57dacd97317e3b882f5e3c97713df94ec03cd110f8a8d7c4b78c4fe0abdb66fcdf0b197bd39ba0f83bd5ac9b81a82e7859a9dc843d8fd93b6ed43c08c3aaa0ce002db4b23ae5594b81b1f1d1bcea57ed1beef72fb11db42ec2b60fb30e6fa5d8cd55b13fed2602df5f0ae6a0296573c82e730de43efbf21f71bb9fb906ff305f76107cdb1dec3effc8977df1ccdcb19cfd17315b908b41682657084bf1c2c587a9cbeae544330e289b1e7ed2f839f589a2390f342ee8d6a31e1c314cff5a5fadeef191c6ca6628fce45e29bf87ce5e2bc96b3ee9fd7705937e1b1eec2613d7fbc076ba649f0ec731a607e02dd1eecc7a358fc7d8dc3d2bc89c77258ae6e3b2ec96759606dc4f9a8a96b43b40fe6dca8a34886a7481d7319e56b8ae1e16ec4c195c4bf95e2b72c8827bb8e23bb9cc3ae8e53c30963e03a727ec1b3eed057f4ff8dfc90740e83e2246c1c266a16e499839cc43cecdb08ed1f958ba6f802a3780d7336aad2cf848ee26362b731d775579cb8c5fe8723a66cc4d5be535b64803ce9630c97ad1f54a9bf57a57e1c235f61fe3a5383faf1b98c89e6cca18eb96bfbd0b7b177ed6f831bb91a3f35490e388d8f0bb5fb33c65b3737cc22e31da8fddd5124b8d7bd50df33895b0c75fa33e6f02be5b03d20754f06b73c841845c9af2356a5419ea97b8e7c983f6bc318c5ee8e756db81f7467fcaa4f4b3e895f662ddd99f75b7e8acc7769f9295a7e8a969f228f9f82aa239278a0ef7c621d3189d7b9375f28e6704fd0fdc647eccb90bee4a03ed88c7cce36a94b8873d7b78fa909788f617edf4fa6af98eaff21b6ee553ac0959cd2f609b8f3f6e8f328ce5af1ac6570e6357e278c93c9e87724f7a30d31ef7af85d5b96d2e64dc709012fc86db12eb293830e5874031f3ad0507fbc0e802d1eb4de1c8e5f700dcb43fb48b3c50de6401c857e70995a7f612e613d783697f16c3a86ac5773d05f0b36193f413064df8218a700af70e07ba7e2a12467665d3d4377e90fc6b1aea93313cb1b2d3196328ebbad120f16c632f068209f891b78ab3ace4aa067f1423df73e1d4eacc1a7310afeb9c20cb6e0adef6a0e40fbe0a43bdb03c6b293676c34660effc65a7ee8fe25b91945c631d1bb6e8be780bb152cd88322f52dc088043b12ce118a67715feb06c8313db24f3a6be1fd32a1c64c697a863a75e939593c781e9ac8f99a99cba2c7d5c5b1c343b4e3db98ae8de9da982ee3fd1e1fd35588a7cbb8471f6f3717529f41efa6f526fdf10bde2f77e4a15f4c9d8147c07c4074a769f6c841fe944a3f83ecc9a6d45768db662e7c7b1ef06555309626e6a283fd96e83f4e9dab8fd439dcbce4d5854bd5830be34986793c84a99eea4aecc6984bf0b5f34257c7989f398dff6dbcdd4873b7fb3edb8de36bfb19efe8671cb67599b62e732b2f405cf7e2558a69995cc5dba4d6b4c0b8ef5cf3b637beed8d6f7be31f654beeee8d17318653b7d1e7a107da7ef9b65ffe53fae57d5d6a5caff90abce7e47de31ac1e3729a4899f1f2c003cce8a8caae15dda5feb3126b6b709685ee51dda3f9fb7fd2eb0d57fc2c2b5f6a8a9c853e7750e4ada9d84b53c1f50f00d1dd8cb18ea15e78e299a4ffd9f5715896dec339df8e6e8f362a836b9921aeccd70e600ce9e308e489a5d870afcaf3fe9847fe4cffe8f7ce9f34e6bd29bd9eac3f9ecc33f6d69b388ad47757a11ef33bd67006f22c59e7f5b5cbe079ccfb5c830b36e49f23b55ff1a79f2b8f73d2add9a58a3e87fca105d63db3b01f688b1ece332d70ef794adb53c76786e4cd232d6eb133e6e79e2209bfe29ccb2cd11de44157e3fa50b7476b55fa700d7e6be278c0eefbb1dfe0a43585836078b1261de65f5e259c7f39e8b678d6b9c15167e05ae39607dc67cc6f2be6a4f4638754ef38fe3eb477f660187dd78cf7793113311aa54f8fc675d378131a7f87183fe77d7578522324be1904c32ecd715f988f33fe3e0fa8c95f8e8b6ac899c635162bd27c5cfab86d5ff7301a1390e7611d0df38527f510fd3e34c04006483f236dff445ded337420afcc55a49711d513a33d678b1d82d747f7ebc8c3f76a6c7ffa3d8581a66a0c1b1ce5750b732736a56ed8e682fed9b9a0b69edbd673db7a6ec6fb7d3a4697f6870e85722a0de081a36d6e22863597b6680379426a87f7e37bd98cf8c5cad67a46714fd28f199dd37ad6a97a6b53e2c77c4dba35bba0e26b0a3355cbdc3423c7e388e7cfdcf3b4df1970a389b200c7e4ceb83f770309f700e97944fe3abd5e23aa2efde9fb7442f9cc01e79da833cbb83ed8a8d0783e9593c0d7c5303589f06fe0f797a7c575b88a3f2ff6dc4b5c08977a34b2ed656edfbd6748fdf3ab2c9c80e3eb4215d56629e3dfddbfa732e7497f26f16b223711d38f23f7da8b39e945639c78311dbd20cfe9e7bcd2581b15dd831c3ceabdb9a5711f2806c41c74862cc07fb646947806f2f4a0225ff12b6ac891fb3419dfc7f6862a4f4d65f1a7438dd1c9b49fbcff5da91c00bb53e429da5767831bed3562578f84b3553ca39841cfd096bfb2feb79e9de27e79d69e8def83029fbba29745784437680fe9dc60af4a42fffbde3f819e9a1effb99f63f36b21a9dc1985973afbfb06122ed97ff8dd43e763f9e941e727278511cfa9dcfbe53df0e95a8444b737e977c7ee1757473efbd020ba77b2702e6bbff49ef88ef9a0f8a9cf1f2a1e911faa7ce7fb27c02dc4fda8ab989642bab0513de512c7da259fef66bed4f190d2a52575bf08cb9d5f47f9faf5aa923d61b8068abe7fd875d3b1c8e3eb35b3f0f96c3a162a8831c9c296c4b87838eb6478f1faee9817d033ce3827e011aeeda8c64138c56ae78add62ac80a731ef66468c1ce42a024daf3540fe1237e825b0eda68eb92c051bf778114ef4a86e85bfffe3fce535d752f8afc6e4d85bcdb55c5bd36aae7d51cdb5a4cdf4d09956d15a4837e19d3f2ac63b077dd459bd36d571eb25b10d72888b23bff7786eb290eff2559a581867348abfc31d188792766574447118e020a34af3ae5f23f36df9a7d9cd03ceff49337319d67cf0bade683baf8cb189988570af26fa89be10d63fdd2355a21e30ccef7f4cecc728dee328fd8c743db7689dc02c5c2b18de9c5bf95dd9a4fd8ba027f2c6f1b5f5ea3bead5e382381eac37529fb666ecacd6a795fae16af6be3e6c94b38de12b3f0faf4434d10b608f92f352c06faa7ede30be5f662ddd1e65705e3c6ace04745f04fee223ce41dbdfd6f6b7b5fd6db936fbb3fbdbda5eb6b697adee5eb6282efc4278c0301f4eaf098af3437c5a05bab1b38c3e336511e5be136bde14bc54a4f771192b19e414cb8eb1ae7d7bed4efe9deec3299a7f7a9526fd78bf4df71790e13993e7df1190bfb631b88147f5075df1af0bd6ab6275d9ae9bf0dffc5c9d5f972b5faf4be41ebb497e529f6fb452ce53fc9df5f797c57bc9f4784eeb40fbf1778ef70ce419ae752a52a7702f99fffb8f1f27ce9d057bfcbe71a233ed7f6ff171c69eff081edb586c54031f270b1506d995a9b9a4c6768f6e3365abce63ded8a992b0233a81f3007b127171712f541e15eddfa5a948f32daebd33e2b6ee3eb80bf311d79a25b5e2407b93da4b73346617eba2ac7ddcb85fc7253d81a32de02750ef0910b479e35cfbdee68ddbbc719b37fed4bcf127f77d7ead3c6a2df9e7b6dfb4ed376dfb4d1f760fdfd16f4ac71287548eb359b9a437ea5debeb2bf57d603a7e1a73046fad7bac9bd6af69507e6944c764257b46cb8dbbd939a7586cfa7d732df118ffebe6d14af29a67cffde3716c8bf873d9057aee1df987acb378d2ec25e63ed3a4810716448708c7eff27c37e669dfd3e743231aadef409ee0f7c5b853eec504c846f9fda5ba2deed13c1836cdcd169ef9ba39d2f3e63137ffad317d38467b95eb9e747b69a2bb0ec87e6e06c504d1f7b91a073b2b5f8357e7448fd8171c135a630e7435dbd764e5275043ef290338e6e727bfb61ce6d99b8a356f40bcf58fc0e9843d34d975ebbb9f19dee1814fed1558bfa6f0e5c7f00d55e4ab6e8e239a96afa26347729fdd8a69697b04eee911b884ad372ff38c44bed957a8bd2fe3bd7fe612d9c6053b993f57800fc179093c1f345f6cc2ffa2f4eeb949176b9cc8c299b6b565721905f318a573187efe2277ae28ce12e24ffabddbaa3c3513fd95265a03ffdcae0d597035f4738fb50da9bf217d400de13d2ddb5799f4f96be90d897a9d1fd85769ab521ff9d13bad17e89250be77baaf9fee3f37154abb2fac01f2d3bafde6527345f27373086c741e637d23947f9dee47a7beabedc36cfb309b85ab6dfb309be4639905e3c577dd1ebcd71727c6ce6a6df1a2c6c1a35a2486ab2606cfce8135917b36bbaf021a43acc96d698bbbe7ec765fdf4ee52a31ef17c93112bc5e5243ff6d2b607dec4fd4d08ff90135d44502dd8114af918ab9af221c5c987bf479c329bcd449a7382a6218ab227db7256dcc6d5afc313fa868ede4f173d3843862985f8348c60c693d7f3f9eae948b86602e0a6321719c7737a677bd5a247877be1296b5acee3add6ff7f838f00dc5574b3c9e2e3438d11b8f7c1ecbcaf09da10f686992d8a134707aaaf4b11f731338e680eb7340bada9a5daf16e47ca3f3ae7103dca3ef739499917dae5d471d1a4376468f4324ef14dc53f58dbb8998d04c7f83eca5225ae9d34585fe8513dc0d8574a9fe9a75f0e73e4f970a92f705f21ceaeb6a72884b6ee012acf1fc84f309f419cfc61fef493d2ec0634775394582477a2f1a0cdc6b43a273a4f70417307d82556e823f91319724c7c89e54a98f754830f6828ffd1eaef3aac83fa06b9143fcbb01869bd2811ab91ada473ee72f9a4f8d7b279a5cb270562503cd57537a844af617f8637abced910867e9edf94592276777ba3d3a03a28f1568cc0577ad8dee5addebba742d2b3c0784fb3388c73bb8b6ede728635c3d65fde64aed4e688f298d9d4f18736d3687e48067446fed1216fa27fab9cee0bcd35a21f1634c6730e5cfc53924317e2b915fb9f51c053dda81cf1af46527fdf88dca0ddc9c7ee87c5bca4f4e3ab3fcb7fafc92e3a3e6e648de757b70066fee6eba4edbd7cbf90ed6d37a02fccb36cf3918a402ef9bd73775fd7d850c7fa0e0fb32b7beaf9e91e328f44c47dcdffa4c8d79bf758ede753b2f16bbfad98e82f3571971992dec34066e121831b2bfafc42e687f5ea935989a047f026936183b73cf48fb5c9772b2c1bbbb1ac6a488e7acdeba2aea71eaf3f89b8c63fa4dc631fb26e3587e937128df621c7aba7f365e9b59b00755b62078eeac0d7ed24de14d2ef2b304f64864803ce9e378cbd6511cbc57a53e7cd898f84986ef1ef767c65cd75d71e2f6efc5a4a33b622aa7ee7f86d88145c9fa516e7e3ea7df23b08312fc79535dc3ffbc92973f48d8b3444c13f56a2cafbc5f8ff571721fcf1a373aeb5ea6edac803774b0bfb67ef7f7ef5eac67e6ece30f37ede35ce0f9a9704f6bdcb692fb4661ac932a09b06c6d32b75678f9fe82862d7a2b9c57e83baf123c6a1c3c82f43e2de1db0ed27e668933624819bea65f93be109750750b91bf7cd70dde837ebb19f361e9bd69567e3cb3fe5db217a1ab5dbbbbb3ce7b7e2e31eb59177bcf72d67caf96cb635698b7995b8a9dd58fd180bbc3997b9f757718fc555f3e6bcf07e7a16c8dfc51f357b0fff7a6efdee5ad4d705f3e68bfeeaaf1532edb6d2003a83b844b04785ddfa75c3eea5eea802fef53faf319fa2339cf4aaeddb53a4dbdb6f7a0cae6054cd1e53da3138e174bbb092714ac5146ae2ecfd6e6dd85c13a91b15eca37e2f126efb92bfc8bc17794c487e58dd7f76fe44c9b9fc293e6e79592fb2ffade92e37bdc1d9eb76feef2ed8413c8c05664d9b63c7f53bbebf9db7b9e7dc6989a8c9c7b89ef58dfe3dbea3df1decf67f30714cd754b5da7b41d4ddf99be0d2567e08aadf968669c7f759d371a334ff76c97986b9081d529f1fc741c5be2d94aba8e52fc8c612edbc11178777d47f7ce77e866d539f2722515fa4664dd6bf0f9327349cd8d65c3bbf30be638aef85957cfa255e2ce34b3303ff3cbef7722f5f9bea5bd087b45161e964b467752bb7e5f77fdd48c5afd0d715bd53ee79538b0ebaeea8a519a7d87ae9be90bb5358f829cb6c8a7a9e2fc35716f9e0df9cf6a6c4313ef4d14f7dc9073ceee0b1aed8d1c0c4e36ce57f014ef7aef9022f5fba238993c6a0e9466da8ec6e42b727ca40cdfa7d49978dcf91866f93395700716b4ab14df395abb7525f76e326778d63971a34aa374bdb9ee5ceed5bd068f3a237a5977c395b8b544de31eb6eeb9f813cc9e063b8f17ebbb12fa10abb947536282e249f67659eb4f3573f7bc147b8fa59bcb7b7c81fc9a8d165da070bed8f703ed27d75becda7d7d51108b782e8df292157c1a803c4b9ab49cb03e133eb7654a90b57f6e008d2f7f9555efd3427437fa9724b93fc2c7c56c09d665178ebed18dd4592f86f8de9c3aa381e121afd26d63af5ed21f53ed97d73dca86370a2a7ad598660f43bebd7f561f9badeef24e743fb8fd7355ed77b37cb9e269e1bb3a701b63bb6672fad91d4b554e93dbd372ef55ae660eb67d24fd3ffbe483fe0fcf8b9d67b686ff69d6c3e4863a7ca73b8ecb116e6dc23fd35a43f9afbb0745ec8e3b67c47e703c89363d083f2f7627cfc4fe7cfe37f2ad0c9cad8cb7f0149dc622d065bec901e22169d3ba8db3f1fd2e712eec1f45a7840c69a601b7aad12d8fe984d4cedbda8b7b4abdb19d8a25bf6d7821597db6d357d12b8ef16ed1b9f33919b58c45690b95b89e26291ed43f6540e768028bc2bc83e877b63b2d1988fbd22b3e70cfc51ee999779f6ffbcf15dcdff5307c383fe2abe1fe5c5eedfafeb7d05fd72e9790ab59865c2ffa33016a4ee4d348e93867937c7e6720b9ec7cfd3fe5fcfca23fab5c33396aedbc4d727e67bc5ef32daff8aedcdc827103d75d1a5b937abdc8fd8ff0d780a5e87ecd99084dd981b118e218a9f541427d302e7f8f2f925e38c9fcf786f8ea53910bd57a6dd3118cb3538f14de7461bb088f6a1c20cf61a377ad7994c5fa8cc7d10acd146e5c483f2f6f33f4fbf3db9eaaf957378fae3ff3dfdbd359ffe787afaed4950ed15fadb7ffffbdfdf9eacd5af15fae9f3fad7d31f4f3fac9dbdfab187c7adba5f6ffff7ff30831f867a507ffc5a19967af861ae0f3faca3f6c3d8e9dbd5af1fbbbdaec2edfaf0f4dbd3d87677bf0e7fab072bf60cea379e773af9d19bfacb5c1dc8dfe7bb9dffb7a97ad0ada73f9c2384bf3d2d0e2a5c3dfdf13f2adcaffc7fcd57ea7ee790dfe576a3355ced83df26cf0efff9bc72c3bfbfadf687c46fa3ff95f8c474671c219e057f00e6fa601db57fe93b3b63a85375ed3cfd71f8755cfd76efac71bbe9ceb8f90b7e98bb7fd93b037f8fb8fab55fe3f9e9feabdb434bfbff010000ffff010000ffff4b120e7c403f0e00`))) +var _ = pkger.Apply(mem.UnmarshalEmbed([]byte(`1f8b08000000000000ffecbd5953ea5ad736fc57dee2f475ef9546d612abde038326244ad61634dd534fed4ac34a8019c8674213eedafffdabd92404488bc8d27b7360299866b6638ee61ad7f84f6b3cfb350f5bb7ff69c19ffbf15bebb6f5cd9bfba36f21584ccd703cfde317d3f9e69891f9ed6de47866f4cd1d47dfbc85f5cd99dbd3d1dbb779689b603a8e5a572dd10fe66fd15f66e4b56e5badab966cfaa3d66d2b73c5fddcc6ff7a31dfdc5184ff1ecce7e4afbe19d95eeb76b600e0aa358c4c306addfe324138229f0623339ccff0b5c29c1f8351985c8ddf9d7ebc1f05e9df2fa330dabb1a7eb577477fee2ce0fbfed3221d70c791b7b0feb4e77e4e57fbe678d6ba8dde16a3abf78e9a30efcf9da31ff0cd9dffe9cf1df41c65f4168ed1f8d07fd26ceb9f7ffeb96afdc2ddfe4f49776ebffd1c76ef9ebe4dc2f9ec5b687b23df8437c095017f3ba3c81c03f48c199e5072cd552b1c6f46addb6baaf3fdaae5cf9d51eb96a1af7f5cdf5cd3ed1fe89bbfa331ba83a118ea0f8af9836abfd0d7b74ce796fafee7f76baa7d435f533ffe2f45df5254ebaa350eff76e058e2610d63f4cefbd1b275fbfdfac70fe6aa25cee6addb0ed566be776eae5a3218cfa6ad5b06cddda8754b7fbfe9b057add7b1d3baa5298aba6a09db3fb5bfff0e4c876add5257ad81039f495db58699f673601aee7c9cdbd3b0757b73d5ba8bc63e6cc97064b76ee9f60dd5a13ad71473d59243f4cd8f0ef5e3fb0ffac73f57ad7ecea5ecf5f7e4d2b4cbff5cb5baf52fd5fefe7b315b8423a775fb3fd4157545fd2f9a5a6ff476ea4d5bbae6c976f6e1d2cfdbca394d70e7dfacf12cfb10b2d98f6e2e1111ff53d6d4ff4d85075e49bbb223849ffe8f330a46336734b3e3dbfff3b698a1759a112affd30aa6eec8f9d39dc3a7e50a97ff6925f7fdefbf59c65cb502d497ffb4fe9aba3597508ec0f9e7aa055b928c5460be8d66d1f6a9db7bd12b1b0933fcbfbf6d3332c1dcfd1b7ff9e704ad863231577c5b2af9989bef9d44f45db3dff7641eddf98366fea0e917fafb2d7b73db66fffcd1e9301d86be3e1079e4942b9679d7edcecd56e6d189cc635986ba3e46e6e1961709bd3ca977c35cb3373f12f9c4b47fd03f1886e91c4abd1fdfa91f373f5836b934e9347528f57e74e84e9b615259cad274a7c3b2d7371f2af572965fa1f292feffa2ba7c41b152b2f55381d3ea8eefdc517c37967af2c41494481f8aeecff1ddd8ec0d28fb7ebe7c62828dc55c473623cf0d95f69efc4e6cc49da9edf3bed3a55672dcd9e88c072cf561228e578f62f7ce15bbe2d4549fc7e2fddc157d8f727a77df9fe2cec466a5c993df0e6cf67961301de689696f9e18783f1f3e6d1e16fd2e9d3c6b61cee4a5351643d83eb17b3796047969a934b066e4b9d3cecb33c5f7c5077969cd06b1c5acdc6786a77475bd34624eb05829d2b5e7efe243f0f2425dbbafa4fddb364ad448e38038befb2e76a5a5ee0740679fc74f777317fddf1f00c3070b531b0416d3dea0ebc8ffe078d9021feb2a85da42dae88abdd0156783c011d6c9739f754df22c55a10c4ddc3e1bbf7f6a68f2c4f6c1ca1100ec2b1af757f45c1a388212db31b7b2fd0e63aa03200a0faea52a1353e017a62647a2602ced314799c2ab6bf4c04257e9408f39cf66e5c060da91a1b62951e8f862cff0ac9e021e7bfd4014c0023e47673a0ba7272dadeef55e9b32f336ee2f0d41f14db51da0f6cdfacba4cf7bfd281f477c0decc7cad024ca54959db14cc7cd07d383efc9583b02a02ce195cc3b98c2be99aa111c8e295e2b86a06c74560aec1e9cbb6b7c1f5016a6c6d3c6900b0c41593802f04d5589f1180de6c6909b584c9bd255b030d5f64c143a63d357264e375d83457dde383d29b07c7b2cf6a8fd6bc73ab3f66cb6bfbb4ed00ff7033ec7d406a141f6dc33b9b6769fa660610860a2c335eadbae237840ec0ddab6f0ea5aace8e277cb81e1936b986bd762747c9d80f68d07e717de6b31d2ff67a832b5dd1f999f197a267ee74ca66c1f2c8c58747f0df7af856b9a03963fd83ca99d45bdf91c005b501646afefc27ed5ef3bbfb0d8c1dcd044d7ceec19b8c61dbff386e6b037989b1a7c6e1bbcb35fa1ae4ac0eaa279dafd1f5cbbe3416ca87ae1beb1047e6ca8abdcf5b1dbb7f6e1de2063a6abedf60ba3e7aca33b57e4c3c3efba895c978041648b1877a6866a04960f2853ed2cecb843db0c3f83ebefb0cfe827e73bbc6e33ebdfb36792371ae6ed13dc47531b004bcbdb03d9678a53db577cfc4c71f2c4eccadf2756d9e8aa03c431d7c959234466d381350594a1d2781cef61bf38277f5f7616363b88e17e777a85fbd3b366e02f327e0763a1c645e353d11706ee3db8def8009d6787ed433f4573eaf4c02a9119ba26c5ba36cddb37644c32e351704d8d750265239473505e50a79a0383550243e0173af37ae6f1776878a65a02587c89b55fafbd504e45a6da961c4189ec188d592cf628571be6ccd70ceb0545f2a6623d30babaa6f3db226d0c758d7480fc39addae732b00474eee6ca61536dbf91be1dca619f5f8c5e3b7efe5ae7acdcf55f4b7e8385997b2e7cb675b20e2c3f2c9427f03d960a16c3ccbbfa63ae23f214dca37b6b448a0d8da74d4d02c6c1b9c75962570ae0f7daee988c75753025edf12c9e8b2d9603f66c1018e47d86cf8736f3ba3b96fedad37d25dc9db743fde875e79c4feed97d7fbeaef0e0daf07a46995bcc7a0a7506c3efc458a7061b9b81e73e47d6f4ca35d56bd710c006de331a36d39193b3be44472ed017a5f42cce8ef581be0438cff6f9c8d006c01e73fb36c4eebcfb036033726c6a1cdab7e4fd92e50f029de12943ebbbbada9e8a82720dfb6aaaed0dd185578e26ad2c5606a2c02f8c2e47c33983baa33ee456c5364df9d8389aec19ccebc57e68603fd8ac12592a1f8f860532af50876dbc9f378e4a47ba26b5c531e7ecddeb19c200cfa3cf87af3d69690b4aec08006059ccf9babade18bbefdcd5b1ba15eb7abaab13d5b1959f879c8fec7c7585ec1d536da79f0dcd5bd9be02f7f6d21a734b63cc79d8e649df81ee710465733047e34140c6a8862eb42b7fb2ba59814d35b60fc66f672e90dc3334785f9df5bcdba7dcfed41cc34741b936549976047e6c09af01920b3d09401b32b11d75bcce8bfa4f748b26f622b4415785f671c13ed97fd6d8f695b5a382d8500ff50e35467b1aeecdf0546b1bebae0ad44740d5b935d8b9b6e67905dbc1bcba363bf0a03e87fc39bdc15cd79ed1ff1c1f4c91fc1e72b1a112df980faf45ebddc76bdb03624f816dc7ebbf973d3b9a9d6b46491f4eb4e6a18cdfec9f7f757534325eb96be3289d24573f3e9c5bc5e743477d75f7645df37378c8c1f32d32357963aa52680c137d04cfe5deb98b64573aa6bd7dfbafe21cc66d3e4647c9d7ed0ffd9e2ff83abca66bf93da19c61d0b90a753128abe7160326c690f32cb583beb37a0360fb6db8c61938778d7c978c12e6adcb13adddb9c5daf09c5e949cd3d9f1b9d735696aaa6dcf1200956f17e48f93c278c01a739b747c7d3b847aec56fe211fb96bb3cac4ec729e1d734bcbc7fe404bedc446febbeafb33d5356568d242d70681e3e7e8621febaf9a984227d0f13efff43e93aab636b4c78ed4c1bca5a9ca9572ec39bdaedef94464889bec2b24d7043eb298f64cecc9c0f19518ea14641d2eb7fecddde74b02d1dbf3fd644406ecadd93afac58cf3ec59a59c7ad635e960bf17db903c1c6fd257683fca4b4b83fb4b5938ddac8e89e3514846c37b9ae997abbc369d484e0587ba7feeb8483b364e9e8e977fa629960fd6705d207f153c637d00ed543836285685624f020ffb0b657a81bd77d86778b622bb2acff7e8b73d4b2df421eeacf317a8ff3490b7c3a41f339089b170b43de3907e86ed67b07004656108ca34a36fa1fe66cee810e95fc4ee486217c95c3eeddbee0de5b235ab176342fdd7e4957eb8d7cbe695130538c6cac616787826af1d950f4dd56827711663c82d749506efedc7bf2c5e96ed4f639d37b503f3fc06a5b2e063fda5e8ddb9fe5bf4f379fca52cb405ee8e3c9f0fe6f254f6cbe15cc233e4dc312a969c9f9f5fcf22e7e5696252c8d75f2c7f3e281e55eeb7ff44638de22f478e75639f8d85cfead3c41866f0ba6a3df895ecc39a362bf6d1084a6ca980b2632e72d435656a1cb4df91bd6eb092670bdee6a9cb85a6265376bc72b17f4dd9888242e971430c4e7efbead8ee91a10d3c43e029bd3ac640ebfe1af926b0ae4b0347e0a7ba36f06ae9ca008eb51118a88f6061f89dd8529367f1638b55a834cea04aa1a9ca89dfcab3fc6757d70ccf54d79eee83d0d406ed621ffb60a9b3d83776a07794ebd8d9b128b62dfc021ffeec70cd65ffbf3f9ecd63a0892e9e17b7c57363335e8e1fbfee59a34039b731a1be9aab4f433de839b2d4ce14c54972f6674db976f89c1c990b6d45eca73f520fcadc9f732e2f6d46f6ac2ecd189ab4314b704915b22fe73979639759932a989e5bf73284ce04beb75046173d7767ddf3b1edf3ed5cdd168f6990c118e45f738ab6363cbb2f3aefd975de0b1ee3c3f01807631d5bccfafcebdaef845f0223c54acb025bf898b14636452ed6e063fddbe8bda32f31ded03e1cb44f26bb7d65630b9d85cd80b125bc46c4d75abcdeebe869782e23536d3f1fe047ee1ff2aeadf0b11f8e3f5e0bebb0702d14da854dfb91fc54ee0360b3dcd29ac981eeafc193563d4fc56b405a58b938be923eec6150f26319508f9580a5f271b1ad5dddcff4fe236ccb443fafa3fbe66027813d9373629bf07e92cfa26daf11f9bdf5eef35383c41174757db83605c3b37a32d8b3dfc6ba2abf3da9b4e7f406c01e57e169244f674217da5d082f5733c6a1339d10e12f851437333135822b9811bc188ad57668db876d9480e12bb1a1b62786d65f348befa03646456d3c51cc23dbfe73e3bc03472076ef17d0c7750650c4ef7d329dc5d0e4a5a349933c3bf963fd979935fa05c61e9e7f16abc4bf3b5e9ce8d6e5b205ebb535317ab1a11ac0f69585cebcba8e70e3ea432eb4902dcd2ded31fc3fbd748457373b06cd30b7a8cd1fe2c731b7fa5a55cc740e75307b3600a3de33ec8b6f6812b0fca6713634b6c9384d2d46a62d15c797edf1ce67dff6f919fefb6eaeab32e5a87cf8d4e51616430770ce518cbac7c51613009d1d00a39beb1f2e88b3e6b5d958da3eed112ce7d8d1a4e049cbc8fffc7c80d828c1f7edf85e7d254ce44ffd981e19475502768c63aeb83fe8ec8a0d754d64bf3c37b5bb2d764e7d76f5d994c4f6d0982f441ee78be90cbf100509619f91ff12c70c97d938365e73ce26130bde3ffb0ed761792c3032d441a00fe9ad2e5f89fda48121008fc430df356696aa4c4df5213b76db7e32caee99ffce98a7a179c5d8d68298ff814c9c49c0d694c0f69543dc378ff626dc8739fa9987e5f0697432ecbfd6e4f9819e998335d9f375bf9a2a0d6c76e059da5d2d59aaa0b50a7519823b8073aa4299ea0576bc231b585debbb593f6f43fff84ebfeac41af6aef149fe3591bfa8cd91238043ecc58cc3faac9fc40eaee78ff7e2aa7fcfddf427cfab7e6f15ffbcbf5bfdeabaeb9fda2a563777d14f859af7f990fac9d337ea46a4e489e7a89b3bf2f96123bfd86d4d09631950c1e3701af5efc5a83f9906bfbaeefcf1fea1fdeb5eb2fa5daaad0d01fead85f12f72dde33d67f587f0bbd51abf8bbee98370f5f4e2398f4370f3d875e7fd1740be03cea3827f8f3652e77188dab5ee6f5e59d896fe0b77d37f1183a7a1bb52370fe859eae621d6c83dbfee65ab7fcfd77d2e254fe03d0febe43de819f07d8026fd586dfadd69a0745d344e7d1abeef6e9dbceff1653e87dfcb0ab97e38fdfec8c3ff290e19d7e0915fdb4f491be2e9b7473eb851e330d232edf909b26ddbf7e94ba1aec9d4934a2f0d8c1f9a56c5dc5e047ee374b9c862305ec8e8c233b1d9de18083c85b0a2feb38bd7199261a82da290b425d97b8d737a364e97ceb4af161e6d4fbeec9e9d066a2f8dfa7960d308d81e4afaa68ddd797f7287f6820cf7c2bd780df7c7ee5a866becf95ad3d6567ff2ccfce469ab7f4f3ebff46979031c752332da701a3c0ea9557f4cc53fabd71dbc6ebbd6eef9649de17dc853c1a3b69a3feeeecd80ec9b1ffd1995ac7db827afe19eeaf756ebfe789ad967b07d9293ee353a5cf595bacf7d66d03d2f0f257bacbf7a1c82d7473c4e1bf4be7b3e5def3fc71efc9e2ed923738d5f2dc8f56f8f2f377375b6b61e63dac9b4e77bb66dd27e1c20e32fa838231e32323c1367aa137345f1d1ed3ddb9869f65c40f1d323e2a5856da981d11b5bac3cd1d5555414e73bd46b08b747afc8cf922f035e68f9fef975e55a2a6cffcaddbeafe17e3f6c6f73fca93f58ea317d80b7cce13f48e385e243596e5aa17d959ddfdddcb41e4febea3a91a9e311948fe3fd6b505f1afa6dd2be7d4cec7cbba672e21cb976d380e011e133894e1f05f02cb018dd3584cec421b8f85d5c6abe9d511f77ba3b5f1f9dc3b4dbf6031f71daeed3e165ee2a75da444f3e883714d9b7848f46ec398123b8d0c6c5b8d12ed203a14d423b08473b58e6633e527c7582a7c576aee0c416abac9aeab9b0fd17ac7523ac75614c6c57ae65f1c28df211d17ab059ced39957d7d614cf12803f52511fb04d8a7061efddbb32d40d6bf625b9b6f6dca4b95d197c349603386f003d0fca8d2dc6eaa479c407b2c552c122279eb5de3b63225df3726265cf7b671bbfb0fcced6575c2e2338cb6f2fb77ef07a71083cc709cf04b7d255102732c3623962a7e33c5f4be017c83f339bbab6af44ba26bdd90d7175bada5e586c923ff931e75a8267ac21137eea877641e97a4b6448769fd83d25b685ce26b18b4c15e97ec8f7e56832c8acb9d5568eaf48ce0af2372ee1590a7f13d9f15e1fd745267e669958c109b38b114dae6d2e13531d2dd10532b2cf441c1f3265685260b383e0101fdbb44fbf37ce7c620c3389e557f3a438bda9fb28746283e117a616243e47b8a7e13edf58cc75503bef6d179be1229d571bb49fba1c3035c2c1c68085c12aa1ae89ee23f29b57bc3bc99f13701eabe3bfba8f024d5bbd41604339d083e30175bdfe413b4b6d93149772d1e9eaef9174accf9d6382df9b8bdb453f9f09ef54d5d666fc5b8847f5483e41562a9ac7521de483e7b21457fa89725888cd77221ec1acde78767cc99e1efef9c7dedbb5052e395b9f3c672b0fa749ecab23734f32f79f0ab382f323a7915923068bf1b5dc308349a997eb95c173d831e1d2817a8680d705b4a94cf5dab55485d255280f1e9af95489de82f3219afbd8e138d9cc7e6e4b9e6e985c5797f3005fffd4e558a8eb2579d03afbbce5dbcac56c547149e7b7e3545c4244cf8c4a6deeaab59af45d25fc0279fb81f196f6ecf97defd97b466e0e936fbfeb1d506728ed47dad7f3e72c65dffd25b07a75dadbf40c63a599aeb683918fcfc6df310f788d7c8d39a86c6bc3f187f638e60b3c7bce073cf36203f9973fffb8a7e3549c7fd5d00e52225d05e193ca4f0dcc3578f61c2743a53107e1e7d7e580a5f281559c67d890037a002c4159994267610ce985a3d263786e9e3be709bfff4bf800e6b896c069648ea248fd73af754793c2af20674adbd9709c2f79c167cf0bdeb1f3cf3de67bb1bccf3ff635fd3897dcec538ef96973b3a10e61fb51e1d959710666eecfc1ba1f874d873663953fe42fdb773ccb07dff36df88278a47aedeedb2b389eb30606c387228e7d50a3e1dd1cae6bc44f4a6ca6c7e1ca75184099dd04e72053071c318db068c88ffe31f1faaccd7c14ff096c1bbdc0b1fc3cfd4b9e5bac44bdeb1decde332eb6e5c5b6bcd896648e2eb66583b572b12d53997bb12d8f59eb17dbf2625b5e6ccb4f36f617dbf2625b96d9965579d4fe8e0d7392da39bbf1b37af16a5d5db9c3b2fc97827c93837c275c37d94bf185e3bb79a65686678db9bf5ea7b234e84e5d479311d7b73e4475d60283697b383705d7ca3ec4dbd68b7957c5f8df5337aa36770068ca1950c29dcee87b78c595bbd5e5572ed1817778ef31f72a87cef3f772c61fe03ef2f7fe3b73af9e4fc5198062f935b02afbbe9993ae7f84c7dd7bfea9d7fbd68ebeacf57fe95a8f6bf109810cb788d0885b686531a8f6468cf20511ee5cb946b9f388ff465edabd6952b76e871f0363993aabe4ec1205cfb31917d705ed19c0f6b37c018d720ae30b1fd1a7e623fab7f0eccc754d9e9f1d07cea07df415fc5d687cce55cb20d9b727ca0322ba6ba297d7c47c3ee018412d3e9599125addbbb92528335d5d05b8fe0fa901ac5ebba6da9e9a9a11183dc5b31ad6b7dac3661ec1ad90b5492ab865f6e354271c83831858e3b855d28723f0be25b8d303f9b51767aa79b64e2c868e500d24f48e954bde493e23f9efe9acb4b466206a86752e6d4f9d5a1699b846455dbb6d4ca1263f01b744bc435d2e7d47434e814cdbceaff756e8b3791c79c5fd6ca89bda4267e3087c26de72f67c98a9d1132378967e099f7fbdf6368c79c981d39b1e19af26f7e6d621471c6ec7c6a829b8f60a72d6c87ea3271633285cd755711e0bbe435d453ad39916e87d138b55164e4f6a1ff98eccfd27c368a0bdf7a4421dfbb5924721952b02bebea61cdfc0f3c3223a66b2e7adb27d5f43be256d3e42764f504d9f2ab9cde4d4c5cd97d9f7241799b25887e0501c60314eac6bdc1cda7056978b0dd5413e0e64df09d0465f635f47d1f95051031ef7e188733b6f1fe5d44f76103f5cadfe936b5709b729e2d945f50c517de1cecc6295cd19c66493dbe67ab55a4b64409e3e8bcf19f1415e1a07f65841fe56720f5c1f7c20bd22fcd100107f18c20960be95edd9d5ccb79b9c7db96daab52ff2e553dedee8d0d66c10d7dd1fe9734fd457bde8fdb574778cc9a8eae380e0266ae9e9c4e776e4ba4d700fefe774cc6ff34ad706a86636998fd1d338ba7b1aefc787a414ab50ee2bcbe22a6ace7f8ab36bd3962a017b8cb8e028435d035bf0968772bc6aade7ddb3b3c60b7809a4d5c1b998fdff1e1e20476f2ca8d1db9e625f9db2d9e35af2c51ec155a47d7f2f6f54f29c421f5c612d8cbdb1880d8da74d4dcaa9e3c6596257229819f154be58daf65755e78ef23aadb7e71445ea1379c21a2ae2ffa0884d28593354a71f385d6e05f723f1c535d993a8adefe61d9e29b1b9af0ba23dd2af1a8787bd3ed7b41db15d2bf60660d41bd0889f6acf1e6bb2cfd0bd657ee4c2f334eb43ac384b0b39f74bf8fc939a0e43ceb35979a93380c489303f17a9910daf439c8b19fec58639d185bed00b9f4ba98cca59e3699fab6c4072ef05eb9473cdd9b14ef16fe1b660a572ce884f84e5b3fd93626dc6ba260379726cbd53c9b3995746ce5da7bf1bc783f0ec27c1ef9802bf312b798d711ca8fe99929c17032f537bca1305391e691cb5b55dfbae2180998178dd1d60f94aac6b03607439540716e59a6ccfb42ca601c77b043e34984e6c6a83b9d510cf40fafd21715d5d5dcf2c16ee092faa1793c4f1eaddfb6a9f4bb201fbcf901a288c17e88c9b1923b01105a8c30126b7fed92939054f56efa3888f50f22cc159da701f09d4e9700dccba866e856a67d6d11d1fc85e873a8027f6502d4b1c73f75f5dcc15eb208e1912874fea4436c325a0365ff4a8fa6b37d3f6e6f23a5d0b3967c1c6143ab1d3cd8b61d67efede332e7ae07fb11e78c1bc375abb17ccfb05f3fe5e5df9b06e5922cf4f83e129aad35bedafc972f112aedff7d462dc181aae93b18f67b1e32c676f1bf95675edd935059e31b01f6805bf375529b050be37e75bac8872bd713e77aacf6c3179eab38b6b8aa7b5f9e0b3282be12c17f818d542c13c7360d43bc267943bae1fc33387f5303a307a67e75bcdf0057e013b3dcbd178a21aeda5b1840fce2b2de590fd4ce35eae2f35c49664cfd562cefb8fca65afc51dfb89c6bea6ded4700ee0395b7c2e7ed0d87f197f6085bed43087fdf7d60ed8caccc1e654bebbac0fa924fef54a748e9a712f722f8e074e4da817087c5b14f885d1e516ba660406730446964ddad41c67a3fbfcc678d1a94a2c457a5d0d3edc6638a9d497fc217172df082c4129f51fecfa0be1f5afee4b1ee61abf33bfa61ec1fa267e16c30750771b1baab1b4fd57d7d49e5d87e137226c0bd3c17595b5be9b8e2bcacb9180282891ee2b534350a6a200167b7edab4f6b299d66fc3586b47f03c94afa3ae4352937963336066f93b35c27c535d03b1e7cc0df59adc8ffb0b9f67080ac2fa18dd26b1ff4bbe099681b5f34d48ada60fc745a4ef39891de6cbc156a7a8c62436e2c91a7213534be319d0c6d9c6ceb57e280a4a40ea2b8111aa81dc4e6ae2070443e159ddbbb93e9bc279f4ac599fe41fb6119e485757aece4a4b9bed47d9fcaec786710dbdb85f279255fb79de45ebbeacfe65c9ba07cac2d478da18eee7ba9eb4a6da61bd4568ab320a75769e15f2deafa08f55b6b5db8c6f25577fa9ad8f25fac4f97ce519ec0bd1e3ceaab74f2da65f6a737fa27cbccab65efc03a7df9feff10ffc4e0cc256aed43eb3dded3d756a5ff08b0c3e9ae4854b009e078666a0739ae01382a2da9615b68d67fb0e38c40ad4c3f7e5daa58776dc70eb07afd5e74c2c7ce5ea4c2742f9dc021f8f861cd261767db470df538dfdb349db8fc1c8ebda00e53454cf3b4fe9ea7a7988d92eca73dfd6a243398f8c8e63ca3d6969f5fa0d733b65cf11f8d0620ef0a9177daa449fcad4ce39f21ca68123f053b846f2cf785c23faec1c90acb474b42f511b6d66fb1dfa74fee2a456f7fadce72f5a9fb6dff9127c84a99c39d9b84b9ece8491a5f214e246392e863ad655f9ed49a53d07daa6e3a36cf5c0389409bbfbfc3478ac74dd966312d3daf1ee80ecc99a763c793e3af3d3b565c784e787d15dbcc7b90d9291c276dd37ccad4cfaf131dc3125dc41d9b3b39467aa649c14b51dd89a024461e7dc41e3837d72b876185cfb966fbb0571d7c33e97fb9d2696c06f0a65faae3e744faeaddda76d6ed1b6d672e24bb3e15ac0fec80c57d097c5a4ad744df2e0defc1d3cbde8dd5f21679fe53cdbe7a30b7fec97c5d221ccc6f96bdcf1b1f335c6dab36727f3c1e0f3ecdcd81806ebf95f41f7abb20d1a8e774637393346b45a87fd3c6b9c49f5c023c7bdb11e7c5aeca09f697fb9ffe77e6b07d5f1ff3cb850f770549972505fb8c04a629e44b7213a8c6bfb4a92db4b611fc0836b33cac4d1a4c0e94d915e6cf7a4c0f1f9c968b8d5999fc61cafabf25cecc940679518f168105e4053333c9d9d6efd2e84a7d14c62ba0fa95f2589ebc23508db391e0d394f140681cd0e02cb97a9ad0ebe724db5bd71047e81e2cccdfc38e9385ffc38f5fd383ab3f64ab89ff6fc74f8da9370b3b2a28bdf2d43db6592f87d3fd8fec8f6e750de56c6c7c83ce7f269f1b1aed200daf0bf435fd155ea2bf8acaa6c878698af723bfa8331bda57aee671af3d2f856b7697da40c4e727676ceb85ab9229f68ecebe1601bcec16fc933afc819f944635e8e7f6d38d618d7f93bf205be040e00d9e727932ddb18de99d776b58df189c6bc3a5e523eee4771cc17fb368fc70864c6bad8b786f4a66d8cf6c086aab475d3d832b205c51ef5ff5a57adc07c1bcda2d6ed7f5a7f4dddd66dab75d5924d7f04fffae79fab963b8ebc85f5a73df7bf39737b3a7afb360f6d134cc7d1edb79fc3eeddd3b749389f7d0b6d6fe49bf87f7fdb733f98cf46b3e86ffcf59ff012f886f1ecd71cfe764691390621fc7386df5576e3552b1c6f46addb6b96a1da572d7feea00fdfd19f7f4763f40086a23b7fd0cc1f34fd427fbf656f6edbec9f3714c57418bafd7f29fa96a25a57ad71f8b7337e6bddfe324138ba6a85316ac2fd68d9bafd7efde30773d51267f3d66d87ba6e776e3a572d198c67d3d62d7dd5eaa397b22c435d5fb55ec74eeb96a628eaaa256cffd4fefe3b301daa754b5db5060e7c2675d51a665bce8129e909d5f90e3fceed69d8babdb9b96add45631fb66538b25bb774fb86ba61aed99b1f572d3984df30ed1bfa07c3b0dfffb96af5772ffdf19dfa71f38365934b934e53ff5cb5ba7b9776e84e9b6198e45296a63b1d96bdbef907b57e315b8423a775fb3fd4157545fdef3f70fabdd11b1a22386aad6fdedc1f7d0bc1626a86e3e91fbf98ce37c78ccc6f6f23c733a36fee38fae62dacfd7572b84c5a572dd10fe66fd15f66e4ed2cb9f4fff7731bffe3c57c734711fe7b309f93bffa66647baddbd90280abd63032c1289d54f4693032d19283d70a737e0c466172357e73faf17e14a47fbf8cc268ef6af8d5de1dfdb9b380effb4f8b34bf788ba0968e67addbe86d31ba7ad728a28ef4e7cef1d3e0cefff4e70e7a8e327a0bc7687ce83f6916edf300f5251102a55d2273d570fbff73d582ad6cddb6a0d0c2c21d1768d1c9a161f606947d3f5f3e3101225ab719796ea8b4f78488d33b53dbe77da74bade4b8b3d1190f58eac3646b0467c0c2be4739bdbbef4f716762b3d2e4c96f0736fbbc30980ef38449cc373ac3874f9b8745bf4b27cf5a98889c3e75228c25687863102431e23b2fcf14df171f40640b6b40404684a05d5e5a1ab7b47c54544220846edfc587e0e585ba765f495fb6edad70c6f8bb0773f6a044457e8b402787ceb4674795c24ca02f32b481878bbbd402193ddb7e87315544c2bdef58f374bf433b5d02b0ea2950214f1d18bada9e8a02cfe82a08f56db26d51a0315394a361c19ecc587c10b9e387052fd1dc68706d1c49dec472b4eeaf039bf19013378f0040d764ea49a5970676a4153aefaa8c89c3e7e412e7007b26a78eafe6fdc9dc9f5b145a9ee8ea2a727c25b69934e0ddd88195f79c9cb1cbacc9df902ccd0c967a4c07f9f38a7e3e5170a2b2ad1787d6e90da0933ab42ece94333a53fc4e78fe758d08babec25813d2af133aae7e075085909c7c81f14e88d94e96809e43665226c76be8694446a96071e848b95be75d5b15a43e187fbc1642eba1682d1483c51af6236d632521d096ac26348674f53c95ac01cbef5065eba4ba2063aed3ecf7131fcd7213ee0b74dfc30460439336398930b8e829237b5697ce5c739a4420dde727664c4798645facb2e1baba2abf89420a6a7e477208d812a160a2832c3176866849690a02de075e7f0ce168b6fd6706e76f93a2bf823e9e4df03a95ce92101f9c3d3131b346bfc0d8ef10c09f2630711ce08ae8d6e5b2a58ff5da9a40ab6c41564492f1e05a4207dad2183ce52b91c50e40094143057829b790ee89804b5eaaaf55017c4ca883691265681eb54304d78084e479c8619b818c5326a91a8d55f6b331933c83c17f3f0afcc441052a57aee577a0de95102cc03e22f08fa13e070d0040796dce293a416789f6f2c13dbe12d6027f010958f909a665675652c0626c24842a9902d6f0dd89ec3705b04245795923c0e42c529b80c3d0983f8db957131142cb9e35e6c6c610150f0b2c7f10e80c4f250930186085d6dccc8eb995a3492b8b95c17b8b0a12029328a3cb572579c8987085148179cf98093b442c7bfd8cc0ee99ff5e3209e5da2926513e15790ade8787fad91ccbe1d3e864c47fbd31857d3d3387d072cfd7ad0820323499d2557a554b9602b456a7a8c020d6c32853a5e17a9f6390e8563620a2a25ed6cfdbcc3fbedbaf3aa4547bed47a4983c45d6036af313ecf76111d483a2518f5d37eedfdfad7edd8b54ff9ebbe94fdc55bfb79af75fc04d1f84aba717e03cde73967cef39bff83096eff56b4d0957e4f3babf79657f2ab4d59f18cee3701a3cbddcc54f2f62fb515bcd1fbbeefaa7b68ad5cd5df453a102fc9bfed19f51f8baa1bb52370ff0bb9bbe82dff5eb5eb2fa5dea5a1b4e835f5d77fe78ffd026dfb5b521c0bfb530fe359c46b05dfd973e2d6f3ce7d7fdc3ead7fd43fc38a4e67d3e5ca367c1f6019adcb3daa89bbb75dde7caf73abc67dd4fde3384ff5f5bfd17c921fdb8e96fee8247e5798ec74986ef5bf515f2bee1f4fb230fbf579ca4ff3fc71efc1fad91be3e0e3d5bebb6c9f561f057ec99bff8f0ed2979066ccf4b906ddbbe4f7f6c09fcc6e9d291c5e0c4bafdfd7908fa5d7b36fbec5a6a678a80bf88fcbde1de98a26283387ed443eb0c13bda2b670495b92bdd7101c8dda1765daf7fe824d3e6a6f84fa79505c8ec3f6909fecfbebf9e3bdb8c27be119ee85f827dc1fbb6b19ae31ea274fdfa81b9192271e9c63f2f96123bfd86d4d09631950c1e3701af5efc5a83fa95e77f0baed5a5badd37586d697e73c0ec1cd63d7dddd9b642d8d36522759fb684ff2f44dff85bbe9bf8841769fa99b87584bf79a6cf5eff9bacfa5e409bce7615db6c7fadd69a0745d344e7d1abeef6e9daef797f91c7e2f97ec91477e6d3f256d88a7df1ef9e0468dc348cbb4e727c8b66d1f7c96f517541403cccaf06d9ca98eedfe8a1236d37b3244769967e2f869f37869615bea1531c7b173ad20ce77a8d7fcf54ac9dc4b972bf2b314c800126b1768d8fe50eca5ef6b5ab0fca0bd4710786c497e2a0ab06de3855c59d18842fb2a3bbf7b4523d68eca87894cd5675352d07ee71ad497867e9bb46f9fa530e2aba678161eb7a430e29b89b0041d5f14064b9d552242e4924d30c9b733ea2744ec269b14d938a72afce25724c724ed3e0dd100891356e9b4444fae4fcc4e480d71c213f20590a2fb500f843689838b1ca544e97b988f6d825517178779c2762e211468aae7a2c4e00b0941fd355f5c946357aefdd4551ad82ce71d165c2c9767683d68f24a57e19ae4695d5d07c60c6c93a03061ea7bf7ee7f3599c261d1763ab0c0e19aedeff90c2d95bfce899551fbc5dc7713332a08aa76c9c16bc621d01c2f1d9f0f1d15117105f63891199d5562a78b82726d0b6bcff279ca62a5b6d84b49b71a9ef9bbc9311fe34b447daa25139a9217a73224bb4f7a1c6dcfb8a5cd10bb480048f743beaf9eb2c992e4da5b391e8a3d944081095fd8c11ccb142c3bdeebe3bac8c44f2d13ab888db37d51c9b547c8c454474b74818cecf33cdbe7278ea0c4a62653a67ab08f9bf6e93717d8217bfe443a5912cb2f2f9c4e0ac174bda5ed3b9ee583ef698230295a63339dc5636dd2fb5d6c8688755e6a345cb9860a28535062b1270796efd096c0c762d7f3e07956fe6e720e32eb10ee3f533380d8f522475d53a6c685c6705b8ce7a09de5b6497ec1c08b4e57b647b6858fce4c8684dffb2592512bdbda90c06469fbf691e48f9db8681e2f44c09742419f79ec2f85822e8582ca0a051d5760305b20aec25f85f1b5ee6b1693522bf69ac17368fd4c61628eac8ba4d8cb9698b7a14f755b60ef28a26c384ef2416e4b8e6e985c5753f74bae5fb90e0328b39b10e9c814ec6f12e76d4e0a5ed08e13e969899ef9a496d9dc95391da48d25858767f2dc6225ea7defd97b466e0e93347bd73b90ce50d68fb4afbfa3c0e3f6dd5f216fa95e7b1b9e619dd860f885a905e46cfc1db963688d7c8d39a86e6b533d8e144090cf9ef301cf3cdb57902ffaf38f7b5a28e2547610d40702ab4b7b8630880d4dde9c3dc78951225d055f8240dd5069cf548f25733c247433d435b0056f69f9af91354385eb7e03011b7aff97f0019842675182276f267380327c39fb59abc45f82b8b4bc9d97bce00f58db17a2bb0bd1ddfbc7fedf9a9bad44ba26bd159e9d556760e6fe1cacfb51d874683356f9435e5869a6abed60e4e7dbf0c505c3f6ed1514cf090dd5f1ac2e87621f4e6fea3e0aeda5d3e5bcad1f611a8a3d27700437c1394c9c03f2e5467e13e447ff98787dd6663e2a7608db16617c53aebf7e630a9dd8e9beeb1d7bcfb8d89617dbf2625b9239bad8960dd6cac5b6dccadc8b6d79c45abfd89617dbf2625b7eb6b1bfd89617dbb2ccb6accaa3deb1614e52d467b61b3fab15aff6f9507c28cb7f29c83739cc77f251f194145f78ed3ef6645a675c57d7fa283fea8596ee87afcf81d8533649c11f68079baab3d0716e0ae17f6d586467376ef82171ef06dc01af0d3903a48407018d09c6efe2b31be558edcc4d9829281e8a02d181854e2c0a1d8c171510f7aa8bcef3e13ede1e8f65ed429165c5854e987b752ace001ccbafc6aa1cf8664eb9fed56bd7da7ffea9d7fbd68ebeacf57fe95ab7ebf1090d337c6261236e21a11358b301ca63b562c4d7024628771ef1df4c2c966be3397bd8e3c74058a6257e1eba76ae6bf25c148ca53d4679c759be80663985fe858fe833f311fd5b78764c81df98c2d971e0781f7d017f171a9f23fd00cd652ad9b727ca0322ba6baa97d7c37c723f718ca08e6c35684b58b98fc21a180c1f3e0e391c5f40b2945f20eca70018531dd0baba5f34b2423eee61338fe056d8b149cab9650ee254271c83fd67378e5b257d3802ef5b823b3d945f7b31a27a67abce74220bca329c5b188a3dfc4ef21917a154e5d862da6dab598e56697b6ae842e36c5ca37cfeb731859afc042b8b95295d5db9db77343bff336d3bbfde5ba1cfe671e415f7b3a16e3ae396363bf0b2f19673e7c3c0f73ea9f02cfd123eff5aed6d5a181b151a3e2e964ceecdc5b9538877eec818b523f054513d13b2df229de94c8f2d2e6b0be81de1932a2f8d8222b33ad3a1add920decf9fadfb8eecfda7c268a0bd37a6a18e0daa7914927dca91eb6bda480c5818cc9ae898c99ebf7e9f7c4bdb7c84ec6640750ef3540e6a73ca303817d9113a2cc1a1cc0cb533b37d7e650a00f1ccdabe3243f210db77c846c7be8ea2f3a1620c701f8e39b773f6514e9e128a6f1ce846f9dc47f8da30e13645394dc8ffc02f50f13ea643dbf1c78f899ddfe63afa5ca90cc8d167c939c3dd5bcca066fe567a0fecab3954ee5cfc2eec0f433801ccd59239bb1af97693b36f92d7a67afb225f3ee5ec8da5a3b6297b56777f24cf3d515f99c2f7d7996b82c9a8ea63829ba823e3129fdb71eb36c13dbc9fd331bfcdb6c0538ea0c4c97c68e3ebb7e7eef57e7c689c6215ca75f9d70caea2eefc2738bb85a3d263431311179c2328a1a171738b3994e3156b3df79eec1a2fe025282e549a9183e9b8e7e8191585f281bdc7b5648c3982ab48fbfe5e3e91e439853eb8e25a18cd0ac726989953f9621d4d0aabce1d4591faf5e4a9327ce96279e230ca58ecc98123609b70a8b6119fafa13dbb36e274c7beb8467c93a8adefe61da66d7fbf960ede2355e330d8eb734ddb91d8b51cf2b93a2a1f8ac2be3dd644cec27b0fecd63a3276a7f641f9595accb95fc2e74f6a3abcbaba266f2c460e489c08f373e178c90a5e873917b7fc8b0d73a28b7da1173e97321995b3c6b77daeb0d5c8bd17ac53de35e7c63ad9bf87db22aee08cf844583ee9a4581bdde737c68b9e5bf3aac6b88d754d06f2649fff393def7f278e07c9d993e0777ccfb319b74a4f15711ca8f699929e17295f18a3bbfa909bd8332853b7b6ab280c028351364e17dab46d60fb3c65a8cfaec51ac01e73de4e1d990ca601c77b38cf129ca50de74ca01a9ec7b8df1f13d7e54383e9c4f0fcb4eac524f1f80a3bf7d53e975e548532850ea981e2cc4d559e67c628b0636e6a6852e0f879f5cf4eca2978aa7a1f4c011fe15857d7338b950247f0a2d3e11a3a610ddd0ad5ceaca33b0ec85e873a803ee4702d4b1473978088b96267886386c4e1933a91cd7009a8cd173daafedacdb6bdb1bc4ed742de59c0784b7bf69c1bc3ac7d1eec3de3a207fef7ea8117cc7ba3b1bf60de2f98f7f7eaca3975cb883c3f0d86a7b04e6fa5bf26cbc5cb13aedf77d462b41985c298963d3ccbacbfc3d98b7dab3c250a9ee7f8afc80f640b9d85cd80b1a9ae51beb7e1776294eb8df3b9537d265323762af6905e94d6e683cf72849b84b3dc83d7398467ced0bc637c4679e3fa413c73480f8b4c757076bed50c5fe017b0d3b31c8d279211a5b1840fce2b2de790fd4ce35eaa2f35c496ec9cabe7cf65afc51dfb79c6bea6ded4700ed0397beeb1ff32fec00a7da9e158ffe61af55b9909e7fb34b977191f52591c90e81c35e35ee45e1c0f3404b0b185b5371a729ee53fbb96cf33a6ea1c83914dda7444cd39c9b3995746aec419a4d7d5e0c3ddcfb9aac008a5bee40f8993fba6ba06a5fe835d7fa100af171ff230d7f89df93a23c1faa67e162380ba9bee2bbec54a40140025f61ccf8e39a8532e715d657e233e24e38af272c6c69003962a01434071c2c0daf3d36e6b2f83a43608c606f706735d43f93aa1d5c535996d560e0ca6bd5323ccf041886a8a09ca82dc8fc6073d4f180084f5519f9bc4fe2ff926b8cff5eb3ae35a4d1f8e8b48df731a3b6c626a5b9da21293985f9fbc04430fd27806b471b6b17365f3d4e580a9e1fa4ad0ce31346991d4c4370986027e7e14a4369c475d6d6f48fee102e18950fd2b39b65879f3a465f3bba60de31ac5fd3a91ac3ac8f32e58f765f52fcbd6bd62f960eda8affbb9ae27ada996536fd1b37d073867e75921effd12f647655b1bf2ade4e92fb5f5b154c7399bafdccf605f881e774ebddd103a93529bfb13e5e355b6b57bf10f9c7e7fbec73ff01b3108b3ad5ca97d66f7d27b6ad5be803a6a8a8fc618f9d8d0e079a030e89c26f8848cfed0c8b6d135696668f56ac9e76118f7ecb0923128c72016d795def9deb55965650b9d385bd3d416f898d455a60cb5299ea2bc5d7530f34571823cbf795277a61e6f46664d225f341d616c0ad4c53a898db1d23509d7ddcee576a88ac7a76d3fc2beed2cacde34c23917a4b675654e0907745473b6efbeeedc57673d90b9522560c7d0ce0213b3cb6d6c419998aa11e8318773bc1017c06023c27531dcee9fb4fef8904b6504ae79be42df131e0752cff2065e977df6de3dd977112e07547be701eb793d696935ac036d31ed7034a4b3cffd209c4f8eac3952dfc8aed94b2db8e3748ed3d682bbd421fb57d721f3c142673a313c23712e0a0dcf8d95c5b4913ca9c04b4a962f2f51bd661fe7693f339dc8163a8bda321a0cba837ddda65c0709f6de19e925ef3c912fa05477a9bb960efa7f841fe9e019a7f127e58c29bfd25529b0843a79affb6b88bbd735ced37d10e2dcec73ad839d367f48ec3cafed8df7f1810e790c37cbc1334e8211cdeea52735dbeeeb2a59709f911bee20bbf6ebd5ed7b7d9eeeeb2655f9ccc56dfd183d685b27f1481d2832b48167083ca5e7fb73024be3103eb2b86f67afd75aa34d5f025ff7ae7e34e5b3d8ee85628c4d8db389f49f0e2c70289bfa793a4995fc3ff417619fafb02ef4f916fa949af6632bd7ab382b32e779b15fadd87f242d2c360fdbbd775e97e0f8f37d45707c65cf16788c1d2bf3d1d5396ff05a81fae3e13cdd3fe45d5b21d30fe70ecb85755828170a7dfa4dfbb195d9e5675f66fc7afb79ae3b3fc56df2dbcb7d1f5ad5badce396cce743c3b9541333a6235d1b50c5f9d2557d943c9d09234bc539f4c79defd9b3e63467bba9d22bccbf252fa12cb4106691de919355fe98217986f8907d06f7b0fb8c3abe99f55257071be2ffd8ee7761471ebbc64c5a5a089341784977e2ef0df5c51af2ff77f35f0e31ff25b68ff9d3f05f66739f1dc1f39c6e5aff79b38ba5cdcc69afefea6a7bfac4746251d8977908c3908c278afb624c03d8a067086ba0b3683ccf815d686c4399444f384d5e61761f5473a064aeade5cf4ff603f24566f709c198e80cbf40f9563dce837391f024a1bd4e7ca5f05e9b051b4750a2867b66c717f0317ba3ac3ef41e9754b6ff4d314100f9beb3fd99d971c27db072cd9e12e9ea7564fb0ad4cfc796f0ea629cd27bb98f77646d294f48f15ae19a72417370cf3a8232b358a99df239a812f15523cc3a8d6c67e675371f2d7de77b79f53e36e6fd01be984b2c36f79967c56a5f70c2e7c409e7e49c94c55d2ef66a614c34cd29b284d728c973fe74b64d1a67a4a1ee1692b8e76fcacf44b9cfb1c5aca2acaef285f23551ae97ed77c2271544b6b0c671de13e76ffee69cc23caee33dffd67382112ecc3dccc1977d90efba49cc62d70f5133676066fb1ddac65892a531e696506fb2c7dcaebf4fe01746b7b384df67e220500e36c5b896b5f137e8dfd9f1cde5242f985fecdfc798d6ec339c8d2878b4a5f28b274d02ba3af0507e28e6ea7e2fe7dd454ffc4cbacb454ffcaa7a62699cf5a22fe6fc54d5f050db138b9556162b411b7df3a47e6e9f784e7bb37ec23ab933a5b90b702de6c432d679d756f9e80ec68df054590f45f2a03836dab01f691b2be390a5f8954f17ef2ad1d3cf1e8b3e4ee7fe4478b2521bac383ffc53e1cc2a3980f3eac3e4f9654f940b57be262aea13a4f3c14939f351c747ffb08da5784b274e73b73231adbd184a6fbac5a5f7fa08376c68c4779fb4a7d7d85628b5a7bf382e78a2abd791a52ac0e9d27bb86a7a636867e731a9684f2e9766a10cff5dfe8b63fb70e2fc9a83f93f515cceb3c67464a80a056d4b126bc7396d9a5c2707c7b3c69c0cefaf9b6b80e2745adf75181463c5eb3289aba2bdb94e720c368ec6a1387a9263501d7fa9c2c2f18b27950686f61c6de533ca0988507cf76370b1495cb996ffe035e137e5335ca7c7c7b8b371609c7f81ea20cbf7cfaf2b5767780ad51189d3fa8d38b79ed41b31b2f940197e29837038c1f304c9ed9e4ceb5b1dc8dd19f7719318599e2d83f8a63cb216c78e2605bb39d117bfc6a7b7b52f7e8dafebd7d8ea7bc0d83f03cf9d1fcf64755765ba7f667d05db660f73b27f0efd97f01b15f28e1ce8053975b04be7f8647c4915efa96f13d1881bdee872c35dfdf063f0fc55ebe7436c98d99e6e7850e37ebbae0e382db363ba5be7de7dcd725636c1edecd4bcc6f5c111e631fbae0c26cc62ae5d5d6d2771a8839c53685712ccdfc6143ab4253cbbbaffea229f5e4f99c267988212bf1fe75473dca63be3d400bfa52c4c8da78d2117ecf0ad40fdba9760bbda94ae8205e6ce2fc55cd7e607cafa6b6af2c1dca7fae347ae0961ab93eef2c7bc771e0f73b42f18f7fd9faab33c2fcffdb3f9752f39dd9f4977bae4745f72badf97d39d695b611e2b92293bd89d5d7fc6a14fac3a1e53fcac5f389ef8ff5a57adc07c1bcda2d6ed7f5a7f4dddd66dab75d5924d7f04fffae79fab963b8ebc85f5a73df7bf39737b3a7afb360f6d134cc7d1edb79fc3eeddd3b749389f7d0b6d6fe49bf87f7f076ff35f6330fa1b7ff927bc003e7f3cfb3587bf9d51648e4108ff9ce13715df76d50ac79b51ebb6dda66f7e5cb5fcb9336add5eb3dfd19f7f4763743b4331d41f14f307d57ea1af6f99ce2df5fdcfef6ca77d43b39d9bff4bd1b714d5ba6a8dc3bf9df15bebf69709c2d1552b8c510bee47cbd6edf7eb1f3f98ab96389bb76e3bd475bbd3a1ae5a3218cfa6ad5bfaaad5476f655986babe6abd8e9dd62d4d51d4554bd8fea9fdfd77603a54eb96ba6a0d1cf84ceaaa35cc369d0353dc956baaf31d7e9cdbd3b0754bd3cc55eb2e1afbb031c391ddbaa5db375487eab0d7dfaf5a7208bfb9a1a8f60d73c3b2ff5cb5fae597a6ddfee7aad5ad7fa9f6f7df8bd9221c39addbffa1aea82bea7fff8193ef8dded018c1616b7df3e6fee85b081653331c4ffff8c574be3966647e7b1b399e197d73c7d1376f61edaf92c345d2ba6a897e307f8bfe32236f67c1a5ffbf9fdbf81f2fe69b3b8af0df83f99cfcd53723db6bddce16005cb586910946e9aca24f839189961cbc5698f363300a93abf19bd38ff7a320fdfb6514467b57c3aff6eee8cf9d057cdf7f5aa4f9c51b04b5743c6bdd466f8bd1d5bb461175a43f778e9f0677fea73f77d07394d15b3846e343ff49b3689707a82f890828ed1299ab469bff9fab166c63ebb605851d165ef2c4149448278aafd91b50f6fd7cf9c4041b8bb98e6c469e1b2aed3df99dd8883b53dbe77da74bade4b8b3d1190f58eac3647b18658c57dfa39cdeddf7a7b833b15969f2e4b7039b7d5e184c8779c20ae04667f8f069f3b0e877e9e4590b732667838a63092af189730419479d97678aef8b50d03398b4f64555285d23fd7899bb4320fff532e65ec833b7ca7eb9123bde3b04f70f859dc4f48a42d6b4eeaf039d210156219ba85887e82171c02b1b51008ba4f8297e163fb658854a88aa1c550a4d5526c1584cccac6b8667aaeb2db944a101787401cfec587c088944763c9b2b0c89b1995be408cd8dcd7839c1b6ba8aa832b604b03105259fd4d05f7b36fb1c596a678a0cdbc2225a95cedcc3e7e412f42ab1cd1c1fe8c8de9f639c2c6d46f6ac2ecd189ab479872194f39c0bb1e68558f312ccba04b3ce93cc6531ebf3af6b5250f2d38f358b8b5a9e68ac2b13e53eb678d25718efa4c0d7c992a00e13ec2ee42b393fd5cea66c21b627ad7a9e7e8b73fa3703588b13d70e75d6c3b61bc09ec905016062176adb6b4e04821debaafcf6a4d29ed31b00bb925c1911d4b85b829aba85213aa1252813628f2d8d7186487a860943760b596702578d93dff649743e04c0966dffb9136083af055c07a72e0ab62de272f682bc9935fa05c63e43e0732a50ee5109b6896e5d2e5bb05e5b33a1f610c439e4420bd9d21c26af57e9a583419ae9183422c9c66dfe9802e25b7dad0a1430873a983d1b8051ef79b7a06923521734b6c9384d2d46a609d0038e55f6b36ffbfc0cff7d37d7559972543e7cea720b8ba1035c8407153d8d2d26003a3b0046371770fed160d6d85057f5c0c3a4f06aeeb95a8f001e817d717fd0d9151bea9ac87e796e6a772e3c2f1c1f4c7741d968cc17223f989b5a7f4bb824c0df60610860a26b8365b6700f5e73ce2643b2f3de64e60817d76a4220b45344eb5d63468a8165c76edb4f5c1c37234fdfd54f543cb74e42e95ef26243101fda8739fa19216a3b8d4e86fdd79a3c3fd0330fe5c3f39eaffbd5546960b303cfd2ee6ac95205ad55a8cbbc123d6c10582a227c0bec784736b0bad677b37ede86fef19d7ed52904b277cd2ea99b8fda1c3902384c1a9b71589ff593d8c1f5fcf15e5cf5efb99bfee479d5efade29ff777ab5f5d77fd535bc5eae62efaa950f33e1f523f79fa46dd88943cf11c7573473e3f6ce417bbad29612c032a781c4ea3febd18f527d3e057d79d3fde3fb47fdd4b56bf4bb5b521c0bfb530fe45ae7bbce7acfe107eb75ae377d1377d10ae9e5e3ce771086e1ebbeebcff02c877c07954f0efd146ea3c0e51bbd6fdcd2b0bdbd27fe16efa2f62f0347457eae6013d4bdd3cc41ab9e7d7bd6cf5eff9bacfa5e409bce7619dbc073d03be0fd0a41fab4dbf3b0d94ae8bc6a94fc3f7ddad93f73dbecce7f07b5921d70fa7df1f79f83fc521e31a3cf26bfb2969433cfdf6c807376a1c465aa63d3f41b66dfb3e7d29d435997a52e9a581017cd32a30ea8bc06f9c2e17590c06b8195d782636db1b0381a70c52d813af3324c3505b4421694bb2f71a16e140eda333edab5518654fbeec9e9d066a2f8dfa7960d308d81e4afaa68ddd797f7287f6820cf7c2bd780df7c7ee5a866becf95ad3d6567ff2ccfce469ab7f4f3ebff46979031c752332da701a3c0ea9557f4cc53fabd71dbc6ebbd6eef9649de17dc853c1a3b69a3feeeecd80ec9b1ffd1995ac7db827afe19eeaf756ebfe789ad967b07d9293ee353a5cf595bacf7d66d03d2f0f257bacbf7a1c82d7473c4e1bf4be7b3e5def3fc71efc9e2ed923738d5f2dc8f56f8f2f377375b6b61e63dac9b4e77bb66dd27e1c20e32fa838231e32323c1367aa45ae3f3786997bb631d3ecb9808bd7378f9716b6a54e31248b9527baba8a8ae27c877a0d8991f78afc2cf93220490cb354d8fe95bb7d5fc3fd7ed8de230a210d967a7c0828ce298295c60bf7c0c475edabecfcee02a77b3cadabeb44a68e51e1e3f1fe35a82f4d0b64257dfb98d8795941da7cbb69006d1f3c6e4981d92840459e19dd3584cec42145994e0ba4de9daf1a2419ef2a30bbdbf61c322ed2eed314b22371c20a9d36d1930fe20d854077a8472b40ec398123b8d0c64504644f5da407429b847604686f0c96f9988f14141f12425c6ce70a4e6cb1caaaa99e8bc1c397e2b2f5d77c3121c8ae5c6b7b96aa6c6c816f9af48bd683cd729ecebcbab6a6789600fc91ba4de63d11692fd40d6bf625b9b6f6dc48963f20f8a9f68cac632c073051047a1e2a229762ac4e9ae472205bea11f0409bcdcb89953def9d6dfcc2f23b5b5f71b98ce02cbfbd6c5aa01acf7187d1d5358d0a1aaa204e6486c572c44e5fb986e6ad2c815f20ffcc6cea6ec9101b26d7abed85c51690829ce85c6b5014bf29f15e2a43b2fbc4ee29b12d7436895d848a77ab6de4fb72341964d6dc6a2bc757a87826f13726496789ec78af8feb22133fb34c9c91b3b9567264726d739998ea68892e90917da6c0c7ba2a53862605363b08f4837ddcb44f9f8228e9543a1989e5571454c5e4c4eea3d0890d865f985a90f81c115106b4e52ce63aa82b8bf7b0192ed279b541fba9cb01531bcc0d4d746d062c0c5609754d741f91dfbce2ddf81c4c0b4938feabfb28d0b4d51b04b680483ca0ed0765f3413b4b6d93149772d1e9eaef9174accf1ca325ef2d2645fb4c78a7aab6364ce0ebc4c69184cf162b15cd630559e287ce6529aef413916295278c769be1d676f4c6b3e34bf6f4f0cf3ff6deae2d709a394031cac2f3fda3c6be1cdbfb89c6bc3c69b7e1587f3059fd519815528c21326bc46031be961b660b4cd5f1b366891d6c44d841f48c0c5187a95ebb96aa50ba0ae5c143339f2ad15b703e44731f3b1c279ba926c37c4dafaba9fb91eb9fba1c0b753de27ff37416d99324ce9b87d928b7b7ed82769c484f4bf4cca8d4e6ae5aab49df5542a09fb71f180f159c7bd77bf69e919bc3e4dbef7a07d4194afb91f6f5fc394bd9777f09ac5e9df6363dc35869a6abed60e4e3b3f177cc035e235f630e2adbda70fca13d8eec5ce6ec391ff0cc8b0de45ffefce39e8ed3a9c835a03ea082f049e5a7464f02362b9f3dc7c95069cf54575f41970396ca07d6a9486466036009caca143a0b63482f1c951ec373f3dc394ff8fd5fc20730b79876319ebca1cc5114a97feeb5ee6852f815e44c693b1b8ef3252ff8ec79c13b76feb9c77c2f96f7f9c7bea61fe7929b7dca313f71a1cd8f24ac3d0e9b0e6dc62a7fc85fb6ef78960fbe171491c88f47aad7eebebd82e3396b60307c28e2d807351adecde1ba4605c889cdf4385cb90e0328b39be01c64ea8023a611160df9d13f265e9fb5998fe23f816da34981c53cfd4b9ee362fdef7807bbf78c8b6d79b12d2fb62599a38b6dd960ad5c6ccb54e65e6ccb63d6fac5b6bcd89617dbf2938dfdc5b6bcd896ef2986e2efd8302729e2be1b3fab17afd6d5953b2ccb7f29c83739c877128ca53d46f17b82e7ba9bdbac3231bb9c67c7283feaafd7a92c0dba53d7d1e4c0f26dc4c360687260306d0fe7a660aed643bc6dbd9877558cff1d71effadc01a0296740ca8380c604e377d133508ed52e5e71e56e75f9954b7460d76245d762315e1473af72e83c3fc8d9c16bab76018f03dc47fede7f67eed5f3a93803502cbf065665df3773d2f58ff0b87bcf3ff57adfdad197b5fe2f5deb712d3e2190e116111a710bad2c062c1077586fb0c47c2dca35ca9d47fc37f2d2ee4d71d1dddd3c598265eaac92b34b143ccf665cd7f03b31ca3bf6b37c018d720ae30b1fd1a7e623fab7f0eccc754d9e9f1d07cea07df415fc5d687c8ef4033497a9a42d27ca0322ba6ba297d7c47c3ee018412d3e9599125addbbb92528335d5d05a280eec5b254bd764db53d353523307a8a67edcbb18a9ceb3d6ce611dc0a599ba4825b663f4e75c231388881358e5b257d3802ef5b823b3d905f7b71a69a67ebc462e808ea85f81d2b97bc937c46f2dfd3596969cd40d40ceb5cda9e1aba9094896b5414badcc6146af213704bc43bd4e5d27734e414c8b4edfc7a6f853e9bc79157dccf86baa92d74368ec067e22d67cf87991a3d318267e997f0f9d76b6fc398971c38bde991f16a726fdedc229fe7d1316a0aaebd829c35b2dfe889c50c0ad775559cc782ef505791ce74a6057adfc4629585d393da47be2373ffc9301a68ef3da950c77eade45148e58a80afaf29c737f0fcb0888e99ec79ab6cdfd7906f499b8f90dd1354d3a74a6e33a02ea7cc3dc945a62cd621381407588c13eb1a3787369cd5e5624375908f03d97702b4d1d7d8d751743e948f01e9c311e776de3e3a9ceb1707f1c3d5ea3fb97695709b229e5d8b155d1d9eaf426766b1cae60c63b2c96d731d7dae5406e4e9b3f89c111fe4a571608f15e46f25f7c0f5c107d22bc21f0d00f187219c00e65bd99e5dcd7cbbc9d997dba65afb225f3ee516efa6add920aebb3fd2e79ea8af7ad1fb6be9ee189351d5c701c14dd4d2d389cfedc8759be01edecfe998dfe695ae0d28439392f9183d8da3bba7f17e7c484ab10ae5beb22caea2e6fca738bb366da912b0c7880b8e32d435b0056f7928c7abd67ade3da72ad6be1df71cbd3177fe87d01645be3a65b3c7b5e48b3d82ab48fbfe5edea8e439853eb8c25a187b639116723fe494e02cb12b11cc8c782a5f2c6dfbabaa7347799dd6db738a22f5893c610d15f17f50c42694acd900d87e1b385d6e05f723f1c535d993a8adefe61d9e29b1b9af0ba23dd2af1a8787bd3ed7b41db15d2bf60660d41bd0889f6acf1e6bb2cfd0bd657ee4c2f334eb43ac384b0b39f74bf8fc939a0e43ceb35979a93380c489303f178e97a0eb10e762867fb1614e74a12ff4c2e7522aa372d678dae72a1b90dc7bc13ae55c7376ac53fc5bb82d58e9cb147ab7fd93626dc6ba260379726cbd53c9b3995746ce5da7bf1bc783f0ec27c1ef9802bf312b798d711ca8fe99929c17032f537bca1305391e691cb5b55dfbae2180998178dd1d60f94aac6b03607439540716e59a6ccfb42ca601c77b043e34984e6c6a83b9d510cf40fafd21715d5d5dcf2c16ee092faa1793c4f1eaddfb6a9f4bb201fbcf901a288c17e88c9b1923b01105a8c30126b7fed92939054f56efa3888f50f22cc159da701f09d4e9700dccba866e856a67d6d11d1fc85e873a8027f6502d4b1c73f75f5dcc15eb208e1912874fea4436c325a0365ff4a8fa6b37d3f6e6f23a5d0b3967c1c6143ab1d3cd8b61d67efede332e7ae07fb11e78c1bc375abb17ccfb05f3fe5e5df9b06e5922cf4f83e129aad35bedafc972f112aedff7d462dc181aae93b18f67b1e32c676f1bf95675edd935059e31b01f6805bf375529b050be37e75bac8872bd713e77aacf6c3179eab38b6b8aa7b5f9e0b3282be12c17f818d542c13c7360d43bc267943bae1fc33387f5303a307a67e75bcdf0057e013b3dcbd178a21aeda5b1840fce2b2de590fd4ce35eae2f35c49664cfd562cefb8fca65afc51dfb89c6bea6ded4700ee0395b7c2e7ed0d87f197f6085bed43087fdf7d60ed8caccc1e654bebbac0fa924fef54a748e9a712f722f8e074e4da817087c5b14f885d1e516ba660406730446964ddad41c67a3fbfcc678d1a94a2c457a5d0d3edc6638a9d497fc217172df082c4129f51fecfa0be1f5afee4b1ee61abf33bfa61ec1fa267e16c30750771b1baab1b4fd57d7d49e5d87e137226c0bd3c17595b5be9b8e2bcacb9180282891ee2b534350a6a200167b7edab4f6b299d66fc3586b47f03c94afa3ae4352937963336066f93b35c27c535d03b1e7cc0df59adc8ffb0b9f67080ac2fa18dd26b1ff4bbe099681b5f34d48ada60fc745a4ef39891de6cbc156a7a8c62436e2c91a7213534be319d0c6d9c6ceb57e280a4a40ea2b8111aa81dc4e6ae2070443e159ddbbb93e9bc279f4ac599fe41fb6119e485757aece4a4b9bed47d9fcaec786710dbdb85f279255fb79de45ebbeacfe65c9ba07cac2d478da18eee7ba9eb4a6da61bd4568ab320a75769e15f2deafa08f55b6b5db8c6f25577fa9ad8f25fac4f97ce519ec0bd1e3ceaab74f2da65f6a737fa27cbccab65efc03a7df9feff10ffc4e0cc256aed43eb3dded3d756a5ff08b0c3e9ae4854b009e078666a0739ae01382a2da9615b68d67fb0e38c40ad4c3f7e5daa58776dc70eb07afd5e74c2c7ce5ea4c2742f9dc021f8f861cd261767db470df538dfdb349db8fc0c8af744df2ac4a8c34e7d9d06ed1067579329ed1735585421c753da83b1a8121bcbafa908b0c559eeb6a3bb0198aac035c577d84f217c1646b93e01ad35047737c3e74d4d7b91d4f515d189de820b6df099bd628267dfe183e81123e89ec3e2ae51ec173938f1386e3a629401476743b3c46c84ec3f564a04cb27cdb2df0c5d7df1bb82d130bce49915eb6bb47eec9b5b5fbb4c59b6feb6f26f6953de6f0bb992c7fc419f09e82b2307afde8a01e6fc17c0e046565a8eda91d7387f8e692be3fabeda426ec6abb67446893301613257c29017aee418e40d37ead3ddd57c2236380a1ae4a209fcf72af6f67af7ba86c74d529e67afc44fa81a3c99ec1e4f20aa7f3d94027833210ca76b8dfcf6e37c1bd07d71bb4039daf802161a06c84728e0facd9c9f4e299a382a94efc5567e5c26515689f87a65ac273fa89d67eadf6761bdaaf582f38d27e4d308eb95ce2c012900e903fa79535c894109fbb979853d3b17b4fcce977da5096c08f0db53227ec397bce27f7d4e6e712f889a17a4b4b80ba38c687409dda4498d6f62ca901fed4e5022b133b6aa8232767fd11b654721657d7d4d6551a20ae3161df86a8635bed7070a07afc86e6c1be06d62ca987ced1f68c5bdaccabababeda9d8533649be3eaa375964d354e5d231fcac342ffb623f1ce0731d958e74ad982be274b87599b6a08d3e9b9e0a9bbea363d5c825cfea44f5e2bd028e83a5b10a3ffd0c4638ef6f436a82f8a2f0e0eeea5de81e0ae56f34e24bdad5853e28f718d86cbdf5bc3b6eb9fda93986777343f380ce2a94ae4aa1319c22b980eb45ece4c194f49fe8160dec4564831663f64f15ab9b1ada00d73f38cdda46baab518f2fa597bdb6ee7965fb1d2873319705f6db273168f83fc65407a4feaf0412ff9891f8ff30fe01fb03341924ebdfce9c1d0dcfb559491f4eb4e6a18cdfcf13aeada391f13a5d2de75cfdf8706e551c03e6f6645df37318f140fb7460b3182f9ae823199ee8ccb98bf1b0c99836ccbf49e2d647e828f9bafda1df935c573f67fd99e4e753382e0a65b5b73455b876f9c86210474848f85429533340534e18435de7adcb13c595bda513d311b43feac59765cff607888b3487bfa76c9c34535016622f1ddf8511afa01e9bca3fc281ba71549463b811113f075a2f91c54aefc5567816c10720bcf4d9393de5b9c580027c0bfaf94c3e93aab636b3c78ed4c14ca113e84ca51cbb4faeab793e1119c2917d85e35aba4a2fa1ee6b330a63405b2d5d879dd4bfd90c0f4264c05175e8f9b85a4e719e7da8c3159ec9ba86742fd457643f329dc886fb0bc5a0b63aa6d39396442745f734afbfff5172eabf13ff525a8f7e779dffcce1392d93b7699ee848ddc658ec9e12db02d2cf90fd8c70506a1b610e537d0bf7377346af5cbc26d1ba486217c95ceedbee4de572712e5e4eff6d96f30ef77a99aef280b9563579a5c3fdd8e3695d5d07c60c6c79e9314ef2bdfdf877c5cb3e2eaff7823939774ecac9ec97c3b98467c8d9f39bc9f9f9e9f52c725e5e726b3f7b6e6d73deb993d67a82d755ebc1cf641fd6b459910e00e56c646a838d28d0b4d51b04367c1eb6d767b6cfafcc5e3f14857560b383cd5397c3fe35adef1ada60d2148393dbbe7adca6b1c5a05c843a6380f3186af931144f675cf78596ef9f5f31f72bc9cd08ec9823ed57a6a220b5a17efcbafd3fb4612323c75f52a11fa7fdb8e8c80d746455a17475e039c2c391d8621a38023fd5b58197efcb05d0168a9d73e71f33e4bd5fe1acaa6e6bc31c4c1ad8fe7ecc70bb5e2b748ec8d0a45951ae90c50c0263762c7f3bbd34a0cd94ffecb1aeca6f4f2aed39bd41317f691586c6e727664c4798d3563cbabe54de9866d6f96978ca547a85f8382b6260c3e4bae25ca8628cf043b2b6327215c587c1ccf2790a9e37fa909bc07e594267f684e30848ce3feddaa4595e4dca8ab9319455962f878e3a0046f76e9ecdf131bad806b6850e85e5211f5abda96ba99d29928dea7380647f0fe7d56dcf87869c67e9187e087fc23c5dcf5572dff7daf859cab5d3dde1b168664f239d0f8daf270a83a5ce2673d689773f1bb1ae3af8efaee7e92ce2730d45a1bd84ba964e6abcc13ea2734250a68ff9799535786b499b1167064f916b69db9f46bb75bb72e5ff4267d6b4716c4e0c93b93f2f7f45f326564f9916fa79aa305499fb8fd045c9fa3811de455562a35a1795b17cdee2b56bd78e7920e782a08449ec10bf53d9109c426c31eb0dca7fc5b22674b05fb361eda0e4fcf9903d39b1187a8c316f47d6c948efcfe590d83ca9e0585e1fcf8ee9c02ef061399a4c590c75e43e90699b1d2cad13c63275a613e93ea8e6749fca4b4b857281c4917b129da36717f9c7efd3f1ceac3bb20f811d73ac29289489704b281f7f6eb136e6fe49dbc7458ebaa64c8d0b8de1dd1cfbd71514137c1c728ca1499b840f28f1cbd90cca0b4ff748632c07eaef47d9125097f09635390993f14b7c8f11e1c66c70ae784b27c67e4c13fb3833b283db984287b68467c4e568c23910d650debdefac50dbf47e1e4c56c77234193ca94660cf0a70291979988f6b95de0c555941d99ba7e31d976b9db7f773b0359807a0defa57afdd67ad1fa13c7f759dc46103cb1f043a83f52f82dfd8fa937bd2d2eaf5513d33475d4f11af404fa6ec9932717a0ad45b51ce0ee22760d63459171ecea957daa2c0c70823d29368a817206c1792e983b9a18258eca57a5caaf7d9f1b53bd410173adc930b8b7ddefab6c79c67cda6dbf6f7fa38cea50d28db07630761151ae674e33129db5f638be98486caef73e98c7556d9384227aa9ca7e43ac1892d5659e5f02614ea61db7b33326b8670a61b84996107b1a3ca94a34909160358aa04a01c46b14e5f496a0b5088732233af8773d770ecd2fe7fc8f93ab3fd0e6d9fdd5ec773f415e203062b2d1ded64dc9981d1a59378f9d23e77ae0f237b96b0fa0af9d7135d5d87a7ca73b0059e42b8a1f1ef1c7bda7384921aaf9f68cd43bb4f2fa99bdbd0c77f94be9aeebb0acc4aaaf309894ca9e52bc1768f207b8ec08716e36c9ebad00627cf103abed8f592b5028cee7447a6a37aea8ceee236721b8cfbc8d8548df4cffc765fb8b0cb30c372a81fd45bcdc8ab5d7b865c5b1fef91e86b382764a786532c0af879a66a906b08b6fc43b95d3e88676496c1939e3def14bffb2bc8438c99a62e5c205f1797e1d9b3b3f3dd10dcdf1718eb729c47c378143ecfce8d9fa8d2d33f916e8b6dae938d37983e690916bc139f3f8f9d0ff3790dd0cf278abb96db3e4d65785247f3778e7d959efe89d67ca46b8389792a6ea7e370f0f9f1ec9c980bb92eabf3d7abebcb28d44e8ece8cf8ce541a587e955fa8110628edcb07e56165f28ce88da10d902e5c82c9adcedfddcef1e17cdd3fe45d5b61371eca1652bb2a2c3ccb0bf5d5a6fd487e2a6bcd03a74b67b969cae44f71bbfcf632974ba1645fefe501e7ef23e43b5f4339e6fd16ee1906e7737d051d098f53e9fc7db84fc454dbb9f1ef1c5c5a12476f2ec3580ee808ffae6cc49e333751ee4ec6b7813894b7cf3766d2d21a92385ca6d6dd634edce1117135233f406069dcd29e0d0e634fe5722fc5a07c90bf04eb0847c56c8bf4a08bcf57bcf87c3fbd7cfb0c3e5f3cff55f8b8440672685dd791697bf7ece86159f995e0cb705da08c2c4bfdc476d0ccb78b64c287709d380ca0cc2e3d3105101a5d3a8b0faae5ef4de5e896b30418dd1dac006b6a838cecdf1f6bdcff7c7c33e6becff24ce23a9ec9b9a14c9fba592c08a0ec98237db99b1b840fd050dbd4e30ef609eaa5af2e5c3b569cc523be974b5f59386a1e5627e1450187b9e6e9bdede5697109f2e1199413f7c07ba54eac43c66b7e672ea436197369d0ecfc9de4bdf774582fc249aad6c5dfa76bd31dbe36c0c880845721f1dbdfcd4cf579260a46a8abb68bf298871ca56bd2ccd03276db7bfdf8973dfbe9f76c155e7cbb1668b44f4e53f721d113cacfbe177c46ef9c5ffa6cba177bab850f7d215c1807cf7a843a1aab84ba26ee71ff4c5da223a0fd71b8dfca712c897ef151fe0a9447e0d7e39b7d4d75c3065cb3a846a0435b021f8b82726d232e6e19f300a0be79db3ce807f040f0894bcb7fc5f162b513efe278535c7d26cefccefc1e16b65dac35062fe4da267875f8bda93a8b84c31cd5ff103a2cc24811cec62dd7d61ec6185eb39b1796f47f69c335ea2bd3833cb892fe1f8343341905d845fe1c9fdfe88cb2301066b2e81ab4978085785bec71816f18c9e027559e9bea7afaa4667101b572ca766d77143b57a6bb36b81338825b752ee573d8311eb0520e2f7c76a25a47898eac3e87a876913698232e6594d388fb2276bda9a171b0ffc09a3d07bb738c70889ed593973b67c607cfe908c984024ca97f333e2926a520ffe0700e95eb63fd2f4a52ff3e23971de1c6ddbe9bf36dbf1311bc41264fe76e9ee60b65ed154102188b4072830465bf9e6c850d93f6e5c3722d2ff1ab4bfcea93fba63e43fc6a6368cf5196bfaf4a5fdce189e565e0f4063972b694eb28e5dab519854ab8c650be86ffea629b8e9fe91ad45dd079beb2188031e3b836d806f7ab693d92c3b8c9c7c89e7f178ecc48eb2cd0c93c57d99c0fe4bc471c724d38452dbf83edc45dcec2c09a194b9349b87700e1a67ba7de9bc71d5d5bae26751d8aea706dfb76f6da6a15f50e3e917c4c789d4f8469c9f2cb9e1db7b5c7e3f9f97df7356b4934c571d1a63af070aeef59c77f9757f7f3affd5aed6da89f95d72fad921b096f6d5e5c2cadad7054ce6bcaa19a2f87c1a2b83ef547c5d8caf9883ed13a29af21d12d8d6f9e2ae731aca3373e673121f5fc899c35e638c40b3bce704ff4e495a1cad82f897cc5fc02e59fa77598690fdac8489f54afb33e882c87268bf86e0ffd47c8f6b57a468e2fb922a78e60393e48a74cfc2a51dd7a04cfdbbe1ec663f07bf37d05789f6feb0f749dc0e8daaee1af3d03d5d2e23cb197d4f62bcc8fc63ff5f9196343a5918cf9ffd9fbd2e654b16effaff22fdff679fa00c69c78aaee8b60226294c4214cb76e7531d8a082728f38e0ade7bbff6b0fc066148cc9499ef6c5e98ecab087b5d7bc7eebc3f1e85cd1d79bea97e8d77372ace5e73d274f2b3aef1fad0fd92af7257ab6968ef323f217e23d3f6197a3ebec8cdfb620566370e202618c0d1375d9911d8edfab76b06f308141bc7f6bae293eefefe5ff8398b17e65ec1d87ec71cfce6793fb35b2a3cd2dc21982cfab11d7c0b407fbf7f71d5d6a33ea640f6361c4732d8c2ffc263b55610e76d81ffdbcb9b28bda78b788de21ad847432e890cfbab1461396d219dfd1e72cf673d589cd16d5244467f5948f6142e027c175af15cb2fd83f2dc2f9c5b883211e028ccdbd6d1fa13f7742636cca9afb28e3982d7c068b9e01fd41a6a3bb62a049c3f278ee797b0df39b100dc7b599680c26583b201f37e5e3d85beaa4b51a807b212f8bfb4fd4d3272e952b365e9ed663439999a6e70ab9af28b6e540ff43a4af76972a87f03530664d18a3d9e4e028d5d449c799b8cc85f26af67a53f088799e3a8f23e2fa5a7145c30d75f9f112fb31b7aa6ce03826c44241f9293076cec2fc03703dea3786f554b8be310ec71307d6d459029ddf0c7b3cad04d80f599347e97cbc32dacb9b8ba3af44bf504fedf4e7aaa4ee8cfcdeb1887657393dd0a2710814ec175094c382e29b4bcc4773f53e4d1abd455ed4b327c29ee4dc6197e3938ecf6906c3a4a67c7847ccf344efec8faff7b4f5afd097e454ed75a766aef5a9da9cf7b409cbeb843fd39a077af3623832b6eeb67661afff0f8f994badadde1c87fea1cfbff64c77abbb6d0ae72d5d71e23f3d4efcb5ff414ddef286fe07e7ebe3c4fb8a6540d8d7af0877be027f473e5f643bf03deabf1adf1a9ef66bb6f21b3fffaff1b2b41a3f1b8d6f0d417367e0af7ffffb5bc39afbf656ffd358bbdfcdb5b19cfdfabede189ab39cfb3fbf3f4f3af783ef8bcd7af57d63d8335743bffdb5d9787fa12ffe043f8267cf577fafc1ffcd99afcd9d0df87385de927fcbb7c6667e9c357edeb5da773fbe35dcb5396bfcbc69dec23ffff2e7f0568662a87f51ccbfa8d694bef9c9b47f52b77fdede50ad3bfa86faf10745ffa4a8c6b7c67cf39739ffd5f8f9b7e66c66df1a9b00befd61b66bfcbcbdf9f183f9d6e057ebc6cf3675d36ab7e96f0dc199af968d9ff4b7c610beb5d964a89b6f8dd7b9d9f8495314f5adc1c57fca7ffde56926d5f8497d6b8c4df04cea5b63420e9d7596682a3754fb167c5c1bcb4de3277d7bf7ad71efcf5d3098c9cc68fca45b77549b6a376f6ebf35840df8e68ea25a77cc5db3f9ef6f8d61f9a5d1b4fffdadd1a97ea9fcd75fdbd57633331b3fff9bfa467da3fee7df60d3edd92fb84660d91adfedb53bfbbe71b64b6d335ffeeb6fa6fdddd47cedfbaf99696bfe776bee7fb7b77a9a3ab2c4d1f8d6e05d6ffdcb7fd17c3b4168d1ef0f6b03fd30d57e59331ffd3d5eaff15f43cd37ecc6cfd5d671be3526bee6cca25d859fc6330d921bb8965b77e7ce6c135e8dde1c7d7c9879d1dfd3d9c64f5d0dbe4add315c9b5bf0beff6be0e1171f0c38d2f9aaf1d3ffb59d7d7bd32ac2890cd7e6f9db60adff74d7267c8e38fbb599c3f5a1ffa49bf0747b702ee1d12f9d12deabca87fedfdf1a607c8d9f0dc0a490d22f2c344ef4156cd868bd31653cac7703c63beacc8d6f30c25a95687be0b60335682f0db7eb9a1d6a2f04eda3c2d88e2e3d2e62e38f7002b83665f6ee6f07417b6134fb8b81dbf28ce668ab326d66000528b8bfbb191c1fb7c30e1d3e6babad04d2309ff73961a72363193bc4dad311d51df25da16534a19369aa4a026db80e359bb0239deb6ef98e3d7da5ef3dfe1135fe351fd6d6c4115ea673768adf131b78e5056bf314c326183c1486be2a8f6d95eb52caa9a45987a515f74024439120fc150a9d1ca060ab1ef88de79c6d08608e9ed59deb4d910a1bb2991250dea2065f10bc5e91555b930eb6e23aa821676132560ccc5eb3710bb916ef5314f87e4061706f0cc6ce0147af2ac8c5b9ce39470d2620e7398d0fb6d11cf944d380b313ba32cfc92bc672c50015b69c9b6411df9fa3b0ee0c46b0f50e1d01569fe9ecc8794e6ea25a4c9392b3fc70f025aebd40457b9f3f307b72ac9dabf3e31d0c944b3a3fae86f7c719de81ce1c3e9eaedd768183f793ad75b3bfd3f39b959cb3d6a8b9f06f0085545003f92fb0de10c8b17531deed8a47836b6f0dc699ebdc2b2cae28e5e357a0aba273e0184d76a7af044f710fce403ebd4fc534d0dfeacd3cddaf640ea90073be630be8b17d4797ba417192eae97946f79f513c1eeae75574dfecd855c75809398165703fb615e5f81abe7b91a2a3d2466dd92299bead301b58108d124dab35605098f60615a1450d97179a3c0e41c92c456a2d130dd17a89848a9a0d8be018fda2315e0acc8218ff47033e796160e82be8e30ae35c3a301317c5e6ca9bf704b5269bf67dfeb527408e7e6be264a85b97f316a4d7562c5e249bf2a1a49409bbd1a12d0d934850526312b4ae1ea0051af3bbf871b45ee5e4b935d0c18cd5d899f5206815d1a0af7ab11ecfc1b50dd769a933028d9b1781b5223fbb86db5da1bfefd78a2450a6d4dd0c3aec5667680fec394c22ebb181ce7861f3843702bd601f25f6ab9972df83c98551a24b51927a514160261977a3e4266c95c92cbc8e52df418d985e2d341f28bb02553a60de2fac35f91e162e98ae830a1b564b94f084d67ccb7751534c85e96e7192d916fa2f3967a1c8e31dd94c01d19c79e47b2c6dacd89dc1bce61765564fe6f75569ec29133ad6e54f16c2d28eca39364e1a7cd39ae992b8d4a44772ede27932e2b2a4096add7952aa6c17163d9500a7a6ce6edf3164d1834db6d2cf82a043f01ce6e86736e2c397d1c990ff5a16d6193d3327992fe5eb7ed524da319a635b97efab0152405a05bacc2bd6c3c69e2e019e6ac3e6de046f682ab0b96bece7addbd89c9c5749b279016048dfd59b7d5f91c3f80a1cb36f724e36713b0518c43b37eba7077e3f7c60ef868bd17ed8db07cf0ff7fbbf3bd6e159de07d2f1de7f16a9f5b0bba19ebbf49d74e42961619bd2f11e7f7e3c0a53a3258b9b407028ef69b2f4870fbc3f5c2cbdbf3bd6fae9e1b1f5f7435f1f76a8963c71d0ffe54df037beeee981d58713f0ddfe80de45df0d9dcd7e30b5cda78973f7d4b1d6c3a983bf73cc2711fd7f76ecb79f26705c87e1f1b509c6329cb277c329ef0d26d65e3a3ec26749c7c740c6f7fcfd20e8c3876ed5e752c202dcf37808df039f01dee7d0781efbe3b0b3f4c48e05d7694883f7dd1fc2f73d4dd76bf0bd20e2eb27cbdba72ef84d34f1ba7a4fdd833108c7102cbf3f75bd3b29d8f832319e67871c5bdaa7dfdf28b2400d24d4745a93d2e733070089eb1ecd0e8b80b45d070218d43d1b63ae4b41d01b7764213a833c0c8e85e7c2b18467af5e42b00ec74713e3abd4f03fc55f92b25385e3a5e13c33364d0c8a05af95e7d67ab8b88767410067e181bf01e72349cb80c64637b27cd0878b11f3dca5f5e103fe3c1dd2c2d131a523cfc893a5f734a1f6c339153c9fa63b705d4c6b0fdd90ced039ec52de93bc5f3f25cfa687cfcd8fe18a0a691f9cc91b70a686bdfd61385f12e70c8caf6f46678ddeec8762d5e78e1878cff4b1e48c0df74f13e7f509add311beefa11bd1fbf3dc06dfd32567642d77f75b7cfdafa7e9dd5a5a1df4a7803689f1dc9263eba7e30084bfe0848c782478381167aa127385f1d1f89e38664aca05183f3d235e5a38960a89c673bd292c1469ef17c5f9b27a0d8e9bf78afc2cf93c604a0b0fa3d73d6c76ae4a7b2b7e5fcdf39e1d6f95f39e2af01def9480ce34fdcace95682efee82c51d376d5cb298a2db2afc8fdf512cdc37a5d5a910e214f9dcf007f9ca7af8173a9e9b789e6f63eb1f398a672e21cb976d318d83e61611ed2e97d0fc802d81c8e6b2f4c5cc4902ca4797b7115b95f45364e4131536d9fe58962a468dc1701c25ce138e1099d36d49333f18622fbb687015f43e03c5c7835e8403d10d824342c3c81456479391f5151f70602daac4661b1146c765457cfcd299aba36fc2ba5f9e2a2e7245f6bc1a6bd06d75d14146b16f133480f4693b515e6d53264d1d639c79d49215051583cf7d6b3fb1f0d3895e12dbae46c73e25987948cf115d9ce89958dd2e015c924fe721ec192051255e310688fdb187c85dd2bb08136e2197a93c576fa1e02e3ea5c770bfd33ab252cb654e4feafda8db1938514ef22d770e172159ef0ac64ed82527a0b7908794e8c9e18185cfb18da451a6c8add82be2f531608d06d761ff3f1bd8592eda1bf71076429f83fe61d6ff5715d79e267e6892b2c9b2b153886d7d6e789918ed64b83bf43609a4091044a95fb9ed11c7b4ae61cd79dd3ef8d338767fe423a198ee59f069b347b4beb896b072ad3dd6ab217fa1c61a138b0e574e626d340a38817a772332ca8f3cae3d6a0c33a1a06273618671b82953f41bff989772339b8d33908b8ed99eeabf5c4d1b4de1b7b06e0033db01e40d71bd66bf411e5a55c75baea67245aeb0f8ed1e2f77e85c2c5d363ad09ead70ed4a2dca653f98fcd7ed13e96ea20efbc97a579a59f089ca8bcf172a72e1814a1377e7cd3be4ac5b49f68ededa42d70993db8821dbe1bd8615e9e26b6afceac3d21eebf18d817d277b2207f39fe2a945fcb924047d50069887c0e23606de47b1ab7780ed105b0a934e9c6d225915224c00f1e6b026da3e7a17a88fa3e76b04e0693ae6dc9d30dc3eb2aea7ef8fa4127d1d0c8569ad09ec471defa203b46c1382e05b483f54cbfd4e63e59748ee72e2120b37c10577b67ac466f7b4fea19b9354caef1a677009da1741ed15c3fbe66897cf797c8d5ab32deba32acd95f2952cb9bb94836fe8e7d4034f235f6e0e4586bae3fb0c75183ad0faff900322f50a17ff9f3af7bb44ec5f55735ed20d15724673390ba4b1535f2faf01a2755a26d4dfa128d791d5dea7a254d72eaadfd6aece89cb8d760e3077a6b4af4fc778075a1f77f091fc05a675a17031216c5fef0e31b59f48b1b3b7f223e533ace9aeb7cad0bbe82a27deab5bf82a27df9da6ca04318ae5f283b4fc840e2fe8b35290336e3297fc88be19ab6ee3ab7f9367c413c52bab1d2f60a8ae71c1c95e96e7814fba06693fb35a06bd83002db4c4f93bd859a2f87790e0295c188a9958b06fde8ef13af276de6b3f04fc0d84270ea3cfd4b58ebcd3ef5a6773453cfb8da9657dbf26a5be23dbada963568e56a5b463cf76a5b9e43eb57dbf26a5b5e6dcb4fb6f657dbf26a5b96d996a7eaa8dd840d635e265e4fc6cfaac5ab15696f4dcaea5f8a9b2126eb9d387567c0667c613ed7fdda688a0badc3da4600eba35e5e97427fdc595aa62c78ba6b401c0655163c9569a126461887369b6f5b2de67d2ac6ff86b87775ec00a72e6640848300d704378a01cfc00dc6930d8a625d7e6f611dd8d29bbca53751be28c25e65a13ccfd4ec20daaade04aaa4b9e3e56aaf4697c20c80b1fc0ab92a69dfcc45e91fe6e3a69e7f697a8fede82badff43693da88427e410d8225c2d6ca1bdce385b881d061b8375b73c27dec0da79887f23ec8cde12ee590a4b07e732b5f7a1ece239db3618cb52dd7600eb8e5d122fa05e93c62b1ed1a7c623faa7e0ecac1559587f781e3803cfd157f077c1f5b95413f0933c158fe54275405877cd6b7c5992f3f998d790b5004f65256ef4cefd5ae7c49522edc366ae8897a206e14b4d563db527669be79ea8b94ee5669e81ad40da2427b065d271aa0bae412606563b6e15cee18c7cdf92bcd30cff4ac5992acad685ced03ed00bd13bf6167e67d4bc14e8914ab3bfd3578e5f2fd7b9743c1574a13e11d738dd7814c7142ae213b03b883bd461a377d4c41420c6f6f17aef097d360f23af789e357553836b1f4dae4bc45b3ebc1e66a9f6781fc8d22fe1f3af36de9a312fc1337bcb33e3d5f8debcbd853ecfb363d414a0bd829a357cdee885ce8ccf6d44bad7c13ba4bdaf30ed6581deb7d09be2d6ecf55b67be83b8ff62391af0ec0d24a063e734644be128447c8543d757e4e347203f74ac6386675e2f3bf715f85b38e63378f702f6f439c5b719a72aa6cc03ae45a6f4a6b98d1a673366a0c8ec1ad8707a870d54c9843e0e68df71c0463f205f47917c285f033c8733e476de39caeef5d484f87095e68fafdd87d8a61067576ff29602e42bd75ee94df1f8016b72cc1d73157dae9407e4e9b348cef08fc24ecdd86305f55be13d803eba5eff15e61f8d1dec0f837902086f25965df57cbba1eccb1d53a57391cf9ff2ce469bd657e3a0eaf9889e7ba1b92a45efafa4bba39c8c53731ce3bc894a7a3af6b99d49b761dec3db311df3c7bc57e431a5cafd703f6683b97f3f98a7e343fd2857a1dc5746e65554dcff28cfae45eb52df31e6100b8e52a5836370f62ecbc74fd17ade3d091a2fc025e8ef337291fc3d950f90a337e6eeff04366e176c93138f29ac2597efe1bc8a68ee6fc58d0a9f53e8832bec85915a8b4095bbb426f773fab8c186f7386786bf942f9636dcfd29b923be2eab9d3951ec0f313f69aa12c4ffa0b04dd8d75763c7705b8ed961f7e03c625f5c9d3309c7fa66dce1951868695d109e91e1a975784ccdb9a2ed88ec5abe377666bd310df1a952f6589d7306ef2df32317ca53d2877842961662ee97e0f9873d1d26ac6d34859dc238384e84f0b950bc045e07311709fcc59a35d185bed02b9e4b298fcaa1f168cea76c407cef35d729e79a0fcf750a7e0bb645b35f8e19f18972f90cf7a2b9367345161c61716ebfd3be6d30af8c904ba7bf3b8f07e6b35f247f47e3ba47ed24ae318a03559729a1bc18db44ef299be7846026b3546cbb0e2d9573562ac475371ddd1503451e3b6a87857d6061ad492cd3c89c0614efe1ba1b9569079a3c5eeb35f319f0bcdf25aeab488795de0467c2f6abc52451bc3a795f65b924a860fe0cee81c2d89ec258c41a39479e033a9cc3e4f63fbb24a6e0c5fa7d14e111f66d9d33770638471c75b9bc06e65041b782bd33abe88e8ff8ac031dc0e67bb097258ab9bbaf16c28a3521c60c8ec3877d22ebe525c0315ff5a8eab44b8cbd3ebf8e682147161c35ae1d989dbc1866e5e7a79e71d503ff83f5c06bce7b2ddabde6bc5f73dedfaa2b67fb9685fcfc32393c457d7a4ffb6b482c5e8cf5fb965e8c4755467d32d2f92c464062f6b6a06f55914796c6751915f981f6e07b4dea7b3aacf7665dbdc9c35a6f54cf1de933714e9e34b2504ff1a8371f7816a58798e55c3780bd5010ce9c33eb9de133ca5dd7f7c199437a18eda9bd0fc75b25f002bf809d4e62345ea8477b692ce19deb4a4b31643fd3ba97eb4b35734b48b95a8c79ff5eb5ec95b0633fd1da57d49b6aee0190b3c572f19dd6fecbf8034fe84b356bd87f6fef8098678e8f97f2dd913ea492f8d72bd6392ac6bdf0bd281eb8d4805ec0755b3cd7ddaa1d76abc8aaa73267e4c836c331d5cfb351dcee519d2ad4c95c8ae8ba0a78b8f5f2a4225ff2bbc4c95dd5d339b1d47f90f41782eb5fad695ece357a677e4f3d9ceb1bfa5954d701badb5c95d49de1be5a9a3cb24ca67be4c1589836eaab2c0fad685d615d4edfe139d1575c71a972e292e79c6dca4f1bf55ed6a2fe6d28d7dae46c1bd6eb48870deec97c341867a5bb891e61ae261d1cbe67ae55e906df8fe60b9ea77222ccf5513b7562ffd77a13c4032bd79be05e4def9e1711bde72276982b78b14e713a27b1164ed6845d687214cf00364e1c3b97871b9e133ddc5fc999c11ec8adb027be8773286cbd73bf56564bb08fb6be1ae2fac316cc2752a4bda534fb3ba339f4c9faaea79a710da5785e17e255e93aef22ba2feb7f5942f78eb8d5e42ead4ed2b5ae17eda996edb7086c5546a43e1c6705bff72be86327c7daa987b792abbf54d6c7427de2e37ce544ee0bd6e33e546f5feaccb0d4e6fe44f57827c77af50f5cfe7cbec53ff03b731062be5259665bf13d557a5f74b7447e34ae0bef3b401ea8b20ae534ce4ff08a7a5b9eb06d6cc3359d6cae40a5ded2593bac2c97ba3407b1b8af74f27bf668caec5e6ff6c99ea67b05e81cab9105630835f58ef2dcc84a39f30571825cbf79d877a6924d4bd224f445431e3eb60da08b3137618ea36db8a8ef762eb6c389787c3cf673ea489c237ca72c384a530c600d8ccc6e14e9643fd6e94c162855a2ac57465c001bc6ec2dad57ee60ebf3fbf52b2d8c9e2adbfd42cb68827d678faa24d0860b6300b01feba0c31e4d09e6dbc0b881de141c985382ed13b5c37afa9c7d9e88c22bdf1546fc83b51f76a8c373bd5ae2239e8b6fc473f10d389777c25f28c1df20e9ad14aba5e4dc8952cb3364d1e1b9842e0cf57e64d7a2fe3be01ce9ae6115c42eaaf312cce355796c239c92025df694df2dee7b54805b4243de3190d94067a06d7ea6aee5f806ca7b003216d9fdf9d8ba9836e96c4fd1b3fd79279e995b3789cfa904c67d70203e46aebd5959b788681eae2927fa804e4a62dd73981bd3ebeff40eede932bb51312f23e8aef67e9f7a666e6ea524fc1a48b46d025bf7dcf7badd8516d03eaaa9e1cfc6b7c9eaff797495cddb09d75e616cdb70bb0b9303bc57a03449b8988ff6e459c9c9abd26516d6e68377201f5d251e2e1a0cf6a371e1fc917f684a0b0fa3575453887d7e648e26818b149e09f348f4e6b7a0ff15d588d6c44538b90f978addaea3b37eca2fe1da2df42cf1c6ec2462e8357c738fc8e716403f90cd73e39dd2446717d5ac929fd540914cf477c7b69526ac25d9f05c6b07ec1f05e34b81394239c689cb8ccc2ed1a172c78cf1d7f1b5b4e12efd2466d0e78b8f5c1653a586bc28d1a946b97ca18abd11c9f563612fece630d603a273b7b708fc42cfec0d63bc8ea8fffbde52a4d692efc5ba223aefdd85d96137aaac3a7ac6377ea20630926bc25a91fb80461dc305df398b8c8e7d21dd8b90a51fdfa38e78f797b0ebab8cb75313eb387ae69bfa1584e7acac2f42e29a818cebeadea82fa17341e3bcd95c1d254f27afada364cef7358736e79a6b0eeda75efb6b0eed57cfa15d2af2d819485ddae4ec9de13ab7797a54c5f8866d72afbe228b14e09d9aecc1d86c5e5d43ec07a28faad43a826798e833d633cee3a909ff0e236e0dc6a13459859f754e64d4fc1e1ba4ce90ea31f456db3bd9fb38bf37703c6660d3015d6e201d1cd31537e7be9f585f6077db4a737462fe63dbec15c73f4ebd0ff04b53cef76dc0f7ca7d5b65c4254967bf293f10d297e17657aa342269f50bf15c481bc0f673d40e6d9bf218e83d04bee085fa1165d6869eeb4d71ab72dd6076a6ffefd4337378c55695c74dbdd9ff3590ba81c2d840ef5d983d3138bbc7b52b5226d30eb480b60d5758833d01b6b3e1e6f7c542fe4edad5b976f3ccf30178ac3d90d48dde2cc0c44be6ebfb30a7af4ce7ab622ba1f5033c285baff8f09877ed093f54f60ce09ad44de1392dcc5daf3b8ff0df695f417e5e7ff199283e87fdaddecc9385257348e52c2199fbf97c22291bf9a40d979f0741fa09cf92f135e470e9f333322ec756043a2a9d37d7533ce9c27ea34c0d6c16bb298a971175b00518e38531b7a25c27987b8b6a68f05aa7e26d10f349e39c6369dcae5e0c93d087de2bcf351107f309df6f8d5ae3708dd9c84f27a2e7548ecb25e27938b792a8455e843906f1daab81ce50516d7d8889a337550fe7c026e27b288736ce6dad83c55ad19ffb9fd04f20e5cba97cde9ea1afa96373a674d8548c6fbfc27c678801cd225f559c4f188ea366ce47daf7f586b83fe2df3ec664aeec9f46f9dcf7eb57749f57cd37fd98c67e86757e257e68882f1a62430f604ca94bf188f7d09a3cb6810ccfd60ba0bc70dc2f8352a4fe06638a1d4d89f615b9dfe2b9836734ebd60416f913cfc1ddae60879ed80b82e74e93f2931de6cacf12fad49bd0e60134eae9617e3aced709f73c354e4b61ba942a9984ad76b301fb02314050be3cd0ab4399c14d44763a983eb69eebf63baab0566760bc39fa4acc62a4c0fcb2c3ceccd10374a9bd0476aa99974befda9eca58f38c0f8590ebc975ad2ee353f7d5c06a74b646c02e55796c6bd201c805a0b7503c97bbcf70cd904c0267ac1b00fe64726dc08f37a8df86007b9faa1d1437347b7d5b5f09be268f2958afb15a969de5bde13a8c2209ad749fe64187b575776441bb9f7925e9262fb787199e1d632aef0f7da95ade6bbee8b59ef433affdb59ef48bd793ba29fe2983f97c38af49c98fb02eedf3ef45cae71ed9821f94bb5eb07797caf9ca9f5b39c65e4a2e76f3ea050bf2bb43bcac15d4f780ceb1017abbe2b669b3c3ee7417d8b78931853584a42e4fe9cd3ed42b805c5018d8e37e3940356c94e176b706437b666f4cf81f62ff443247980d3459b595e632fdde0dae23a63498cbc2627ac675a48fadfe2b3db25ee97bebf9e17e3f982afb9a3e8c82f370c549ab81895d920f92ce8b4ed214f2c360fbbcfa3c91ed93aa4dcea7d7b7e27d97d55a54e6b9993398130fc9a5c3d25ca76baca02887348757bf9eaa2d2b1e1fd013f3ce6d6a0d4ab02cf365ce350fe877e4012d74a6e586fc51910e89f8fc99e7fbc433f37541931357a938c7b93511f9cfca8dfdaab6261d6cc57536b066480af340cf8dfb163fef9c9e07f97220a3c3e4d638a851aca09b1e4b8edfbb45a992199cbaae6c7e97c11f28e155a772fe937ea057782e1fcb6ae80b7441d8cf31a12f1c4cb086e019a47f88333dd315b764ec4209715de298128d75c058b77b271ded1d7b4b97e96997c2b180efb81086c54e77d5301e68232cbe029e92a5a3871cde654d42def518e62b558813383036e2cc7a2ceeef1be696431d2d1c0fc47d31a503aa230de364d0ff286e9339663036b0d0b9f6d194fb28fe92f641d6a3a3137cfaea57fccff02b421cfe336529be373f9f6f0368e0ec3ccaa6e0e81caad7c9d709ba4b6d251e4d0ee345c0bf133902e7c96869fcbfa62c50a837370dff4ef0eeb33052f13a5d26ae0bf16ed466bf4417cbb5252319ce3f46f52cb56368aa6ceff1be5a382e857176f038200680b831396833bb86dbf6711c98d6dd447eada54bed65626ddfceb30ad6e6caabaebceacaab7e03afb24db7ebe95c77ae95da8e395824295be237f12ca0530566f84cc89fba0be8bb45b5a93b630e74f8d7106b2ce1538bf23e523c2dd6ff6b628f15db57ef534378f5b77cb4bf05e2609ee957c1f7e6d60812fce9dc5a8a03b65372fdb1b6ca79b4d11cc33aec8104ff2673fdcee4d9a7f9e619b664b84e178945c1dafd93b127c853ad29e63d4f8f7936e8de2275341c176253fcb35a0e1ab22d613f49f09b02e33f680c6f7af7056ba2f1ba9dd14756dc9a12959b3ba9bacede08a8c3f374e9a33a850c9dba9acc1e517e16edebccd831dc9c3ecc9de4b334ce5969d0ff90c96fcbd71b72f3d8c2f313caaffbf528cf0fd7413d41b10e8b7a303f76194572364ad43ba05a0f0311e529c567bf63e7f92f36fc23e91345794f69f9fb94cc7f8efc13589ed6cd3124f85195bcc214cd4b2d5acfe435c3b34dee2fac33c9ea62aa67f486fe70ba6c0d241ad06580faed97d2ca5a93cc35e019d99ef435f85e6e9ffaf87efe317b7f957d9e4811ce41bcae89b38afd52a85799a7ba0893c3ec24741dc41773ee4339a9ce91c0530a7117b23a27915baf30b6adbba653bf677ef99a9e817d565e0b583d07b51fd2fd343f27b3f81c726d58ffa773fb840e4aeaa6e5fa68b9bf6fd061013f23d709f10eeeb03330168622090b55168e18c3e62d76768dba934bf5ba26b0db24acd3c27e28749e9ff26c3baed63b4ed4b186be054d569d8144f2d8b7d7f5963dfb44ad31de83b167baaf7edaa6b840aded89e7e7d8a467d63714be3347ae9ec43c24f0fda6c4da3ecfd93c995915179252e4fe4a95a3b381ce61def8726a92061dc493d50e0b7397e16fa9fcf43cbbd304bf73cef68df517b5cec26573d349199d9fa79ed0f54a73d6c96715e6af17cd95f427d691132f043dde26f5abca7d2230e6299d8c0bc5e3c138ab893dde203d1fe8fbed68ff537513e839c978685393c76b2dec0770a67fa2227ffaea3a7fc11cd33afac9da8758cf7a24686ebacee8de55eb8e42ccde083701f9ab52e3caaf474218742302af5570f49500f69641fc29eb9b473dec6d4f4ff3adf3758913b2e34bdb0a313ec4093e125e5745c68478c58a2b863a39f45b28615cbcc386efcdc143ab5b6312e263bc4b3c058eb362bdea145f5b1d2b16e1c1d2c60a613043df27c48a68adf85e5817fdd69e27f97c2a966b50afb123ace4fcd8cbdc945a4b55e67d15ea0c879d81fc5f0598f27d5a0732644efb8ae4edc0ff537640d17da896b02978057942784e6d4ae3c4204bcf785f63ace8f3745ae2fe337c7911cd5c2637e414a648b90e3925305ef8c734c6cbd958e2103b5d0ff7814bc6504b6aa83d2388eb1a35a9b556a1dc1a5a0ad3dd87f200ead8b857a5016c78597067495f4fb40730ced41b6ef9c7ee566f8ed7b0169b13033d9629e09d403f5ca8328bf2deb947a0ef021d6d4b629e027e60021d58e66b629e9edaa36b2efa7be4a2d7ed85156100ac1c02ff96a58d150beb1f21c62607f5c22dacf1ef8947323f3dda93de7203b1e321cfe6ad90eec2bdac53fb7fcd29cebbe68a2df8a9d7fe8a2df8d5b105e3bec7e7e2f995f70386d85cea84948567c779f371103f9fde5794fb4eae75c575ba4c1cf8f41ee4f81c43dd2dab2b5ae33cfba62cc7055e9fc12c0a544970345985380350f7cbe03cd5ed439337cffa76b9016c52a03b625a94e7d67ab8b8df0f7bfb4078b8dffffdc0df0c1fd8bba787c7d6df0f7d7dd8a15af2c4da4bc7d18d2c1ff4e162c43c77697df8803f4f87b470744ce9c833f264e93d4da8fd704e05cf13e7eea963ad8753e76ee86cf683a9633e89e8ffb363bf8daf5b0fbb9b03f8eeef872e7a97bc0fa4e3bdffdca5bc2779bf7eea5887e7f03b91f2d0ffe91fc315e50de0b81e8fc2d4b891e5fd61d8db1f86f3a5fff4c0eac3097816185fdfc4f7dc0de9cd7e28567dee8881f74c1fc3f7c06748c7c740c6f3f8fb61b87f9a2cd7d2eaa03f05b4493ce3967cde4b903ecbfd8cfe3c90fa3b607f42fc9893395a695a623b046658353f2797fa1ee30669f230b26dfacd3cba65097cb23db0e7c3f8c106d82fb0ff12eef711d665a89c63abcdbeada3bea9b6d9613d9d3bd08046a15f07f94fb2360517af49dd5866f9fabe8bad72c5e5fe4cbac45577beeace1758fb7fa8eebcd4a4eeca70bbf979e8d7baee321c724f91cc4091a8cf57c7fd7b6d878c7cbc8cef9858eff2f8ce6348d355e37a40673138db5342dcb2181b13fa574dd7399a527703f386608f72a26f5a263edc0ef89eb0d3a5574b9105987b84637b595f5ab96eb32c9ac7558fa941cbff4c3de62a433f4e862e94b7e1b110f77f3c86f79935de36c943cbeab9957cecee425eacacfa9e2a29308616624aea011be9e52ac66d8a6ccdba353ed173cfe975dc72cc9eb933dc0d908f0b8d7328c07b613df8a9d865d40f8065d3fd00de10b74ce485003b3eee3bc0a6fb0e00d9b40f752ebdb7b48ca6b88ffb80c21a8616cf8572968ee2969a74d89832589378fd4bde5333de58b6a657b977957b57fbfdfde4e0d57effe2bac7d57ebfdaef5fc57eb74deed157112efa897a4e78ad35cec350af19e75027ec46674c4f61ba1b9e83bd91eae4f4e33c9aeec270dbc7b0a7ade2b669dd1ddb06ecbf71c1d8882c38688ce6b1aeaf80ecfdf43ebd4f3e0c7bf28afb71c53effd46b7fc53effead8e7848d5bb0de156c4dfc2cdad39dac0c1ce68df3541d5e561ffe016d1aeef0a2e6d9a99dfb629db9ee3c3a919c3961f7867e9792bd28190fe033f9734dccb9a4df13cc93cf931b812ad1b65172864e9c05e2fe73707dd2f2f132794f44df113ff6d554cb978ff39ff2eead827341c64152b54910277dbce3397b6706e95e6fce11e157c4bea5f37bb9d1912e55a13efd0df5cfe5783dd1595c39856731df7e79bb0fa488b793675b91fb8122a7eb4449de43f4632d399f6fd28f3a357bbf927274f5c16b5ed1f7f189d6be9a9e54730fa05c2d8c2dbcd7da97fb403ed19a97eb4735d7da9405c728a6f30a7c0cef99e46c737c2e87bc6b4fd9ea99b5463eba8dfe58e4a32bd6376bce231ae3893da00d06d6c77daedebaaeb0d36576a7bbb066ebbaa7f5f674a133f45e675ab0eef2d3f9df1831305d67f1f17a00e00faaa7e4e3687e36de7854e53ea34905987867f047a329ec319641a030edad8e6af68b6374ef144b8078fc32eccdb085f8035fc42f516bdcb5f726ee7f68029ec7b5cfeecf5ff4ac4f67d3ad4440e317ebab05e57ff59e9d22947b8fc24691850c2640214605ea61b453216eaa18c4317c481bb6d21c1f11ae8495c22a4860e1c09eb94653d8298c6323bcb3fe4ee76ac6f69b60fd327d1f2e64af117926f5e922b293f3b09c34ae1d989db02ff279784dc967fcd65e4e577ffad59ffea9d7feea4fffe2fef415940dbe268d3f7abd039d39e0de3b9f7fcd0db7bd51719df285f80c5947ec1bbdbe67bace4695cc0fcf374b6267d2b04fb7261d1cf56bd832897adb810cfb7f7a3a27aeceede9fad179bc862b1e4cc909f27a2c4801f81dd35e6f78a9de03c4d93b118780ef6693d82dddbea3ba62a04aad45c53a6c96ef91f7c0bc60147700cf978716b2db711e2bee8902beab197b20e655a5ee3a85575e760eca73a547e4b5d57089092c9b80b5f91eac3781d854845e4f8ec1d2387143f6bf4536c9de52a4c30ee2c8300ea57572f4ff4c7e4d77ab76da3b63cec65868dc2b899948beb7664e70315f7ba79ce0525d3f699f91bce152bd62e37d543ba5eb867949855cf562ba79975c6775256e9526de3f99750c847f999363f6be72281ec78d0ff61cc52c0bfac67c32fda0f6d83ba53e9cda3242cfc7a02adddbcbe406aab4ee0ab8e76431ed64f304e3fb8c801da9721fe6f481f9d5c676e41e2d62fdadc4fa23ec603bee3999c28823f913963d9a3cc4bc955de85cf798c53e3c810352480b67c824a6ed1b5c7b0b31f04f614e24aead583f89c60e7817e9d70ff31c178a746329eeab0571763a186f0ff560dca812ed40ccddce9938ca0c118779a73e3df85c54c1a77b20e75f17d30d636812f3318f3c67d3bad4dd0ee4bea348635b710f0ecf415cb9b7ca0672af727bfc579923ea995e7d8ea309bb50e4b1a332ed6016d734cd114e28d21b4cb9bfd79b8243e4f09263fd3232f15aff73adfff9d46b7fadfff9eaf53ff998d795cf5e88cb5c107b9305c0738f9ad4dfa8131adac5d73aa3f4bfd37e1ba3c9eef495e001d93d90a1aff4f3e53c7c4ebcc13c1d25077730298b73faf345747e117b6545e4699cea5911e54854d1a53339b673bd29523cd7ddc2fc5bce6134694c2bd2de8a72542617eb2d819ff73e3ab456d8fb35dd4799c467aea13b4b2dcf904587e7c2be2faa87708c31267fdc5b0be22597e6c257d725abfb8d96080b3a2f9fab8016c279b4f275e3ee56eda07e25ba0beda7a84f2ac6820ef7a435e8b010b713f5ab0a71cec3bdac83c97f8d637f761fd2358e7d8d635f60edffa1716ce168c0984d9bd21961a77fb0ef1af66ce0da0b9dd97f859869629d2eb3fe51ff8233ed19e2fe8fd771cfabef22f7fc647c305aef2af1d27eaa0799adb86ddaecc4fd1ff07ba19f5aedc0782ad853a0633a3cf748e898357549624eef538b7eedab61a0fcc240915aabdf50afb6335623df70bbdb2f92dfb1d79b7d6a20f761bfdc4bc5d3ceb31d536b77e2cc8371f3dd70dc556a36cdb52af7817db037b883a730ddb9cebd86bd83c03f48a7139165840e0bd785efe1e7c39e86e65a938475d4db30b45fb9b0b79658179b22b5f6efd6db2cc8f58de4f7360b0a7c53053ca1b5443df1a31e70e87da87f305a43ae45eb52df31e6ac07782ddf83fb6c85fb7ccac6d2507ff8229bd737a503a5c9ec460df58e7c7f990fed5b19f7fd7cb8cfb3a31cddad668b8f01afab9edbd0d7dd31ec53ad228c1387873cf24bae1105c664203e5769ad44708656029ae75bd6ac37063cfd88f83b0be5411d5991eb5fc8edd118c980b9f8288c8a7ae589afe311ee4d7729fe97afe3e5f0bec8d751c97786d717d0579817d61303836b03f94cf6e40c7d7717eae31bcfe78cbee9d07f63b8c24e775b0e8ef79f5a977ede3d15f31d284572364610d5787880fe4cd759227ce328672c6f5c35e3f2b9755c57df6275df62a04af4cee45efdb85eaa4cefad923fdaa6d4091d612b84790d575f5bce35575fdba75efbabafedabfbdad27151602b9762af5c6be98b6a5c93717adca3ed1f86cf74660d4325199bd5c126f83e6b92aab956a59115e32ee5c5fcca72ffe0f5440c2f94d9197decfc7cc9623da03e1efa2ad417694f5fa940b7da19abe5c9987888ad39915a0cd0a7f466b6575751aea9c188613f0da2769cf610ee94b805b4a8c6189b812a837f42988feaf01c6deb6e7705f64923dfcf395ba339b6755700f643065bfd7cfcaae2395eaa7732b1f67e718ed27be2f9e4ecc5179067e4de0c2407ecd7a5f2b27e33165d763f2e96fb92f3ec5339e58973fe88d6b962cf83a326b5563af76ae952778b7a92b324bd5b90de2f940393470fef13bf48d7ccc57491cc1949d89bd573471c71abc95d1ac88d44cd5d229fba452992b385791d5c69be5ee59884220b47551ef955edf111bade3ad72e9f36fb2b456a45bd1f15696fe131a4fbbca3be4eb0776bbc367aa2f7bb78836b13527c9f7d853d5f39da9e4dd8b93a61eda23ac4d43b69831161ac08e56f758f507641ff9ef00be5f444fe16545fd253699d6b3986db9d6bd2c1337b4bcb6004609be158547ba75ff375ae3e84ab0fe1ea43b8fa10ae3e847f9e0f2155334813f9e1c5d823572cef227d9726fb54f8c93ad14f86b7f99bf133b44c4d31a401a8d3e56045e4eaac17b2bf92b8da52a2fef544bd74f25efeb1a476b604bf20f6c1c4f7abf238ea17a7c0fc93d4bba01efc68a98cc3a8d20d89154ed893ac7786afa58427646cb30b61cf89c78ab5b27d626c611e9e08f6b46eddac887203c0b9c1fd6b4ee1a2231aab6c175cf1cfaff8e79f7bedaff8e75f1cffdc70c523d02f0cc699ebdcab6fa01cba6b4d69e65fdd9a5268f7b4fe693adb99bd8b77fa6a1ce8cc3eb7b7c889d8d583ceb428c36d6fceeea992cc535beb4d238dc37b0463311815c6b11498833b82321ffa297bfd9dde1bd6c7482999f317ef1797d6ffa25a63b837c5d8fcef150b4beae77214abf14bedaa4fe4a349db85b16d449fc2eb2f8991bdb90f65469e948f737c31dcee93eb5191670ca4be0d6302dd344dbc03df906e2c4d6a2d3559f5d49e68eb1d14f381e3789b7d953c5fef84b9f41f9ad319ef410637339e7bd2668f78772a4ec64e5449750c57dc2a05b9f3853914aee8aa60ff5cc1413dbc1e63d9d249c60cdf5aa7943786da7a0093e9ad76b55f73aeb9daaf9f7aedaff6eb17b75f95d532e123bfdaade97fa7e8a6df4afbab3f597ce98a79f54fc2bce2ba8122d18ec989c140161c13e828ae798d23a6ff9dca6161440afaa0dcaeafca63d8e3e8939d6b889317db85d7fdadb5bf50c73be1bff80ff5319e8a0bc77613eaeb71217c39a0d786f675794cd72130ffbb89fb2a618410b6de31aefd279ed31bc675b2493bd136dc570bcc0ffaf599fa3d9ee333f94e71da6baee3a7f22b5e36d7f19a67f7fbf2ec803e574ce757395a881f958c7fc2be389f4e579acf26d7bcbab7ec73da4ff04fd399ced3790a6cc6537598097b9d9d007bbd722d61c60fdedeaaa816c3d79b7d07f53c15a37ea9e4f90deb3350bfa3a867098c152813d635a516c6bc6003553ad826e73064ad48ac47d5c456cbe721ef1283b9f62fb8f62ff8d46b7fed5ff0d5fb17e03a03dc97f06363763067eacbf40ee5ba81d95ba2dacaaf50a37c1e1e434af7ac925b11f7221ac5be899cbceb4afe90473447f1c873f6ce8cfa4bc67a42bac715991b827b303ab88e348af5d7edfd95d51fdf0537e0da07e933f1d5ab1e71d5232eb0f6ff503de21ab7bdc66daf7eaaf4bf2f17b77d738ef0c5fa3b991d58036deb9248a9327f12d34a9547d62b41977c17e8b762d5be4f440e6a88034cee0bc62fe9999eceed612f55d575367a545719f53b073aea466f423d9551a4030dbfc3fa69ddf89c2a8f7cf2acbd931e8ac7799efe69badd8d29bd9e15bb8deebd4c3ffcdc7964e3b535e8c2413d9fb45edf86bd9d9abc15f1485c6b0be9a037f463eca304ddd8ba3bb2902d717008fcf2540e374bc6626be2c9e5cfa784af876b564c1bf07c45d87247551268c375a8d904d85add6d166fea649fc392672159f3f7e8bffeabf1ade169bf662bbff1f3ff1a2f4babf1b3d1f8d610347706fefaf7bfbf35acb96f6ff53f8db5fbdd5c1bcbd9afefeb8da139cbb9fff3fbf3a4733ff8bef9657cdffa736703fffbdddbeace7c637f97278329baf65ffaaff57e33fbf52f73bef11c2df8f3b071c0fbe6abbfd7e0ffe6ccd7e6ce06fcb9426f2ebeed5b63333fce1a3fe956fbaefdade1aecd59e3e74df316fef9973f87b73314ddfe174dff8b694d69fa67abfdb3d9fa936adfb6a91fcd16fd0745ffa4a8c6b7c67cf39739ffd5f8f9b7e66c66df1a9b008ee061b66bfcbcbdf9f183f9d6e057ebc6cf3675737b43dd7e6b08ce7cb56cfca4bf3586f0adcd2643dd7c6bbccecdc64f9aa2a86f0d2efe53feeb2f4f33a9c64fea5b636c826752df1a1372e8acb34453b9a1dab7e0e3da586e1a3f9bccb7c6bd3f77c1582633035c7e47dd3137cdbb1fdf1ac2067cd3a4efe81fcc0fbaf9ef6f8d61f2d21f37b73fdaad1fadf0d270d2fffed6e8a4ae6cd3ed16c330e195b737b7edf62d73072e95fffa6bbbda6e6666e3e77f53dfa86fd4fffc1b90823dfb0557082c5ae3bbbd7667df37ce76a96de6cb7ffdcdb4bf9b9aaf7dff35336dcdff6ecdfdeff6564fd3cc6992697c6bf0aeb7fee5bf68be9d2047fcebc3da405f4fb55fd6cc477f8fd76bfcd750f30dbbf173b5759c6f8d89af39b36887e1a7f14cdbac57e85a6edd9d3bb34d78357a6ff4f161e6457f4f671b3f7535f82a75c7706d6ec1fbfeaf81075f7c78e048e7abc64fffd776f6ed4d6b0a27325c9be76f8ab5fed35d9bf039e2ecd7660ed787fe936e420ee0c1b984eca1744a78a7dec418fefdad01c6dcf8d9787968dfe8d2de325d31301867a72fa8f97072b3e7e750e8ef60a385233517c53137985af397e3cdd34bcf3eea0fded1ec391b5516d6aa24527ccff675ae757c5e81dfa8b9d61b53c6c37a37689a4d33683587416b67b8c66e385db69e276de595daef707303d85c9fb7d616df531d63250041d5e6178fdb61877fe23bec8d2e1db6c6f1e4336fb4ded8d7e13df7c47dde0e829d91636284a3e10eb7baeb1ccd4e6ba5371564e436858522ed7770fe603c9c78a330075a850131f1684a07a0d80640a19971e2f165d247cfeef07f00e103fee1b501420f08024a9db0be228f17da03351f04e83abe737f07c7fa701309b717ce761469f407a930bcf49032f86211caebc3e1c660f6b758c9f07546b10c46dc0025e965821457556a2d15a9453d2fc2b97ba8b849dc1ce409bf4b3e6fbfc38a44eadd0235930e2138449b5f8d9d596fb4539ac2915fdc3cbd741efdc1841da972dfd7e4f191e744db606001d10ed092ce755183c90ee5e78d5f61dafbd984dea973f6a84a0747698edafc7cbc309ac3f9e078430afdbb41138d8578cedd8049add7c361ae33e316cf091b4516c0defcd0b936d84f0c446bed9ee64e1b8c9d7cf6ac276c9e5dd8d4a635804e0176a3002527b8239ebddf296e7b399be27b1ff63b62ffee06cdd49ea3eb9ea2e7afe2e7f21c6d9b9cb08e68e7c15b28f2d8d6b9f68aefed2d4c83607d80221e363888e8e6d4785f3a6d441f9c089433dbc4fb7a8a36c3f7864a65b8d62f9c15106b1a16c991eb8ef65366f77a6fe9c7ef158fd13e82f57ae08bc707de15d375a049a8b910dcb729350f692edcb7984e5b91331c2877bad40d54c6d93e2fba8e3edd58060715eead7a5c5b4349f49f0376ae37c119e16f81c20a945b83696f34696429eec156988df5f728a2b1add11489444cf607d83bc3353d7d4e537a133679d90ae8b97b68104aadd5f3fcfea04ad40f9eebef0c77ec188b356c92a4cfd9a5de1c4320e7bc77c5efb9ff83efac6f55d7098ce6c85718dbd3b9d186efb48ea61417faf10f37d6d3c27335b97f343bf442e39c8d9a3b46d6d1276c3b5ab358c15d0f277b4b7be0373c671d071d762d74c0e757f09901eba9baedadd9a15d45a23dbdb7bce57b82adaf86bec188812629e4bbe6606e3a4365dfc75947e259474df61cb046c3c53d307472f6f46ec77363cf9cc366c461b243bc9e737aa34a2af50c8d5767cbf7849d0e0c09aebf5124e117b91703e9e0a8ab11b94fbe22f7579a74e3eb9ce89a0f6b6bd8b9a1558922f7623708d8a5262b5b181cebb089bdd4ddf6564dd316977876760d3a2dd4281718207973ee096133144b7b1846466a7acd84d49a11ebb31e06a161c8ba804606b2e0cddcd75bfee1911a765e89f9c1b9c5ef098d1d4edde9ab916f30cead3a5d5bc3e970df4fec23d893d4bd15f655e51c267d6fce180fc931c686aed1d9c3670c56c80025cff9401eef0cb487143a7379f478bf1dbaa29f583738df83a7bbafbec6899ecad854defac2b1d73867b34eee398b6849912830f7980771b4a3720ead4fd8a3ce1c3cb5c3ae0c5774f445665d6f869dd71fc00857b9b1a7bb069a17939c578ade6c7dc2ee137c717ebf4fd13ab126ad30211a8c31e70cf5214f4580b6b4a7bb6360d4dff21d2a2879264a6c0574c23947c0ef67d3b5a549f07b6720f5373a933cb3608c03ccbf15b7bbd01833d09be21601701d76e00c2ad2c1531871aef744e7b97c3dc36be2f9c8fd70bff783059a534c4fa9df48faefdd6f5110a43537dcf62f55ba817b09788edaecef4ca98540d3b876f03c8741e29dee0a6b4d525d9db949f210495c6a32d8bb90778d6dc3f577b861d90fbe07752d5fe5c485deeca38017b80ff09b094d693df03e734dee3d3c1f108c1eee1f831c4b4037a56d9d73563a944370ef00bd92b4e49b5c7b8f6923f1bde2b629936bfb657433709d2d6ce8d9d95b035758eb0c6c1e9f27ffe23de1ba0bed98e2a19d9b43ea1d5b536ad94653f054a6e5a89dd26706aa3402bfdb0ae3af0cb74deb2e041edce84d20eb594f777d921f433d19d065740dda0374fee609deede9b031ffc81ac0e07e1eff5a267965a7153a4963beda1cb774eef596e71c0ad2ef313a4b4b5512c0de43c7e0f39ca5c1d93260227a3e4f0c79214c32c9f2e016e415f8bdaadbf535e9d07a9eb347456a1d07b2e018aee33e4773301d4d32d740162a6e7ba33e6c12ced2c2338874981f10d000d17c53e31c2a211b83505683f3243ab387c46f41f85e2883652bb1f79ad43a021a8e7919eda93972eaf9a1488f6841f076b5d7b74de686d8b3cc7ca3f583f62ce04f501f771605cf9deb4dabf08ce992b354b903e0394d4d1a531a985f4afe0c5602adac040ac9dd68fd7c4d1a6fe1d8b83eb0ed6aec21b28f9ee7ec16d8d28ab48fee359950be657f436bb8b19e1f5ec11a5a59d905f681de2b92400de4b1adb8c01edc5826e32c4dce02727b8f680dcce1601b3d018c01d0c84691815d373a3987c4ba4010caee02f0280525de5270cf53720feb7285bc17ada119a8f2f2341f0af264f67dacfba565ee424cc98c4807a1cfd1fbd17b8adec7e6bf8b4bd9325c6b97e4156cb87ea4de1cefcb748df81ed7ddc320557cdf469b20dd08d81e9867f9d0e93e5d5b46b34b43104e62cf14707d91bc7261e273727d1ff63b6413abb6e13a90a6a0ad79bfae6a2f037eb951e47e041011d999f7841d19db9760fd2885b1dabcdb3e2a4c173c1f07d9585f67c64e8e5d7b178e11e80f03a9ed021d1ddae30fd47c30c73e94682ef178c1f775ec6d48bff27d6c6f13b680c21c6ca3396cf32ee4bf7b7ece7aea03359f3511ff4049f9f45c95d49de1beae09df01b225bb9b833c69df6bd268d30f6e564f3235277d28157c1f778366349ed3fe85cea33f98a2f5d718b1851b0fb57977ecc0b9b871e250664f080035a3c93a4ac0c306e22f93fe3d0efaec309d447b5cfb1d71727a8bf4b5240a51c9efc920255e373c2660872f1479b41e21401f40ff9b7e305c0d1e599824f204c63bc7beafc2318b389970e42b2b9c84d98969e4c9f1ef35696cf2b0e9c36b9b5fb29edac9ae4329adc7eb4af874a03db6d0b9eed13852f31973d8816b7193aa753e9d083ba3b74cfb1bef218031e1afc334bf50a4c386a4a978ceb4ad31af7edacf94f06d320ea58581f209bb057bf032e907a60474b1e19c3c8bd15ef5fa3ba3ebdfe33363bd4cee57c8ef679afc3ce9cbc3f3b1756eefa7e9b8b24f2b9eaba7ce594a95e17a843c2ae9ab49f91c914d1cf9d41cddb56183a810582eb126c80747bd10804daad45a2b526b11169ebf74da6be1e12619e42e9943eefa257c5de0ecb497ea949a6b526ba1f7c4a59ae33706f348f8649b783d169935b28d1ebb994de89817ca43928ec2750b62f029f148f0674f77858d298d9de45ee233252940973ec2f9b86dea890bcf3bd150451e7ae97dd01e467fbc1249b8c6716dbd704b0bcbbd36ef16ea50f3972594b9770366f9477afd431ea9490a4977f6604259a13ec5f7427dca4409bf9c18a8937b7f40f898a3f52d9033589ec2e7aa80fe7b2c6a64346797aaa4daa674408d61641857b1f54ef4fc2a723649c378ddabcab50af414c998d47948fbedbdbff3fccd79f103923f267957faac47be655deafe823675daaf1dd32eb423c284a6888fadfab40e6cdf80cfa363583c2d51118f7d5f5e549356468ced003d546fc2b85d722f45ff1eefd52aadfbf76940bf3821846b03fbcdd3ddee86ef0aa3e787fbfd60fa7a84cd05a1fd0a1bb42baf1491c0c1a93b63ce2e0db7db0c934d60c32499b595e6c83239e4f707ef9874c7c234a65748b3fc84f2f92eeb298c0fe89c3610ad033901cfd06042fd51953e63da6c27636413f68e8ff887402bb1fcdca5632460fd23bd67c28e4ce9b0c10d0051411e7c5ead331703f931099d451f45e7c384f210ecc5df1d36f7ac56b83794d905e32a97d5787d2bc9e74170b32568fe4e7b1856a26df219fd5e7cd6423e62acc4ed4072b679f24075dbc140126d85b1f2ce66d959cf9353bb1c19e7ea4dde57a5ee427b20635cc38bc4e0902d58c81f712c21d47584444c33d4bff426db4adb2d239870955daf53eb3f98c7eb4ed27e3d19cf6f09790ee730905ab42ef51d639ec7b34fd825ccd833171789bfc2b190bc1a357b138e2889cd344bce93afcae3b5ce8c5638aefea6f7927648ea7c67ae450d0a4d336daf98b10edcee3338791b16099b6644270f07188b89ec4be43b3e4fe7bf040d3d1cb0bfe29ea44d2a117347f91041ca5ea0d433f55e723ce8bcd15b53a2e7b0216226ff60bc7ccb7b4f3c0f7c0e529f612e43c46f3b6db43eb575c3ac7d68f4fa9edeec7b666fd9e6178f7b7026f3f9cfdd2ec58f8af6af16bd9fe401957d38b0d0522fb0ffda7d06cab0952c52739ea3772acc618174eeeb2bd1575c3120ce4361ee8126b5d6aa0c8b2d9703a9b5e3497dd3ed423bc5e4dac1f362fdbfd249b94b9bd2b15bc64fd2f2b9fad8e471a049b40f9392093a37518e15dc93a7ced8d35d1be86610705a77ef36fde07e35e818ab27c2be7be9dda7794376cd62be8f631d295d7c95f051d9ea6aec18739b32dceed660e09eae4feedd64bfe23bc6a61f18de20357698e82fd18eda59ce493dd8b84c4e0ea2cd37eb51b9cfb5f51c3f63e80b8ded8bb16db8a603ce1dc17b7fa9f272dd67327ea3d5e091a514b9bf52e59147ea5b39ba03f9febaf6d4a5ec919aebd58e7dbfb2b020ceed9e985bf237e44bdd2b12e1470de32e8bd68828c2b87de9b48f06d7dd66e41ff2ebfd41ce017caeaf3fdd2479108edd85f1efaa3ad93bd139b9be61b141443f4627f61386850de43a194dd6d6095f22b0fb8de668fe820b129e17fb1dbc26cb372855b6a997393107f0b9b67ffafe623ab7225191cc5339d155647143eae1e45ae4fc0ef60ed2114193c02e3b826bc6e1f50febbb4113d26566cf613cf8e1869c0bf85c45cfde11bac2fe1cbd80f0cfc0dc8c22bd20b5464785c8694dd342eaf7eab41dd34b5dfa4667cc75b6285722370680ce5fc4db71a149cc53d27b983e139f731eeed851dd2eadf746642c29c9ff72ae49f3baa7625ef7db693b33d669ee58136328e30b89b855d67f93f14bd5f12f65749a261b68523bd0e4712b6ddba57d858adb053218e5a7611f5c4ad7a8ccdf218863bebc44bf95fb11ead8f41b45ea3b7aaefff50d3cdcaa6c0f20a08348cef6697d4e7b64ee744656853ea45ea817d4e6b509bde1a45cabcd9333738c7450fe81b222fbbe93b0edc93d8e404ec93dd1a4d6de9447168aeb537305fa83fdb9deb4e6c4bdf073453fcf05e4cf89fd740fb6e28a9b123e1df1a30cefc9af9508cf66de1cd19e2dd6f9fcea6dbcbdae1f88a0699cb710afc15a7868458d808838d4c5c7a436454fe580bd0becb2ac2f80a817a05e1c8106341202e5e81d76654ace12c62ca7fb9df630ba9c9fb4ccdf5592df118e212ba35a2fe8cc8c3dd37d3da19b3a2edf1b3b06f405907e89d1fc6535ccc6431fde73eeb069f0d160a05d787a8f0a64ea88f47d3e14d0ff29dbdfadec2f0d79c6bbd16d5840aec92ab0d777844d0ffd47c4d876c4bec3f54bfacaf8ec398cedb613e3e3fff7dc5ca388dfcfdf56dff394e37f4dc9adfcbd5ce2b50cca739e4ef2f5f9ba8c8fd5e1d36fa691227de80cf95f26eb708ddcfd2acc65ed07ac87c1bc3c336ab8dc42f429b5b7383e6aa78aedd1be84397a9c4319011bc6de60cc4f919c2d7c2e97021fe3ba5bb573bfd69b6c083ab0994d96963209411c6ac526c33ce82cddc87d0fe71b86b1c085ceb5011f898040f888dfe4fb4f07521b82aee89c72fb3c5fef523958fa8873962f92401b2b18eb5d3f4ddaf7d81ef535696c4a904646eb2791f49da278f76bafbf335d678962ce48d7d3e4318d6b67184d7ab460ee22781e026bb220f848cf71208801b0f39a7d98c319da00e5be3b710b684a93ccad2ae5c55548b9d1da991d6ba930871de0df1140c864397f81b9e080af3b2bdd1597397925e15988f7605aa81fe1fd1bffe8f7c8f18df3f4fe38bed949d66766f6359553a34cd8b5e18aeecb845fcc28d6537b54369fe9bc7821ce01a7e73ad75e6841361f499956aded24f38aa09d9589f9e4ef939df29311b902b16d9dce33aae65338336f2b021b49fb17e51040e3aef01dc57953e8dea709ff8744b55ef82ecbbe2ebbc2581c775fe7ac347a3d88e309db9b886a77ea50b9795f397a723a869ecc13c3b44dc4ee4fe77975b2f4583066f69516fa63aad51d7773c65b419fafe9472cf7f716db30049d57b76392f1d8d49a9ff6bf94c9d3aab261a7137e529dd9133ea764fe6345b9ba3b515b5d654c1b8dd0b1746e498ce9e09d31a68d36bd88fe6113fb6f578eb923d0d433f2241e2f626f6000c05c5f78eab7f4bc4ec598d60864e72e2f1f67a171ed9dc1bca679185e6773adc27cb4882704bad4dd68b2e70c6461af4882f3d45966e44fe5baff24bf6a6a9cb82d90653b93b31d63657a39633d7d7eb37b9be0897a73bc56e57e539305272df330cdac75a67d54a7097e6a5fdc27839aa3e846730c6ca7e3408600f6eb116707aaa4c0fc77a07f55d00fc358652256ad3162eba963c6c062521f0229f78303f2ed2070375f91544a95f9e47b27641c38a1d7a31ad4ec7927f3b6b77a73b4eef7c298eb32372f5d91c794e13a7333912387edb3455c170acfc331dc9b2e05c6adac442ab53f3939c2c53e2d855132fe46a86fe5ea3c95790871366da0733b05f40d699fd4850c17d6bcddaa131a8c69a14eacacde53ddaf9f581393b11d3dab4b405d7e0a790d0bf6cb5256fd9dc688db0cc648d1b8e7e388eeeaf184840e1cd36eec9bf47477e3a37acee2739c3faf43f919ef54f111c07390d66109fed0a6344e0c4cc649f00882b765f92ca94fbf39de9cf07fc0f308d677d6cbd89239e338c46b97adb328ceb3cec3792958bfd379287c5e0e685a1edc65d7baa58fe57e80ea8b5b3bbe83f34602366aec359bb0c006c575f298ffc43a6a9e5cc9ddb322f91eae0111e75a82771b11c86364b75866af6f231ca8ee263a53957cf5893a8bba3931a76b3e087d39f695443c32793fc9e7a12f3a31b6bb0193e3fbbc640d5c151b01e83b85b99890475f3effbfd23e0a945a90ef6034c7cb4bfbc72ad20759c75d1cdb5e015dc486b5057acefa61dfbe4c3cebf69cbc9e0bc5f7d37374c89c3055a2085b45f4cf5877472fb7552ad5ff609957583718ea16678c0fd07ce959aa56c361ef3449700afcb9803f7a0af37a46cdeb05e2d1aee0454dd98bc6274760f6bf2bff2be6a7e53c16ecd7fbd60e57abd95926eb731ec93c8a39990baf257c73a29facf715f7a9cff3742c02d03e06b10d6d964a756905b527510ca3be5d91af2fe6db92fc366347e33527df51a99ea593d41dead026a28d2847b5ec2c9da2d3ccba65f9bebfd12106230df7e9a9e3e4f9b3f3635bf39b22bf59e1b90ae7816a44c5a3c6898ef970731190df83eb7cdf18f6ccd5ca917bf135214c2fc2b64528bd0c7df3e3e6ee866efd4881f532d4bf28e65f546b4adffc64da3fa9db3f6f6f7eb4eee89bdb7606ac17c1a51663f5b6981f77ad08ab9709b17ae9dbbb76f30cacde109b3717aaf72e07a9b74db56fa80854f70745517774f3f6268bd40b2f6ddedcc6f8bb78ca59a8deb24bdf0faa370dc45b05f8d5d5e6ab5c88de9c2158ebeffa7c453e0483f89e3d5c0cfdfbdf6543fd9f0814185152121378033efd3f73e6cd56e66c65043fffdfafed0ad2290116fcdf0d6f69cdcc3fad35785a2e68f07f37c2fbfee78a1d7c167630c16f224060b450176465e8a7bf0ccdd79cb5f517faf2cfc3c6ac804e9e7757c8f5eea83baa049cbc0ebfab024e4eb72e074e8e875ec0f1e85b2a9fe711dce98eb96ddd35a9dbd617e47959e22b44238f7ebfe2917f3d9e527cf0df8e3efebc12161a27faca2442f9be2945085fdcef8793b6327d3d4c15c67674e9719e8ed2cc387aa3af86b7fab43a52b82e8994228763b93b0c16f7c5cf45f7f80ad3a514e9b0538f672092939a7988b88e2dce81cc06d0833fe9afcdde78ff3cbfdb294d215082d65693056ae09a3b730e5bb060d4f2fcf14696cf236c3dfc182289bc4cfa0753ea6e603b196994b9cfe4ba81ca88d414662ea1e8db5bc792a68bc1e2ded725883a4fe94ccb19869633b04c8e5ea23d5dd25a1d42ab45935aae9ef292bf70d4adc1086b55a26d8c80f4c794161e46af7bb2f5e34384d28dd6c5361ff63b7dea1d313d21ab705af26c3942b7ff23772e8be4f3e2b9e73dd3dec1aa4cf8ce165e433a42127fe9b4fde795b0d69bb0c216ce29b1b60f07ff396ed79d17b1f49f57f77f889cedf08fede988ea0ef9c718816814d270c042f47e451e590ad3ddf25cdfe17be251954696c9dd5961fb19c57db5940942068cbd0bc80baf34455815c173e1f30f4794b916b6b81697f16f59f4a341870573deaa010b3d857c84c835a615e9e0cd1012c95267041ad275e89541eff055796cab5c97522637169c2fd8efe60866e741a49313f3d6e421dc13e89d98b6927b0079d8eb1f03b4b7fb5464e76ec050b7862bfa8adcff65e4d1a5dbde990fa967aee0f852283259fa86966afe9980e721c7c3915f1d5a7cae4e9ead701e2a8ecc87b448b6b442eb84ce5468c5e745c0f4a9976ccb95a8e2ec1ff91ee07faaa77290d67c5512009d780643e176ea106d6639836370163c1766d6412f05da6fe455591bc112a2d02893b8dd2adec3d418527b86d7dc8088b36a3a1288d69d6b2f4cb2856c5ed494e3d36b347f59ac13adc00c1445623469ecf0dca3a54be242e3ba80bffa389314b699557b0e58534f09d8104d1721ddc1f38733bd7a430f45831ec916f2d00bf2ec8e774a1345e471766496f6c8d69c29ef0b44a093d98d2adbaf33994def2d5c1383110fa6246e95a2ec89a3176505f0bdbea32e22af20214fbdb002c9d225673b65848529f78f2f131ea31cd82f0a23d0c66ad8e6178fd9686934dec87365a14cc67e86bf3eafc4a32299b04a52935ac47361c58a3d7b6c2f005f8355b3526b0ed173011f2bcac6ab363f408b47b3d7b735d8bef743df0d2b3870551a788fa72fe3f70ce19a776fe235efd3ba8b9059d51442608a361062f434fb7bbdfd08b31d4fafc9308d64973e9f315f0c5449893cfa0349b04daebbd119e3368a7c9cff3e7cb68ae75f79ee2e6e79fac63dc1bceba8ca5d1a464bd3ba0c1c0f91cd1267f3c0767f181933d15a31ac3003eb3a5d0acfe0faa22c916737d12e374bab843c2ae0af6979e162b4be504feaab1c90ff8eab4995e54e99fc1175d73998d2ab0578b0be1a7baa8b3ae0a898f7425eca753d1de92061351e94fba9d67c05f3cd97edf9eb57c2a7b3eb387f49b487e4ef060cffc7f39c3d7f4ea764457a4e05328394a3666f1c68529f4e6733847440fc1e778bc11183b873917d7c5eb61ea05d5294715daee354d675ca749e111a17dafbd46f25fbe43fa75acabf2c9dadca390bb8beae81db33c2b9c2568eb89a17ecdb22aa66087559a41b03f901ef0daba3d05948bda7600dd03e77f706b0cddd1c9912af6946e72e3b5fcaa2f58022cbfb9db2b8b9e51fdf659e55c715ceb3982745673337b246d04b5e746fec189cb8557b431fb506ff5cb43ae6c4bd2ab59646c0ee74a4f7a678e989e7a578db486aa14ca6394bb6bfb534a9c5e88c1feeaf07df0751553f037f8cf6c8d2999b903fb23acef04a556979fa4add690ce48994c639471ed8a45334be4a3a7fb1bd96a6c9e28c52a823d27b9d136f44287b13b660a4e79db003433dfa43ed409e4315de6fb00759bec76e14497034aebd51e13371451d477b8057403a4336de0667bf794693dd28f2725b810796f3beea3c0ff03a1281c8d2b9ee5c95f6118dbd711ea7c651cedbd03c927434617d4db61d15218a652b97d03db0f38a51a237abd007e6c0ce5d6a40e7565f5d908e6983e9ae32c82def4ec7291a3a9f9efbba3bf6800da6ca434b915a4b9e136f0cee00e45ad872796fcafdbdde141ceccfa2614b6746b1944982d79ee6a9277869651e0a78a793e08da97965e4bb6304a8a5b42adb7b1de896aba85d396dacd81d98139c7f4f3caa13a88b26ab6417a7f9ec09fe8af61db7b49e75b19e213937aa346af3ab719042be8ae90e757028b1cf444695fb2dd80dc435fc186129977fe4eab4b033c027d31126a47d70011d41945a9e218b0ecf25ec92afa2bba66d4be8af7bc39c3e4a4f0dfd10793e3afc5b32932be3338a33d6763a447c04e7375df57cc2deeb9dd8176807a578e832f1be6a7655ae3df56885f7f15c3be0e118c2cfe28dd1eb3b50e662fb02fb84633f1c077dcb8e51c5aebf248fcdcc1feb0e5cb84eec0eeaa5d1bab1ceacc7062aacfcc6f117ecef359ae340911c203ba1df185659bc871e91e7535a091ea4bd5714b789e82c7b269d590ffc8ef602a26461df12183faceecfd1abf972df159c2b3f672948f7933ef481e14ab3bc2aa1ca345d308672de538fe671e5633dde5bc6834713367c8ef5c48937aa24d018fdccab72166af0e27a3cf97cde4cf2e887c4b98dce6cfadcdcaf55d97694a68851a997502f315cf108e3b173ac7f70a9f357d5ff95e6051568e8a43f8c789e2adb942ab58e85f64bd9790bc794d48330dfc7cf0ff56c9c299cf653873a0b428c1291ae93890995c9ab933ede3cdf6e8f884fbc4916c02a30e6d54a76851aaf1579047f335d6709f5f109b073849d0ee6ed8699fce0fcf058772dd055e7371f2c274c1afa72c1f99a86baf707cdf3f3c40f4fdaa6afddfecb2bf57a2286968df7d489a35cd0b6cd47257d07db56447e86a49e5051e6e4c99889d45a6a70ddc523d03f0c4e0c74c901bc15a26c62bf068ad9c3df49db1ae85a7117b70ff6d94818f5252df3a0ae7fe1795d7d3888ce335568ef664f38b82218fb28cea5ef57a02331d016dcaa10952bea8a6ceb12cc53b275a07bb82d1b2215cac30ff6cd24e709e54117da05d09e077628d0eb70f59ca5c04ed686a548074a95fb5bf06cd3158f1f681f38c086d6dda2caf86a31fba85af0ad7913782f0a654e991f876b3707126debab65d29f13754af89df1c96ea072ce56910e9ed95bbe3d4ee9207496305702765fef001da10ff6d333dc50e7106885b12c451e5a3ad372900d4eef8c4f1307126cc31dc34e679a0c7933f2ed204402cc9fe0b9d940beee02ba7082286fa3292eb40e6be3d8168c5dea523bf8a2b1a182aada77f1efe0dc98f379f128423a24f689b989789ac140dfacad77d8a329096b9e6bef7157e18ff6e544730df5f3505f88cf0fcc59f57506a2183aa62b06c04ec7f4b543636cbd0f5ffe9aba03ea38f4feb6e708bce78d714bdb80a8a8c8bf60c02eeaf41ef0c3303795cc45c5faa26dac3ed8e7e884ef8ce294e78ffbf3d88655f21f43d4de0fc82d8d90cf2f946389bb8717cf6df4ba6c4fc793f2e7e78c27f77c54cea18cba8a9d58cf95b855dc36adbb6327d38da8e63b3152dd5bdf19fad18af4d292bc1f6799f2353f8f28f85b01225545ff6055df72ae9c4de701be55ef13b79adc0532d723636228df1cc6ac23d462e8b3e7306afbc3e9fcfab43e74220fb472be7dac43f099b826b28fce9fd347e9787c799c03fe3fea24bf8a74f04f488ff0fd97c8930ce9ba45741b4ee74b78d0070ecf799c3b81730f227fcca0c3225d02da2638ff2bdce34e057f6e45595c5b262774c870dda06c8ee2d13329cc497bb58c9e18185cfb087d112eea74a322fe0ef3b7097a2610caf616e2d550be87797c61de6f957ca36a7a67e7ad3995ad638d38de07d2b28810122bda31312fcab567e0738d266b2bccab65c8a2ada7f618a1d37c269a8ce71fda363a5123caf7bab04e4f5d39719e2fdad34f445b611786cfc62b3142d3db6b19a25c338257c2b9229e87de037404744d58bff9f9e5799c778ff8e27bccf30bfa7188bad70fc88fec89739d23f2f425915224b04e8fe7c76a9db0de533c12393ba19f64ae37452a92f9527f836233d04e85b24f91555b930eb6e23a1b547f5cb4cf31cffbf01ad0d27583f43c0a6b408d20cef509e7096c18b313c9fec4b3503e6997512467a3487d4fe71c88465a50e713f3e0af57175a64bb1fdec176a715f7e0198c0debdfdedd57e0c2ae27be2eb597212e43c64ecfd8f560de6faa056554b98f72c832b194c7caf58f956d76fcfe080f61fe01fb08683b805d183ed43f017332bea64fa4de3cdd76355fda25df096c98def2827eb52afca00f74f59dbe123cc53d38b04bc96adcca60b964fe65639427f305df5afb1d752f8a70412aac157f38917379baa6b753abaed72af0c14f5489b60dd7afab0b17e9c3acca61bfb6dbddc05c3f2caf8dd5d202f213fb086cc38574e7999ce857d10fced07bcfd27d231d22c21709edafee52e51cdc116c0fe4bc8f6dab00a391237d81eb06882e1c4a95a83ab69855c91e4bee7d691e4096ae3ed4a76d9dc893cfb92e9533df49ea45b97a4d59ee65bc4e74589f1de614103aa10f7354b9f616e71cf998e7f91a23b68c746e017a5e1817dd1973f6c6007bfa90bb9e01b0d775a675d4604e2cec5246cdb2b21dd1a9eb383a37b2663dd63639abcd2fd940670ece407292bc08cfd9c47512e7d51df46d85d9f840f787b954ef1fefeb2892f00ba2d4f6c6956b5f0afc39594c242e468e0eeba2c0beea4d31803e1f577455b90fe30e46f0d1b9a470adad70adc35c888bcce36bd914247af707eb4ed11abe2be6c725eb89f33af0bcc3b91c82f7bc2d0e4f748b98b0940ef3f70e3bb00728760d74a336a54e60bedcce94fba15ff7c37c0253dc5d28cae326ce11df1bef201614422a87b946862bfa7a73ecc0bc2ba64d1baee07cf51c11be3cd6853b8a95c6baf2309d026d4213dd447ea35fd7b55b062706a8a3104b8ee90271b147d4a12a08e93be6b9c8074a7e56034532d1df1ddb569a635a91f61b9e6bed00cf8b68acd7dfa1cedbe2f2a9c279a8a9ff9ee5f7d5004dca7dd8b93b71aec938c43bafc32789fd06aab4ff74f5c3afaeb8c17ce502348d3f4b7dc7c0713013f1a49d3a0f71241d6087af35f93eae6f914696b25ae29813c4d1daf2ddf15a9387319e25ecc816d5aaef482c24443fe691a853af822391ded3f7a8479e44738eeaed3fd51a7d92b81eeda89c630f6478363e5d4ef65412979af48871d4de1e3f1e4778ac62881fe1abd2d853e218581803813a1bd87b42dffc243165b46778afc238c82396377355c6d8115ce23aa2e61e76b17420be2ca1c37dc1181e8a6bc9c23adb65fc3dea63506c238a8b76c79e2e894793ebfac61beac120e62e37865d9410c60778ee6b880745c49dd8a6220fc338d651e3c4e5ef8ec7899ce3abb2402912bd8fea02de389f77c031c9f5fb68b0b38df8a0333007882ab449897a629eebdb50a7ced3dbb92ea58a70aebec93894d6a1294da29d99dbdeaa397ea28fac45d6b9eed1ecd0becea0bcbe4c77ed7788794fe13b59e29d2c5c0fa339b675f9fe0d35ca59da02bc4d4fbe2fa4d18fc6b51a2ab240a1cea83047128f31e6135817a93b872f814591e3275a2af2d8817c6242437cf2810cd7e316d63a15d6963990e621fe3c17d3f785e5471cc77d7fdfcc23c1f7a2f7bec157f30af5d728261ceb9b31ef1ce11c069cb3f0a17e52c276ec45b8ffa1ae527fec1fe61b2da6bbe4b3c41bf03b1eff5c41d8bf899ccb225f6389dcb9201651d813235afb0fa857c37d1212fb7d2e8fc7cf827c54dc10cffc687efef24a09ec347966a19e13f6c8d0a5f652257bb87c28eec37f0abd46f926efae978c091e730e865b411c8bd46b933512617e2fd281e6b3096bebf3d435f00ca05e1984adbb809da03f1c2f85e0dd8fb918d96cd23798c4760b73b2a1eec3f55bd83792b806f95dbee63929f773e4f85856a16f45843a525c1f9ddb85bf328fce1fff1bf1b59cd0a750c31f59cac74b30ac192585b1beb71469bc8431fc606fa9126d6bd8afac37c76b4037285ff7bc5c13be5ebe89756ece098f6d65119fe39358de175887daf181d33e9cc233742a3f25a2c595b8453633ede852df31206d89c71a187367bf3f398ebe83f0f1c2d83cb6e14ff9388be91cc9b095e8ab723fcc354675f6536aae726daf2827ecc4d9ad962b563eae73b0e172d7dc7868b1fce3d853198752a4bd35c5d89c2999603d3d8e5f2693e50f8c83e5a1be3c30260b78dc86ef091e8ecd229fb974d8e84df388319d0355067b2332308684eaa55d533a6c78aeef29eec1d31933506476ad4943cb70c585deec433f9191c3c34fae73bd1caec2b5a99cdb95bb4fa1efa605c610d4ba3fb48f5d119e1fb2bb78a5fbea9c61b456b4ee56e225a19e589417665589e111cf23fd0bbfd34700eb003f024321aa37bc0cde07ee05876bcd267b8bd44dd40e8cf9e6d539c4fdbe70cde700d53de2bc850fd6459d042658986bf5fe73fc27e8a52eaaddfb127ae93935d189e77d81dae88ae7277f7d6bc410c9f3f5f96ba6cf93b9c9184f994c4ad0b529b5c23a335f71c500ca0d79783a67e4edef4ff285a47c4f603d97f5112ba711710bec03c3c5f14bdcfbf065d2ffa5ca4e13e855991ce953ffaae7019c9cf3397656fe5cefff106521e4ffc91e919c73c4b8843bf5ffb3f7a6cd896a6bfff077f1edce398d10fbb45d75bf0826227464b71a999efad72e060f1817c8dd8e78d7feee4fad8151507020a6b72f76ed74a2b0866b5deb1a7fbf299b9837e23e85b62bfc8f9a28acafd2dd85d19b2119d73aa82fc0c1e7fe0971638639768bebce5465e8a0dac30407a74e4b2d8b6e075aaf9fe2df4cf7113e9d60e757f7f772d7a99a0f58701ed33255e5fb39367088f9d5e65dcc85f3dbf8519cd334e4eeea5511802a0f1dd5dd8290ef27c9551af79c841cbe48576679732beccf09f7428eac55b9ef73642ced2b5f4e6fed30bf3398fd2e72827ab393d8a819bc9dd70ecbe8f82e0e6d60a8af80aa883ed45526dd0e085e7d84f117c68c084e1efe9ed24fe8b0747ff73fd2afee1c8feb18b244e95cfbb79235931181c988248e0fef3267adddefa5e27bc913e11e367f1b3b09f932e19c92bc0e88ef7d85b8fea72c98705de4a762fc5ac2350cedfe8ea5401f5ceb098e453f7a3c27a2dc56c4db3582f75a974ae24a601c44c7310376aac9d28aef59bec53933d3ed32213685493b6b4bdece78aeb5e6b9edda702de83f4cb511f4c3a47bfcef378efff1876bf9fd2abcca99e795dfaf6afdd876414cef1cbee5e473ebe75dcec84d3db1880fe263cecef5527c349dc358e886d72f5f6f9f795e857ba474fd7d34b7bc5ace045ed905e598c5b148828f3662b796dc5d646272e8f9b79eebcdac4f18a72e8f5577e3b25a9953fc83e5f524aef178ccb7c6391ead4dad5c61b7c3459e9d7f094c8da33d5189e725722bf9bd1335d5c0a5e65543bd66ea7d677186613dd60e63121b550601b6eb6ddb60d8086b85f0dbae508f9c3743bdd9089ba5761c87ecdcc3ba3634ef75c43dc0757d731ae6190937824b7831b9ad63b85dca608416ee8b47984175d6ea57e18549f4c2629ca0323c30fd22dd5e4daf57d2e905bdb211864f55aec77c3efee14c47ebde728c0ec2ec273223b478aebd0af359aa22a03a515d1902a30aa66c09793d4976b3720c22b98b64f854dca62af64f8518cdf17eac7db9aa8dab2e339fa3184c05b523e9737d122e7e712efed6fad6d1fb2fd08b1bd55e27718fb37ce71c407511683f639e45929716d60823a2375b104e8d548d64686754f11dae89c710ae1bb1a7eaab3f28eb5b94f0298efa12770ef73b877bfd1ceec774eb1d17ff8e8b7f1dd9f2482ee4d6e40b901cf90571f1235c8964fe87e47574c4e52a529a22f82633f4d532fe5c1d7216afc33e472d1e7be8b326e2c98e63badd778b93025d11295d2ee5d35d4ade2e174ff008d66e4dfc6f93d1d3dc60044f955bfec48db80302be07ed14716d4c4b726a16f192a7b13d6d741729c8fe012807a9f0b6498395c6480b55e1ed1fa8efac1d687477a52bbe93e068db688ab033e8479f701eac0d0e73235aeed8fec1359b466fe8437f251abbd7f76bee3badb0a621175d1a6b99c77739aac5d46480ed42d48b61350dae1bf01dc741ebe15a8ee182af51dc8ee11177b349b7573f4621a71dc1b65434c0779ca5256f291dcae7285ccbd6ae0cded7a5b03bf2f01ad3325e0aab9eac61cd78e38ce0958cbd7c3a2cf5d4bd56f7ba5e0fc7fd1e3bbbc7ceeeb1b39b8d9ddd39256f9d83eab3724a5e9a8b7932aa07e3628c71efed71021bf90caca1518cbf2bed78ee05bd53a5db33edad85e795c2ab60679aacf9862ba1f86d12db22cb7b859f513ba60bb1add9511a5718dd017b73251c02b6c649ae2eb7008acb4ed9047fd8a7ea178c74e387e2bdc4b6770d6701fb3267f29393f16e6c8ced17ea2691ca72afd52dcbc4974d72925719eb2de6aa0f7018e1bd247b5b8e9fe73caeaf9dceb5038bc84b1d7e1bf40f6b9c5f180b59eaf97c30d7e38672db81f6011c6331b64abdef25382e35f36fb1738cb3785c6e2bf36515cb54d3746b9f6760304f35cb6fba5eabde77231cf2abbc33ccd7c6b559e5781c0ffab025fb072b6105e4e63d923e7dc5dacfdcb8f3c95c61556a3bcbd7759e56d349f0f0237e385c9f7c6a1ca74aad72953ae5e336f0bede6584b5a53c159f13c08ede9a62f7885ecf91efa2bcfa118eb2cce7b2f8cc7cc6d6be32efd0da4ce720af85fb99ceb19c83a3283fdab9f90e6e0b34c44114e6349ee650f762ff2ccc55dc9c6dfe33935b896cf4a2bc8bc1491eaa9325b92dbee3ac0c6660aba33867857a80513d2aaebb501984c981d73b7ccfe7e21283728ae5a4168e62718efbc66bb3b1d1fceab7afbb330de504cbf0985ef2bdd25295c1a2669b73a3730867bf569bde5284dae789f0c8ea7d672a2653f3bb3177de35de79e7fbbdf3fddef97e6f93efb722bf491c174c63c15cabde89d4bc40bfe9941eefdcf3b787098e71819c389efb3427182e0ee2939db23fc733511876104615aa9154472c7caeafd12dc74235f3e2bb0ef55d99fcfb65711bf198a12e29c010bffa7c3f4f4ee602d8e29fa38f5c3a81c72df5bcbd1e92b09e33ae734e70fa65b1931c8d1b069a22ee5e3b2cbcf37d238d4f8871dc4e8be1d835f7e76279dcab6bbdca3adcfb74d3dc2a61dee2eab9cbb76c2c644f979e5a4fbbcfc980300af36b669ba8ae1673c40293069ee17629c48d488b73ad243ec34539a08faecbe13b262ffe72bf53ee77cafd4eb9df291f72a778028e735cdf7719459caf84e3f6ccba9835c2835678dbe2bed9aafc6823be4c45087dedcd6414e2ca2539e1f6b12174aebbd33bac6b303ce2d282ba3ce45aad396e9fb74621a6cfc6a0514f7280f07ed17d89642808e326666f16f258a4b84ef731241cc7a46d820dac01d38567498c72289faa97c24573393bce7c282fc61fc6859bc3b1f1c856c1313d53917cd39592b5c139b90029d047cd205107f87135c3aed342fdec509e50cc39599b782e3ffcf5b9fe6fa1ce584778ed020575108a95b95280e528d1637ae575a8ab36f9c87920bce64dcc6b7e6bfda97b1ce6e7caf73eb7bf91e48e1f65f8f86968d70bc0a4db4d33aa8dfef0fe7b31c9451fde396773d6d785ff709578ee5e1fc7b5b8dd49cc914558a267d8441ce2aeea380b4db61ca333237df7d8060ab1712d17cc2cb9bbf8a05a613b8d45a2350d6e63ff2035163f880e417285b91b571a07685d46faef53fac01fccc51b6801a91fbebe7d9fad39b1abe0f5e4f9c3434f5a189da739a94df1c9bcb08d9b53aff3c1353615657bbf76a92ebbfb80eca56d20e84fc9addd01eec2bd581ae9a52be672bfa4aea69db5e90dc2fa9dabc74453ef3b8f2b0dd53ca2da2bc21f469e1de96c73ca3a2a23ac0d0f2c6b96eb54df41c2ffac3ae6bafa3b8a652d3dff24af5f8ad7087374b6bcbdda8d7af9fea238560dba9a0ddf756e0cc664868e918cc1d51c8f1f843d15bbd8cf32b9f6cee2ba0b9e8bead03e5dbf11ea159936a15d5d770fc53baaffac032702d968f5f41a198c48e1dfb567a56af5ceadf574c5b525b728d39b9d36bf43f52b9dc37877d8effc386cbb53f222379c0fb9a6df7d8b798f72f98ef23c83c7f90dcbe7f82af32a1ee2338ceefd3258fb87f9c0e6065d9e17f12c5ea6cbf03185dc706be84fc57d8915f997cee45d3a916fe9549ea523fc4ad6da74176538e1edaabd65f9fb7f2e3fde76f373f6625b743bd083b4fd55859fe84c5ea2d3f8884ee121aaca3f548177e818df50099ea1bab03cd03ebfca5bdf706b884dce22fb19c5aecff4797750d71a240e9e884b7ebcef10a0f875d2d72d35d67bbca65abc46a50135a9214e3380ef394756698c5d68716d86e0367a9adcf64cb7bbd139007d0b68f77b789d515d17ea3bc25841d199a9995742f4ad5e84c9f84cf0292983b1481fa3050cda0a54859d431bd3407e9985ee405c7fd77474a457ccd81ed8dd65bc724c92f8b4d7cf1b21eec473f2456f70bf501caf27ac2d17401f1373eac073c4b53d839176a7ca4d9d7a7c8cd73c94fdabceeb7e1eaae653712cee5546385c75e453c398e433c2043bfd7c0c48cc08c98e3c03039e4373b81db90fe39c2f685ca1fc9f34eebb5c57b565da4dc31b06f5d833e45d67d934e178719d238a17e1389393ce05d496677a36186965f584566477971be33daf54cd6724b1c1ebcbe910e34c9dd11b42faf73fcc86c6ef8fea9ff07c3e9f9e3c8001f6c1d88b1813ecfaf9cd313c0726e7ac0db7648d5fae3cc638278687e3d63c27b47878de3909e33e94a83fbde49d2f71d24253f03a26f426d483eff0cc5b7273aa29bcad7a33db4a7ff6f3e9cdc3f59f79b5a7b82ef1f6f8b8c33ccfa5f88b236e940487575c9399eeaf4bead305cf853a36c9d98570714fc34b2fa183f3f7e044ae6e10d6ed225bf7baeb70456ee4bdf3221dc1588f6511c7a9a7ec5243675d40b265ee4ecc6955797f7a1cd01e83b6f83be9d5acd203982be707f3332eca5555799e7d6e9ee66c79cd5f3b94b7d1b9f6521bb1043b28d2dbab9f9df6a6e21ced58779f9b53aa26bf7beb14daa59eb4d414e1c4bc58618e75adb99a5fd027f3096500d580ba9a0bdeef7250490e96062df806f7bbc8c18b6dc8eda92e23ce276c1f7350070ac09c56ccc767f6efd4bc7c661fabe6e733b258394f1f7fd7837735bccfc46ab50195ee54bc56a43ee592f9e462aed2e41e25fcb78f8c67213cb9ebfb65d27876467c0048a3b7b04f9796a67c4ff451dd1bc3db23d40b2cac3465609ba8bf2ad1bf581bf690347a7b8e3846aa8ff573f4b714f4b27e6c3c16ed7150438c2b2d4be7f10a92fa79d477db931ca3c366fcbc7a630bfb730b791d306e29df1b429fbd897062b39ffd1cb27b3bbd595edc035a2bf6c279353c41029fc0311971add28060d5605c8590235c5344743e63d91b7c1c9642a2073bd19f6aab8ab83368d15715c4738e711208f638fc1cdeaf58a6ebacf9b90c36025ceb92d8a29f0f1b36b822ef62715f068a53aad405fb23ee1c8f778ec73bc7e36d733c1ec27679bcf33ede791f2b9cbfba6ac5e7aa22ce6bb02d79f89ef3fa480510fac111d63bcadfbcd82a23b4ccde70ad318263728eaf06ec4c972d6032035ba3a5158e2f4a339e6bd328ef99b65113f89118f34a95b79ec108bec539a530c42fe95f8db8ee4e7f4ed9a2919d19717160fcae77d383e3896b8e796ee86bb4b4b33aaca7c92d144fd3e4816d301ac0d8c5097fa227edb0fcbe84d8668ec1596bd30594ce95ea05fb1d72c1c9394fe19a106ea9ad258340930787e2c79563c595f8a30a75f8be8c5e30672c6aca706ed0035c1b403bbe0adf3562b19ee0c00e61acba80d6e4c16de780f3d709d542bcc912a573ed19aed3b0e6ba0ce7169d03df0cd899a608bee54ab3ab6241764eef593cbb57f2f4f7a7c671a9dec9f49e17e675de462f2fcbfe3b4f15726015cf319d6b9ab2b42a6f9b70ac63ca615fdff8a6382de41b289c7f612e1a88fc6044edfe7ccee7ab3967fee2db4b70d1f9cfc060386ebebcbebdd0073817f2e5fc9e7fa9af4ede6d2feac0b019c3f79c83c984b9a843bceac0a0b700e3910a80e7ba3b8cd12dcdf0ef220eeb9af330c2da886b845e302738b1037be86f1833d6c531405db656d09642bfc3b105d43ff6a9627dded0b7b86d0e56c8cbe5713bd2b84b356069fcd671cc3bc7d59de3eace7175e7b8ba2cc755e7304610e284ccf18953dc0bb3d6f35b165baf53da3e296da71cb257b271bc73318524b9e59b8a04b21c2406ade23348b84d431bc7a085ffd56491ba11bca02ce717f279cf98d3e530810e731f5c366fceb06bc3137dd5dd825785754c6fd8aa2987be3168e82b080b6dc40e423bf1ac7c7a8cb51eda9f3b4d19a0bdcbe29b9a01c222207cbc2d84c9ac2a035be7bab486e39ee1f87c037115e3fa239393027cae221b38c6274798cdd0f78063d9c27b003e8b3282acdec6fecfa4f72179fcdc754fc4515d4d11505e27f23b6889c231e40cceaad7b7c3353169b4a694ce75299e731ccb1da3fa00936baf4c1a4c7579eb5bbd19e149608189ed80c8f789f70e617a23bfc274a5059439f82cb89f997b1de517a0cff9e96a093c7cce10cf61091fe3ce3b7bf2bbef36f9dd26bfdbe4ff409b1cdfc388dfcfb670bd620075b7ae0800fd0ead1b8ebfbfcdc43fb3b8ee95cf65f93359c61e1a19f4b66a8f63deb91c23d9c43609be9be39a1f68d3f86690b275e0e7a09d732b989e45eb826d75a453c218a4e3589df82c425b4357fa291bc420b81d55ea806ea80681d295612d716d8903945196cfa5a01edbc2cf20382943df64d885aacc6c556ecde0dd69b9c023e7a9e678368eed26f0e9c8ba62fb5ee3c0cee4b6ce64c43a868b720ab42e5bd7e415b00d193c6af2a0cd7bc3c0daaf7bc2f2c0086b4b793a10d795684d115a16e7409b1ada3b04effadb75305bc2dacdebfb8a1d551181f83e38591e0b6ad32f837b48d62194a7cf540f12eee1c0052b54135abd2ec4d5a1bc90dc4578a7e6d8174dd39d2d53bee5ede10a70a86ff005c955b59abf83ba30e659c1f123cd877a517525f87e00ed45be673966c0c2755923ff83ebeef817843f428b1d143f986a231618b200340ed5d7fbc69475f0fb101ed51f29ae289afa8ab0d9df1e577c773887f720fc0fbf1f8f87dc978c2e6f17b9f9466c27b8b897d29a6bf2636afcf0791a27bd1b341ccf8de31cccf098d39c3257dc9744fdd8eb941deba81e0884bc5f98bb86c49b2c1a2c8c0e7a8e633288af183e278a19692e807713a373d22ab527a4c608edb33cb8052e56fb70ed2fe68a7b553e172ff15b927fee82fcc467f3c1ddf479cbf20292da01ec9b4cb54817a53e97388b5bdf7097f01c04c9bea3cab5cb15eaf78f7134269e97bc4f3f128bec5d57c81a4cebc1014ed9eb27fa056afc1c14d38d655a42dc0bba329c231efb04ff30b4cb75d2e70bfffd83135a507654b9b523d834ab04776f6030e2ee5549c4e547b3bae3eccfd1debcc7b1f50f9c7b5d36e945f87a2cae1b68b454aa2fec82b1e2d0bffe9d6a706606dd5feaf9b1bb4a9cce95e6e7b181c13c7d248ff46789fb6573d0e7c6fb24c3055b4b1edb7a32d73f8d7973558c6f17d6f0ad55d7072a53a146bda41d51d97e407643b6ef0ad90da7cfe91372e646baeffa7195f88e9ab294aa089ea69c1e63c1184c31c705cef30a009e4d4dd11ca383791f784ef4a3fbe7a3eee4d47c713f69928f82f010049a02f75aa2d13d4c7a8992f7faa7c02fbd299c67722f05bc6dbcf98141b7a99f23a1a529fd1af85722fbe24cfbb5bd303829c4e983328dea104cb7bd409c4ff5f25424e644f04538716d705b10f69920b985fab127ac8ddee7e36e34648952658425b96f4fece52b0fda4bef3ad7f6f77288d56d2ad2b77d11ac844a6b11ede365de1de668e7060dcec4c6101c955e2c0db94b415fe4443c877b5ff9bdaffc9fd6571eea921ae237a1ee607be89dcf67d55a86d81599fb0fc72be09d83f3952c895120bb2230e86dfdbc6439f30ee331614e3573478638c62ecfe1ba1933c8b9e76bc3e82aa87da9766715c536b6178f6d78ac63badd65cdb19b8fa86b443534177ce7dd3ea9609f9c1d1bbac781ee71a04bc7813a876b12557aeb984cffe6fa8206785ce7dba333b0d238f08ed6d73549cd2fc9ed31bc8de72fc27d7b4f62b47c825ea16783ebeee29ae0abccf3f3f50fb9a15db7a9237e13beeb3c9c58661858b24859281f8075357c4f18cf213a23852714e2ff98b404ef33d4c782fa5e7a826fb9ddf7c928b60d5fa76c5795c539df1301bcff7565d842f6648f0d744573546616db9a0427530f6b6b5ea2bb34acaf717519d5834c2723d6c1759450e6442ab6a937b62eb77616d7853662ed31d570de49be5fab27345566d8443e387a07daab108b0afb6b28b71f629b0ec33ea09d268b4dd345fd56a83fcb7401adca622b31df15ff22392a6d97da0f8ca5eaf8619dfe208a4112fc1a846720618c1bee05d57f5a1c58411948ec936f7822a5a27ceaddf6bfdbfebf694f537dbe4e9977c667f8dcf7de7bbbefbddd9fa3b7db3e1ce71617aa22ee6e2fae8dc77501bff5100759c073f83d70dff06708b6e5278875c73ed651aeb593e779f3f1ef30de4a746b886fbc9f1377d6ba9c9fff298c43296c603022f8d3b5f7738047ee1cb3076d99f157fd99dfaf413a6cfb40db63a7bdf9f37e4e6ebde478f731fa4a8f777cf2787330fcca8dd7dbc7972ef9cea6b11fe72bb946d006386d8dcc9e004efdaec575a706975ee350f653b1daf0ec61f93ee233dbdbfdda9eb42fc0734d7fc249b39f2381323d692f2e79a8a737920dd2ff65a6e5f282bebf1dfc26f3d8fd26f3c8a919fb94f368fe26f3a07f8b79784f39f7f3c5fa57c3bb0158ae144c502cace5bdca6085b8ea47d79a131be4f451a7ed9911bbd4150768cfd4d4ea09cd3ddf2e9db3ab9aef2af213f33921a27bb0e94f4ee15c89bebf1fdfc9bdcfd2634af8c552eff0f8da9b100384d8bbb977e705ea26d6391cfc97ae493bb47f4572bc38c0dd96f7ee0bea9bad7f197d43f2ada38a3197c2dce961fda5291a303d40e9f0bc074ddf70b7bee1eedbb515eccc758e9d59c1be95726ccdb006b6d82f49faebc3c3ba6e8d632c2dc77809fdf9ebf4e85b724e5ee6c2185707f1620af6dce066957a3d2e89a1a1221c919bd41d9499e393d5a23bbce1515b3e57e6c979a8dae773adf52bc94776d2b3f51cdfb5a83ee5a2982fc7eeb97276ca11bba25eec108b1b7c769b325ccf709f8ade95ddbb23f54af5debd708d0fe4680ecb8c276e3459f4557973ce5ded54b86b8b7421d9273cd743f14634dfac9e3b526f1e3da39a7d5f345f62df48b977fe5e7eaa38ae9495bff8b915e777451d5e203727e598c3f5437823a7e415237b53a6ce79bf7fcebb4d66181874cb3be7196a3ef74ac9b5179be77edf3ccbff04cbc21eb4e27b744f6792dfe333708c0be436fdfce3fb4cb767da29dc12f19dbe3c47ce72fcd80aefdecfa35438633b547393c3295de919f299635072f21c45b1928bf648a27dafc1e6cb8d25ddac2f1be9ce4f18e33862671dd7054531a5a2daf86cedfbf8c8f81896e0db6e719debd562e2d2f2be7f9f79ff6617f1db2e6e731ed6514b5db1ebf2516e5a87aafb3851b7600bdd731ee56241c8a6b9c8f9bb41d934a17ebbc8dd708b7a13f93dd563ce455cbcbd1caca4e2cfef4cb77fbc86d5edae2692341a5d2be7eabedce6dd712bf18a021b29c7f6a97426ae783ef2ec998be0fd97bd57e33573e0de5d46ef66628626c30295064e4ebeb9e658eef1d894e189c0f40a71d40afdd60a71c73cddb6326929b04ec9c7e7ebab8daa088e5195bbe122f752ced9487265115c91ec3d7ff4bb076c84e3df85b2adb1d01ec9c104cb5bbf39948f683d72eacd87fbfb9ae2b58edf3d742c4e1aeb7213bc2a966f71f6d2e2c05253fcb5e1e6d4ed1eedf9dbef99c21c0ee86fd1bb70cf968d79a1a27d87baa809266e7b75b11eac0c27730a332b399ebcb9782cb41181e926b8aca78fbfa4cee3af1f5dff9b1c2c96cae8f1d78fbcfb349f0bba98eff9e01e494b55068b13f0e2f6fb1910861b795e8ce576fdb52ec27fc6e364740e509a246e5478efc71cdfef06bd5da80abbcb8993e2fe390ee3112539bc5fa7cba7d7e9e202bd12fbebf1e64a504e1d9e1300928d29bb81e74e5384d55538476219dcd7e969bef9942ec8e3fd4e710a48c41e0bf3b58a90535b748a7cbdd892240817c2200b3405c94d88c53655f15d81d7ce03d27836cbb5212ddaf12d4e7a33b92ebc9f23d9c0d86edd8d4917d4d5e79d79b0dd4ca86d5b6ee2ff2bdce097d2699aaf80fadf3fa78fbf2e8029b1bf4e20ba8b76b82f599c6b49bd09e7413f225e3ebe2b7083e069f7e79b4d5fa38f293a63fbb887e9fd794fd95e295d96b4bf52b219df6907f923ce95c71487e368639b8cf4ae7758c724fc8e06fcbca201be2b8dde4af4d994c17dcc9ccf342f87dc6aa171e5de3bd65c578660ccb00ee2b90ce5d045b87f8ed913736da12afa20dc2395768021bffcd1b1ffe77f1a0f0d5fff35f1968defffd7f839b31bdf1b8d8786a8bb13f8d3df7f3f34ece9d25919ff36e7ee176b6ece26bfbecc17a60e66d3e5f72f7f8e3a4faf5fb62ef8b2309d89abe33ffd65ce5d7fee4dbce55ff8d7ffde2e2cf8fca9f7df39fcbf3559ea53b0803f7af84d07bef7d0584c7793c6f776b3d56e3d34dcb935697c7f64bea21fff5a4ed1f7698aa6fe45d1ffa25a6fcdc7ef74fb3bf5f5df5f1fffd3fad67cfcdafe836a7ea7a8c64363baf8cb9afe6a7cffaf0e169387c6224043789eac1bdfbf3efee73ff44383f7e68def6deaf1eb63f3eb434304536fd6f8de7c68f4d15b1986a61e1f1ae3a9d5f8dea428eaa1c1c53f2a7ffde5eb16d5f84e3d3486167c26f5d0182587ce82199eca23d5fe0aff3937678bc6f7e6b7c787c6d372eac2c18c2666e37bb3f58d6a536de6118e61017ff38dfedafac6505f5b7f3f34fa873f1a4dfbef8746a7fc4795bffe5a79abc5c46a7cffffa807ea81fa7f7fc3dd7726bfd01ac1656b7c71e6eee4cb02ac66fa623afbd77fe9f6174b5fea5f7e4d2c475f7eb1a7cb2fcecac88ac99e94341e1abcebcf7f2d7fea4b272570d1df9fe726fec39bfecb9e2cf1cfc3f99cfcd4d797a6d3f8eead0078688c963a98449b8afe359ce88bb9873fcbcdbb533059849fc66f8efef93cf1a39fdf268b65e6d3f057996ff4e7d60abeefff1a64f8c507048d74ea35be2f7fad260f672d229a487f6e9dbe0bf6fcdfeedc42cf9126bf1653b43ecd7f371974ca7d349750051c9c12d9ab4a87ffef87061c63e37be3e773fbd19037b6e54a814943054b4dfba3c70d3f0d0959c04adb5153491a72af6ff6f4e7eef1073162de7568c48ed84743deaecc9dff089d6cbd37a4cce7f9fa95b1182b6831fda0b5365d73dd7f7fdaf4476df56dbc7d230a6f9abd8c275c736178fdafc65be239b4b833ddfeca70c1ceeab43c8351d786d75f9320ca1a01972ae158be6d5fdf9f8a9f1b35bf4387b5bd4241899130b77ac3cd9fd36f6b9511033568ad7445a45e5d6b6d4ddb2b3368930040b96793a00e742829abf7f4f53568bf9b8cf0feeab67c9319ac34ba4dbfd2addd2b4d0260bb9755bfc3678c17360a000cdd76608c874073bb4da33768f35eb7a9ca5bd480aeed7f8f002e0f91b36ee2cbebdcb1d09a2220b0e39f231eaec1aadf692e75790b1d0de8a0460ef34103e13070d737e32dba0843b0ae9f634a64df3aac808ce5a41130659f51d0836ea140cd90009fa0c6e8482e731ba353ef8965fe31775e99e7c5eb90f34c9d6b0756d88c1d83b6ad0d855d1baeb4220dd2e9cfed3f27880863738c45e3cddffc04a839b9f4da84a0303c273ad078d7466cd3a409f914470004640190a6673fe7791950c67d52acd47942cde9f8f7b8c93a496c9d588f5e3f04af44ce1c320253cfec6ed490141c1302a120efcfe9a33d40cdd9f11c551a3ad402e039c9b738073a84e459d2f2a737042aedac74199ee1d4f730c0914cfdf1da412038f177524ea7d04a8d1bef2330de1e57fccb8b6d71d2bbceb57cb8dfa9cf7510f08d93f91d21ee464455c818c4863206f0e139c731dd21a32a02e03bce46ef811d19371c1fad2b0265c9ddc50f0cdab333688db2e86ea08dd09a240def609259235de92360f5d4efb07380e6a9c9f0df8ff033f1733a59239d0d0c5a0426d35f843f6b3d2980c63c26286f2f74596c11f0d1cd111946c0e48986fb13641aec8ae4f055863a13acf404994e48d686cff5533e9895f7f4c7dbac3d1ebe21e253045e947568f0febdd816dd0e747c1e36a6dbf610096af0680ff05a43c70ceaec05cfed0531086167d331107173088c9105710a83d1434c6cc6357d931131680626ac0983bf140ad6d1d457f3792f28bdfc3326cfce3a6cf06f6b83191c5d3bd36daf730896b2fabcd8a12d0c6c3781c57567aa32746a20631858b200653494aba5a60c1d8deb526a49d2b13c1097714f585b2e98694adf46a032f019649f5519eab84148ccdd54dd6d026ca2bb82bacf72bbbec17523f2fe22a094d8191ed40d407670dd30a0341b188ce6c3b5d997e3eed460a4881439f32c4400ab2a9aa3cb5b4775c18280b9150071c467a94cb0ef52e410559ab5b2c05d09ddf59510f69e0bb27f00d8293ec77f7a58de4cda41099d6b112e25e76770dd9dd5692e0d7a18daa85703444bad6b68cb4deb795fb8de75bf17cafaab8c80f86b00094bc9d245c8a6aacb1358e9c165808e8f002c276c3c3f30e82df88035764c6fd8aaffbd02f415d78627faaabb05af0a194731a854e81bee8db310d02afcefdc792412c5c4a62947f0761890ab1c09723502e43cfb6314f977d540bcec02202f56e3867e98f446f602b9074d64573e86768763129fc4e2a4651972808c0d591a74bb2a68174f80bbc6aeb45415e1570cfedb9d691c2085311b1bca6bc2b7598740a326d70db05c004a93a9aa04bd15c8798f175beccb557ee14feaec0176f4d614bbc71addf6f55f1190df81a28c9ccf650b34327b5eb9513c9abb17118c84c9a5d8661c35a16f0475fc4e478de24d047c3919357f690ad8e52764448009a1da01df7336aa329c17dd19c80fe3da2b930653831b2fa18c58bd9c6678b4479aafc9db59e2994fa6db8663f233f708490693799d565c3a5565f1d7abdcc409ce3a0865ddeebb1e40d91a52a5c9702a907245446d5edf56e5d62c49ca9d4af829fdba7d960e5c6b78dfa0b54e11c49e3d8f4b24d6af4dee95b4679224c6b5db5211b97419d2d7c3efae0de4c570173580ada3f79c07b49e4cd6a398ee8b6d70edf790d4d874a5a5c10c41529e6b3e877d5d6efd4a0097079aac01688fa0c43af7cd5647ecc2a0a33867a0c9cdb505eff62411fb15c0c0cf01064bdde165801d3a470090e1f3a7870b31f36d7729d0e17d1aafe9c701d4ba4ecbe4a4c0e2a447ac13a2315d80f402ca35f40559ca4071f55816709e21f96f2d50650bffdc711c9519365579b3e0b9d61aea9fe86cf484350275e5a4d98fb7db00b0d5e15e2b02a5290e95ba77dee2fbebdaeb5017c02d7fb8c036d0e4cdcd01808f5d695189a0ffa04cc7f93733c0fe8c850bb2a04d1268f296d824e25c579ed03ea138b33cb0556f4662c4e80e59f1dde11ce578a25c18fc7f44a0b24e12f860f9b1767c8f6d9a1ebb36cb115a94bb1baadf11c9bb6214cd39b2d76e6a8d6e04a0bc09340e38af0a3a1be9335254e45be3197993a5992ebf907beb7c90fc21f9b7ea4a3b9213586af2d0576330ef305780481be0dea76c879b20dbc27b46f62a04287f21f7cd5453fa4456539f4be482a00c2f8186085d883d5da3aebe608325ceff28e23cd330761d1b1b64726edda16fc8d2cee2bacb73c83951430507c73926fe227c2eb4673339e30ecba84adf367bd2d4e0c04ee7a459dde49c63fcee88244b42cd2522a5cacd4d44da70e67ceacac39d45d29eef9fce546508d09a8c9a8828ea554132f2d5a0f36cf874312f223ee5d2f1b30b9e9585aa88d4abdc5c6b98646356438ebc0fdfc9738977f62e7366865c17da7728df8b1a9cf01dbe48bf2fcc0bd74df2be754c66601b727b86084b6432c6cc39a93c87da48ac8ae531fd2ce911fe1de72ca3668e825c6397d224a40796160d28bdd34c348715c666700dd918d52ea49b4f2f096e18e75daf1e431dc67517893ad933ef8e9e064cb85629d2c2a4ef16ad5fdd71d39784ae8f6b1e93f744b5b1d7152b2d96bbf43a80490ffe5ddc6b08c18d7339c071f5eafcf02c466b5f83ce0f6bef92fb5d263f9997930c9fb534e8213012cfacdbee796b8acf83f1267566b14fd97e1b50dd3ed6d7d22221cf7779ad2eaf3383ee2ff53a6cf95942c7bc64c98b4f8fa127eaeab2a4c75b4bee2e427b40f566b62a3f663e83ce00ae4df642df2e536bfa31ba3b979c2d5527dc61fde467f85eb2b70093a11ad3ec67d01c3fe739391cf3ce8b41e2f8c2946de226ea189ca0040048b99a92723abb8c0ec7b661f5ba92223d7e883ccdcd90fb251bd91771737b3be0b936a57352807dcb175b5786c01895b0edf7d6a85c6c26bd07156234f15e4c7f82548ce6baeb5096343dbb0e2572397b67482aa805d997c5a6e1923a5fb939d51401c996b92b779ece7a7f7a1c879acf51a3ade19a79f9ae4239c777580beaac208c87c4cdbdc3b59e975b383ece3231d5e3e3aa583755bce64f7f0c46ec8b2e5bbec57517fc4b44069dba13f88ef3f246cdfc3f03a4df508f8849724e50c7bd76d89d8e9ab5594a47fd07dd85c1b51933605d925b867b032c547b06cfc28bad79d2c2e8b0531dd578b73dd3ed6e740ebcf33d01a8743bd03a50e6737a2f8eae73f958e7c1b5391e073db84fa48e6005c760ba95be7f0894a4c4f7aa9c61bc5696dc2aa54bf2802a8ad62d91bb2eae294bc4de3e3246807a31f701932e1e1f18c3f7705260f56667d9a1440fd938d6c23a24df03ef94d8364171a96fb9fd213191fa06d5455a1d9cdf250053b5f78c986e1be5b22789dc750d73fc27d8a52b0cc6f529ec52d48b7c49bb34bcc32632586924276cf6a4c0e4dabb3036aba39e46d483806a6a1239c24d2497a3508650ddd19af48eae55d7072a532aee56703f94a89fa9769ef2ce57b8aec8af8b88c93d80ce49d86f4672d738a7c301140740b5f63d694762d764fd221db640f5e2508f32bc6d30c33926efc624dd5500964ebc73f7016a0ee48bf964bd31caf53481210bc04436bcb42b41de7df6fbd3e33800c075a87ee5b08c00c393969a22843d731198924e4b2d0bda55bd7e153bd8ae52137674cea7f859f973ddfc04d22ed4ff512dc708de135bdf648684305eb513f38eea3ae07f560f6c50cf34b76d21199707a80f4225e71ef559873504513d3aaaa5827fa7757908786e09268ab536dde18ee734a81bd019c9f45fe6f5371f5df3cafe5eee3a55f3010bce635aa6aa7cbfb76f032700e316aa2c00230f88fab89cdfa21f35b7e4a6634c9b8126776798d88e2573c47e50a6c706f5ab421b18eaca6c3f7685fd39e55ec891b50af77d8e8c657ce58be92d934638187e2e60f9679413f9d156e52d0221846b65b9e34c9c78635bb483eee2d00686fa4a93bb3b5d86ba4a5c9bded051dd2de0b9ee1291708431a39ed854699b7c0ff757131d9688e5fe63fd6afb785ca7092cce59ff56b2a6883b4d117721d9a2a60ce7067dbf970edc4b3bb88796f2bbd849e8fc87734236913a8a717a5ea72c87fc62c571909f3adac0bf63fd8becfe274f823e38370c54c55a0901fb8e735bad19ae5f41b55f0ec6ac1927fc6e76ae2a7d5b7525604c59542fa5f504c7425817ad19df13e706232db40ebb32027601f518f41f54778cfcb07bfcef378eff758ef4b864c910caf843d57570e9dae5686e3931bd51f2ee2e59eb93fbdc6ced8fdcf24d450299bc5121e64be877df782c2237d77cc65c2bf70e94efe33e5a779f91a3bcfafbd68e9fe21c60855c54e57ba4742f56bc8739351370ccd20e813057acc53f24c703128b241883b6a9488e9189c9a1e7df7aae37b33e518f151cbb1282a193ba88646c0dcb4255bc810f90d590502825af65e2611f24af78bc35d531043c87df0775538ccb55843d45f2a8cfd5f033f86a181af6393ec34f8eff83905f94a95f3879fe578c011fed194c3c2f995bf9c81ab8d4bc6aa8d76453eb787aad264bf4c43a8c49985cd737895dcf7331a10acf498f26b7750cb74b198cd04280ed187fa7eebc6276ee615d1b9af72b83fd3dbec73abac28779c69860adc382498f5da872cbb1b8763041fde81893e756f1e4a27c76889153060febfda548b757d2eb95747a6eff552427d5fa653b4579f2937181aad8cfe56de7d3ec66d2eb1a614161199687338cb9d90ab16a1318b4ed30e6b751158160ba9e504356214653a2f764ffceca273a4cf5958cbbc2cf31353e8269b68f2d968725774c8fe7dd19199d9edef36344fef9fe00b2a58e92ffdd40ff3a7aff057a72ebcc37df022e43b86ed83f88fcd956c2a6da588ab0311811105c571fd585201c1b5c5f17f9bd3d3630181698deb0f5da41e7994ad78886f57a15ce7689737d348673a9d84d4db27c4e8ce6836233d7c44ef8a818cc95b10e2ac55aeac1b93923a6525b2ce5aa5806b5c54cae2b5b1ef1156e4dbe00c959558b811c8c7d44f812241f96f4f175ae1ba8b248698a806a6cd4e046e42c5e0752e316e6a6221c90443e2bcc53398ee976df2d4e0a7445a474b9145edfa5e4ed7218742116700d98f8187bf3696e3082a7ca2d7fe24671a080ef413b455c1bd3f36a9b33989c36ba8b1464ff0094435478dba4c14a63a485aaf0f60f84cdd30e34babbd2153fe22231a7ec4653849d413ffa247eb536b82d50195c73f1836b368dded087fe773476afefd75dfb5c7e4d518c8e45f87c090c661edfe5a8465593415807e21baed534b86ec0771c07ad876b39860bbe86350f9887430a4cbabd223c2188c013dee9885cafe32c2d794be928271cae656b5706f7ebd6b0f4c379d68e97edb603ad640ce65cfc73d2c3503766673a9e798b38e007f707e3775e03abfe1e8bbbc7e2eeb1b85b8ec5216e8cb2b9ce9afcc513b00a0e9d3b1061aba77bf32f98b7bc662c2d1bb7c1fc41a7cfe93362e011bcfb74fdf3b5fa1331febd3d4e60459f91331cc5b8be98181bbe13e35db4f0bc527c7dec4c9335df7009c75d82af0d7177caa81ffe23313388adce8ed278c5c82edf9b2be112b0354e7275b905509c37c98755e60eb80dccaf946edce346481388e7e1ed5dd2d725fe501d6701fb0c67e5cc23ff6d13e697896e12a92cf759ddb24c7ce3845f5969ac9f8dd7208c05e05846197e814bf864b4b336bd41adef3418c123325c8eefe87c2e2a2237e88eaadbff5c9b08477f503bdf982a0f6798c7b3f63943dfcc37ea5feb8dce213cc7badfdb34dd4dedfb7b8fa79ca00beef1947b3ce51e4ff95de32917e44d4271f1abdbf06f999cca39b67c510ec5e0240f9ec1304fc5779c95c10c108e40987f7aed8475b2b88642650659fee79a31ac33f9b208efb43097b6d0640bd5c41ade10714fffe05a6bab83b8dec31cd582ef59bec5d9b80790ebbe5b1d1c1382eb1dbee7b3e58e0edad357e16216e7062350b5daf0e83c7e88fdee68dc30d070df49cdb93982b9583f77ef1cf305d4fd5e29f8089f0161a9d4beb7a9b843199b387bc68ef6cf7c522eeb046716b6bbcaec4dbfa8efb65acf6da57edb024ead88fbb76a7f626e3ddda9b666953ec50a3d8a27f527a2faa7a47f81e379a7f23d57c9d354e9d53a7a6fefcb9567baeda67958bf0cc6b3f6db70ef1e4e9fc79cf35d98a73a60e3e67c2e63ef66f6dca4a5ad25a33cc175702b498c1af1fcd750ff456a80e059c9d6109f635767f27808472b61573ecd4d467ad73bac63060867fce778260ac3ceccb61411633d8e58f85c5fa35b8e857a08c4771dde1365ceea25ed6a40c60ccfdc1eee3c3e97579fefe7c9291deb853f508f5b91cfeeb4fbaaf29d55746f4927f0db1dbab7e2fad6b8ee3bc1759892afd70e1bd9d8afd07f43b1e3148ee54c5586ce893122bb66fc8810bb3e53e77b9575f8e87efdf08e89cf4f7e9f4e3db9d7d847ac3d6e73390e0fc4e399ea6f81cfe1f36b889ba8ce1873e70293069ee17611e6b0498b73b866b5f3d41c5d97c3774c5e0ceb7ea7dcef94fb9d72bf533ee44ef104c4c35b83ef328ab87009f7ef99753d6b841baef0087f58951f6dc465a008613e6e33c1f292e65d27f1718361a3dc9dce75777a880feb4a41125fa5e69aa0bc350a313336068d7ab403be375ce3fb12c95010c617ccde2cc4164c71c0eee383388e49dbf8deed69c074133c989f303f80f7efec58dd1975cc4ea0c9ea614c81c2ba8ad9d24cd47ae6710294e60228cf0190773ee78837c81b82490faf77c5fad3c3e715f3bae3b39a964fa8ab93ff764db7ebe19f9fe6aa2c5216bc733beccaa09b3e965fd4971518b40f5406eee5ec367a205da7857012e0b94431b3bd1ad5ebafc38d60101898577e89ef6d9ef0cb1fe7d2a849d6c52427fd05e4fb6c6ef85ba8f57fc37b46f62acc4793bb4f168019f6b7273f97e8e74539131afa2d0230e976d3c4bae333f6f386f59498bba5b6b8eea35d05f32597b71b717a3dcd494d844fe684ed82103358d17cad273946891e938b72db873da02f684ca14ee42c79bbe03b0ea96f9811fc046cbb413fda7087bee58219d47f9f9233e8a3398a5d33ac7ffe80b851b8d7a7c68bb4a6c16dec1fdc16687477f183e06f600ebb9c98d187c7832ac9763616f429e33c1fdb8f92aed5d9f3432ecd6b9c7edf59380bb866b4bd8a78d57af8d991ce66785b95c5c0a05b2da3848d7049b94ef54d247063aa8eb92e5ff280aca5e79fe03b4cf13dc571c622bfb0161ec4444fc3d575f5207c57c95a8e023ca48dc188148ab94463afbb9632e2f14df652ad4d66e818c9f8e0278c6da0359d3617bafc01f56aaee85bbd594d3d4c22dce35273ec8fceaf892332bb447dac35f585a974bb6978c36072e2fbc27bb548b68e72a37f9cbf7d0adff9edf29c5f1547eb06f9cc4bf66a94e60fbf106ff9897ce997e2293fc263e5ac4b7258da557ba1ce96b3fcb5d9409b54e7dad03f49dd995578f1cee4c33b8d07ef54febb23bc7716dd0ef44379e71cfd782a57d145f8923007226330c2af842ea8ca33761ebfd889bc62a7f08991efa4cff3715e83d05738d447466c7ecc535b18ab3ca47bea8a55ba709ff9a5017dd81ae23b91cf10a0fce439d8242cc1c85b905c6722a69392dd5af90aa25e1814a74fe46dca8df51e9bac169b7c47fd7ad78faf3fc3f79c21abcf04ff9232180be342721630682b5015768e388c91bf61a175c6f56c4d4797b7b8ae2bed67d716c319d020c1e78f7cb905df1bae2dd237a9d1d25a6304c7e41c68632e907f86e37ca81602d5d2e01a9cc81eb8cb78651947bc8f75e8e631ba6fcf884902ec83bf76427eedd6bb8671491dc3ed2e0cda5a5b4aff54b9a9538fbfa1350f65bf7bd579ddcf43453cb54ceca5061ca9363c830bfe0561999d713ea29822941d7d243dd9780e3723f78330163b40f86ca1fc9f34eebb5c57b4650c465a593da1167b267cd739364d345e5c9b8ee24518af31194faf338e2fae2db945995e84b55d6e8cf79c69459f91c406af2fa75da45b9ecfa86791a11dbdf9301b9abc3f94c72ea92fff747af230fec2c7da0304d3ecea7680c4490b4dc1d80f67e9cd0893b1d53464019853763a19b1149c9bc9396b1c37a8b3e77508d71aaf63ecef45383786272d55570a784e68f1bdf4673f617efe607e2aaf1695d4a0defb87eefd43b7dd3fb47f5e8e619d45b268c92d8c8725e3b38e644be997efa13bfdfda971c03b1ae59f9961b19d5e39b725ada07e32c31a3bc28bf47324cc0dba999bd73efecc8a39a6cbc96beeda99cf2d96e750ced0267748a4b7abe6e0a2799e978b3b4d7ef7d6e9c4dc5c7a9d0b737406adb9ba9cdf37f31965c098b26bcdd57cc42d779783f27220b7a7babcfd6de480e79a6bd50588f709dbc72cd481534de1abe67333fb776e9dc069f9dd8c2c56caf366be5b3adf9bf95ea53bf548fe37f3b932352f9fb13718e1d55ddf2f9384fe19fe98349e6d482fab05d429bbd3516f663be05f70bface14a14df43fd56897ec6da62b2707c61fce094b17edef8822705fa7ead66adf5d4c847aaa1967a98f6c5cee35fc4b5f736ea23ed498ed16133325f730c6c6f6e514d04aefdef0da14c3411066ff6b3f7d86c553c86a877b2564c86337a0e07a3442feb88754c465cab34201836186f21e452477acd1bd8b1ec0d3e0e6321d1d702fd568391026877ab8ab83368d15715c4078ff113080e25fc1cdeaf58a63f635f01d18bbf332f6670450cd743ef453a457c2fc38752b26f22a11b08c668b9671fe6c7ab128f2a53f75fac63627e812af5ff45f6dec9b8aa657bec4bdc9f27dda5d97b3589a54bb0df4fe594a8e27f56c0333a6e3beecb9515188cb439d8eb03d8d15b53ec1e398739e7b620867cc85eccf95cd676ccdef327f4d720dc760bdb1201fcbeae08680e49dc8bb799f867164fa0f2993caf0fe714ccd8436751325cb0b5e4b1ad277922a7498e77c443e01b28feccae55d7072a33b88d5e9b3dae4feca39d3ca7bab0572ee81f11eca4abfb4723f89e33ea00b08d19da8fc3881703e37b89c14461a9b81eb76f6b1cf03445a4509dae8be28dd0965b5b280f9ab6f712f88b735511e73cd75d68743b80765fa9beb08bd6c0206cae34d73cc25389f53aae3d7fb155466899bd615cb318b0335db680c90c6c8d965638be26cd78ae4d6b0a0fe797b4d313d89a180f4c95b79ec108bec539a570c87f87dc7072ce3cc21b253e9822f9a62bcd8ef69f55891d57b3a58a7438bf27a317cc21bfc912a573ed19ae15b0e6ba0cdff51262e4f966c0ce3445f02d579add784e38779db09dd50416e7acb50eaadb60740e20aceff01ce80ad41f52a02b1ad02a7016973c17b9b21dc62f8ed95891dc91d834cf3501aa41417da3d2eed43ec62aef4f8f430038af2b5295cf65f19e17e679c694c3bebef18158cc1f5038c7c25e4d20f2831115886f6a21b757f1f92fcc4dbf8d5e5e96fd9d4d15daad27cf7fbced4f2f397f4118bf48e2b0436dc503fc6605727ecfc7d4171b5c1b5c0d183700bde78c18f610686ec8fd0e6dadf6421bb19411b053121ff4351af171c3df39c857f7c2feacfae28006bd8d6a868698233cb40303f8378cb32a009eebee30f6b834c3bf8bb8c56b8c6fe7f098647546299c8da16f71db1c9c8d976be06cec74ae1d5844ae6ac2f6403e6a5d3822776eadd45d78e7d6ba736b1df197eedc5abf35b756e7b0bf8d78e20fe16443bf61d67a7ecbe255563f93a5cf636ebc2a19fb7baf761ef3cea224b77c53914096fb24c605c6f5faa10d62d0c2ff6ab24855f0b1cbf9d6d57d6a682b65e3c6c8663a634ea5edb4dbc104867e2ebb363cd157dd2d7855b0cd5a538e1ede9d3b5d16a01d3d501501f5f59f154b8db1c9432cf29da60cd0de19194c533340f5f0844bb9b583f786aa0c6c9debd21a8e2986e3f30d0e5013d2576a725280cf158933429bc69502945b9107a15f1068f216ea619af808991c17ae0f9af43ea44e2077dd133503316e7fe817d01285e3b3195c5aaf6f876b62d2684d299deb523ce738963b46f16868df993498eaf216f13be33a311698d83f8b7c9378ef10d636f4d5e0f71750e6e0b3e07e66eebf77e4972acea7ac5520bed652cfbbeb8edc8d9fb47621b5f6fcd138cfbe8d5bc227b8a27f82380e4ad42854dfab887733b4954bd6b01cb4114ad6321f8da5a4d72b2fae92b0634bc456f69eb7c7a5766abd4095b87df998fd69f17aac6be31a11cc7773aaef52a5c6bd422d7b8938cdfe596784b5a53c1dd42fe3aef0734c8d8fc40bf6cf77518cf6505f6ecee7b23dbae93d3f850b07c728979fc5ce1f27ee5d788f8ea14d52319f966befa3fb17dfcd16bce33bf1598477bbaef453773efc1c1c5b953aa56b728114ad0bc61341672f8c91225b30b237a04dcc811dca5b27ec658cdf7059ccd1ba6a242c0e50f5c4dd716cf63c4c3d12dfc57819331ddab05cb7c573dd95d66157aaa2f9dac7709b8d7565b848d6dc927525786943df64d885aacc6c556ecda03eb15ce05d931701da27134e9afd1c0994e9497b7559a5ebd95c89d614a165710eb4d1a1ae2678dddfae228fb8e742a56af03d3ba496f5e45c50412dfd65f0edc83a8436c367e995417240c63e70c10ad934876b75f36a0e5d1dca0bbe3fa33ac3e23e9c66d2e73f541750198bb8925d5ca4fb669a0f754115fea332f7f05bccb782ee5f0df7544e3519be7f6cebf0eea2bb3b9e83ebd2867e88ad2a7d3b94ad3807887a7067c81ee3c00afafaf07de83b6fad2c97d7bb410fc1cfe9a32d718e6f06a86e067364e1f160dfbf67f906b7b15517f71ce8b2b582ef8ffc770eaf89453bc0488f1fd7e1c8e21a8ea76a6d7305dbe1641b22794e8778cca8f6353cabd7dc97446ddf0ada2ad0d6d2235e36cc53426c324697b78bdc1c2ff62fd019e37bd65c931f537b426a84d03e6b9d8a7e4749fba6949db3af732ecac757fa7e2918cb99b56ee7f0f4259ffb617c7d1f71de3e98c7afdc5d9b77163e532d8e2bfa517cae1efce224bfd9a971fff7e83953146b8f655a419c113ec1bc41768be9b642cc481fda39f8df4f73d59b41d971504c9b566dccc34c789719616d32fd14a7ed8fda6ba8e3bd49f0277fdcdc3f5f8d9063ba16b0ea8f7b53c847ac898fa7ce1e48a8cb5f65901bcbbb6a2cde630383793a3b167fef8dbaf746fdd37aa32cae1b68b454479ce5397937a98ae069cae931979fb3142f05c9230b009e4d4dd1d0bd46faa692f7649db1c082f9e2da2e631a63f2913866a02970af251adeb388cb38799f7fce5ea50fc54531e8d662326a626e02fcb71ae2dbe2469345a833de434c7e3cd633f081c9bf5557da45fd4abdc47b7a89f7f4fab6aa205f9f9c0d11901e20549b427abe30a603fefdc6a0c12ac491c4b5eac967a7bf937a17c18dd0e54724ab505e4cb7bd2813abb928e736c3029586775adfc6fc1024df17d7bd7fbaf5bbc5fa9514de502c9f9f09a7e1250763e8fc1ae45106bb68caee2c85dd188c90e434bcfd1ae459e66e8cfdcad3e677af53b8449d82fd39fa35eef550f77aa87b3dd427d63367d443256d9aa67f83718fe7d0b64ad9e41d7694c817573b9f45b88639f5d2285ed013d646874dfa22b6eacda00cef32bd0537121b41be5960d09b944dcd7713f5ed47eac42bcffb13c64f74b9f56e3002b485e01aed5277711d983399f7234e8cc81638dde7945e84979ae32582e18a6bd363d7a6dba534a56f0f12f645d48f83c755570d4c912eb40ff465666ce53d5b657bb3b6cabefd7f112c3b9e4b3f97ef894db3c7ae4d6f88fa3d3e0b965d2146ec89f3bbf7697e6c9f66d27f2179ab7d6ca429a9cbc098337f0e28a477f3ce6be9b35afa9ce69ed1e4fd529bfd12ad13c24ce2006506698e991be9e17c4ed8d9f6383197442c23af2f30699fffeef6896372ddb0ffeefaf1f01958a9743b30b936c2a73303f65955584775c1e24cbeeaf16056228f78d19a8ba373b9db28771be56ea3dc6d940bda28dd8d1af59c373f4b9d494a2f666306e7f69d15dde1a977deb89d72687d0ec75492f280f28fbed5eba76b552a9cdb1267365c87b8eee96d2f0f79196ee9d8065b6a04ab2cba9fdefcc0a0dbd4cf91d0d2947e0d764bcace7ed164cd375c50e5ceb9119be5e03c6edd5e39a4eb979a327434ae4ba9fbb594b9f6cbb9f58da82e8611a8748caf394baee9e7c33148c52bebae854debec4fb77682a3d28ba52177298b938213f1f80ee55d8ed91f112f2ac6288aeaf60be53323bbbf3405ec727b423d11aec1bbc5b503bee76c5465382f3a17a9f8c01ecf365a4f78f72eb40efb6842bdf24c4d071c98e5f58e867339738e491f77a9d352cbcce2f386f52ff216a8cc706d4ee3b1159c9394dfbc573b8cf488e66bf2769658af273d93e3267ab6496a4c4ff4e94be8a1ebd7730af0dda63748c5e9f917828baa9ccb11b65dabf270b71f7f4a3ddfd63c616d8c5807ce4d876730d1cf53771dda88ec4b2a075370e7be716d47ebf5f7624f69bb87754db7bde4b92eb46de69ac2a7fafe6abbb3f36bdee7f0ae3c1233cdd5179622f8af4ac2e6fd480c3cc4212d2c74b9f5eb0a7e0a7e6e889b95e463c0bd99e4cc4abb34ae56427ea08cc8add92bdd0e782ea18338807adc8c80f5c373a8cb2d822d0676e8191cd26d702c55ea3faee9f7f0502e4c5c2b54149fbda535fb7c187e6ebdf9e74c8ef6744c0fa2d7510f7452df13ec1595eeae500f33c25fc1187eaafc68935a75b406086f8f01bbb2b1b98be234e4e4aa51dd2496d5594a3e3b212e9ee818538417be511581c8319c27e629c03227cdf89ed8329992b54eb7d76777692cee7b0cfb1ec3bec7b0eb8e61573ef797e9c9e46f0777fd200f671a47b589f4f9645406833e33ce1231906bc663a21e14397907dd3046e79d37f4ce1b7ae70dbdf386563b8f0535e2711ce6d2d8f88311db2ce82b4738e29938d0adf8eb07d724c2382cc0c8c79887e9f85d157becdcdce411b90cf97a8ed5fc1de299fb889abf1063ec5cec8631c13288f64660fab6493b6bd31b2c78ce691a7277f5aa084095870ec6374577ed4dca6688a997c06e4d9e27cf0c58c2d3b4b1f59eb454e5c7a5e94a8ec67511f62bc6acab11bbb553a13655413a3b176bf84664727c027659810f2b3a1627790623b4227f4f1692fe5d13f508d0e334074734960a7db5d7ee9fd95f9f08a70971f5d26d68bb846b304df6d25a8ab0311811a098506f4f9e2f1b9becec613f1cea758bf271d09e3464844d1820fb47e997e7c42cffbed47b4d5742fa98c4685378a36530fed27b5ac86bb933688db2e86e909b9b289e4f591eaddcb99d8285979ed3d31f03b9d5e27be25af3868caa08e0b5c3ae4d8ef061ba661c1fc5b85faeae084b34cfb7cdda7c2effbe13b0f2aacb64c179cd707c96c1623dc837aa439fa16739a63b2ec50b7a4c763445a07559ccb5658b9f57712dd2733b751fa2fd309f5b2cdf1381e9697e22d7b25495996df684b5e582993662d9f10bd8411bee9f2a2b26d75ee8b2d82ac5777bec593d61add2d2cedcc7c929d61145fcb61e1b18b408b49e0475d6259eb750e5c74b9c07cf92c14c2dcaf316afdb6de852ce6a227f0dda482316e334c924aee2c6d84cffd8f3c00c1db80ea69b1fbbad282bf0b9be16c61b8f9db1b0ae3a6d131cc55029c3039ea8d339e49b1eb25f4eae9b8dd6c99356bad26d267cd6548d6c865b631971485da2dea9880bae6c7d572fe648b974fd53ba06ba8e1c77e27de771d2e1fc0fc68a5a6b53764df05813fb3adc611e8b36dca3647da4af29fdda31ecf2fa9b2e348f5bac37bee796efb9e57b6ef99e5bbea5dcb29fc1c55866eebfcf9663ce994fa2deeb1673ccc7fa27304ece32598b76cbbcf5773cb53b9eda1d4fed86f1d4dc4f834592ec89f9909c79d23fb9155ec941ba47379757fe94b9ddf3e6e7c9e729bc6b85bca75cead99e19b0734b6e3ac6b419687277a6623e75348e1b95cb1457d92973ba851e73fe40ac2c757ee42c764b33f3f72598a4fbcaed442dfc4293450a9ecb498f752cce3ed556cfef31700130b841fcec199b1dfbb9bd92e97ec883988597e9093d828b587a1d92f1ceebc412438cca26e62448caf2b496fe99102353d87bff193c5843dc4708e019361833a74e82cdc6e55a8998c77e6f15f271b6bb0fe8ab39b83e21ef1bea1d52fab6ceb5999c7a091bdda969fd1761989b18b31f58983324aa8136831bedb789ce75266655aec7e660ed64c99c5be99ecb22b9df8fc35dc2977bb133e7c036196903757ec8cff0497cb93d9e82b0d6f2c4f9dd6ba02f50039d778f1cf24b55babb7a959b405350ae8ed4ec3571ee0eead68f8e751dc2a5ba2497f7b175a8817b4a951fed37590267f2f084772a83b98d4560f5304762644784fc31f15d1af2c750d97adbfaefd2ee8a7f41fb10e63d5ea25eea9e85fa6ce17e9841f61e641dd31d27748d3443f85aa7d525def37af7bc5ee118ef79bd3d5d77cfebfdae79bdd89f015aa719f546e1ef56ceeb6d6bc8eb857a3408730d2531af6ec2e748f6145e84f7ebd4fccaadf17ea5726a586f9eda477ad79b1f8b171b625f7d765ca671388f6e8ce7550b8e2cf4139ae2f360bcb155ba4ba9f276ad052856b631ddb6abcb5b28f781c168be96f4b91358465a27b69d79142b159b6a5c2790c1f8ba917e254078e247ec28e28c1f65f905884dd54bca08e6bc34a6eccf3125b26f1dd4dbe4185cdbc373670383d67c03ae11e92348f43925d69f60e4903532181efa1b89f82c9bc6f8bb91fc43458cdb63777e8df1e6e6545590ac8e5263f85c9c41cf315e85e0985086ba69bed54f8e71bb36dc6deb55497296dd64bd5759fffa76eb8aeefe75e1dceefef58dda899d7fbc7f7df747effee8dd1fbd657f3493efd1e1f87b68bd3056c0acf58ceab23ed2d74c8f315dc738ad87632db34ea18f08edf3b531cde05b27ec5b52b740917cd4dc60501fde541b415b405c5832ca3fcde1fb6ea50eadda7a17fb9c7b6b91c09045d810722bec4bcbf859ec4e5306618ffb4ee7da4d831bd8aa3bb651dd524f82e7cc86eb7d4b9830b778762e5df32b156049a5b05ebca1a3cb2d645f1ab4f0bf9a2c52378249945beb7bc69ceac29fb60fd7a3277b5c6e4f06933562c9f5af8b772a8ef5a5f6f78670b2c8f85ed2f2578d1fb3708eb780916e17d7bea6b1b45f95f49df12ab757466fb634131ce717aa05ce8bdd94ad7b4df2a55fa0ee95d45c856b12d657edd729ce0d1a14603b16fa7a1bd36defb4377f9ec76d7330d6a5407f54047fba7650802b50e8d79a3df8fef157fdb95fc0c5727cbc62d17e1c1f6ff3f4f1aaa78e77bfbeade43b2d7973ea3bd7c6a96be4b179383425bf4bf006736ade55da59ebb298e146c0f27d24f63eefef6345a463b92376a92b0ed09ea9a9d5139a7b77da213f2e920db04258314a3fefcc5e228730efefd7a57fce7904bfc73cc4fdbccde79cc76f723ec4dfe37c6c72eee794edc3734d7fc249b39f2381323d690f6fee50bd757837688a064c0f503aca65377d0371f38caf3627d31def7377a6e368b62183474d1eb4796f1858fbfdaddf92f740d55876614c39bfcf38bc0797ba629f12070fbfef14d55e67eeb38c3f14dbc1c3c3e35b631fa5e5182fe24255c45dfedd797e2db7416f8eed5f3eee54016e78eebb0ec53e0be4d8e07238f90e60965f50a617fa65f4e6bbceb511f662c53c4991df7d447f49b4a6082d8b737cc33597badc5ae8720b9c828711ed01bd6f67563823cd3c5b93f87c07fc9244cdc6f8b0ae331896e03c6c9f0dae9bc55dbc1c0797272d8ee9eef37bc00e621d14ecf9d6ffa81e100be36cdfa4eeb07afc47e90eca3c66abe4ca3c390fa3e3b9ce945c14722b9cb97e5c49dc99939ebd7fef86eb4ff4e595e4d5be889d72c4ae00962b05136538d7e596f72a139b72742dbd349c7d7a9b92ac67b84f45efcaeedd91dc65cd776fd39f1caa6f382c333b9393de75b9bb38e7ae568b78a873eeda225d487e8fe77a28de88e79bd57347b864c26754b3ef0be36ec4bec9bdf3f7ebf58ae34a19f94b3cb7e2fcaea7c30be4667b96bcd0ed5901ae74c998a9b43ce7fdfa39ef467c04ed95968fb35d72fcfb364285b5df59f299df57f2f1aa4a7edf3764b3f23dbaa733c33b149f812377cdcb6dfaf947f7595c6b5c3e0f40c9b506c659e764df8fadf0eee93967cc64868141b7bcf39e219d39062927cf51182bb9286fb276dc3fb984cd971b4bba5d5f36d29d9f30c671c4ce3a7a165fcaebcc4e5eed8ed43b3cbef626ac691cd05bc764ae164b863ae9be7f9f77fffccbf86d97b6398fe828193cd6e5a3dcb40e75f9dbb485ee398f52b12064d35ce4fcdda06c7a62d3bc4cfefa26f526f47b4e8839e77332ca5baaa00627bff69d11de4be0a43a8607a4f16c76ad35706ef3eeb8997845be8db4ffce6a6762fffb173b1f79f6cc45b0aacbdeab31c6ea1ceedd65f46e2666e8891b4d167d55decf37d71ccb3d1e9b925b3b4d117274c311bfb54adc314fb7c1ef7b838be93793eb06aa4c911aef7daed982baef4bdc4b796723eeed0b39c3b3f7fcf1ef16db08c7bf8b647b00ed911c1cd8dcfe0c281fd3683df63105c6fbfb9ae2228bcfd54c558640e2c0521b35195d19ce5f95a16fc8d257836e8113f0f2f6ebb301ea05447f8bdfc5a277a5fb9106b605ffa6f86bc31d5f0adf2dd014c411fb4ef8e4101601b90f13e3c9b53336d046d41421c11bc7af7e3407ab1f81a3ffb7bbf8f52a51ab1f41ee7d9a7eef7bea3ecde3723bb447c090bbbe710266c37ebf548b35a62c791eeb68dc108e7357c35a1761b4e35a7adaf12d4e7a33b92ebcf723ce3f956e2f0caebb31e9fd3829c63f60e1f900a69be0939c3efe1a741e7f5d80df7f7f3d662d00e5541db1530dc9066f9b5c97b2382940f82a97efdf8a64705fa70b00f3108bc9bd0af53dc6ff909277e23e0f72a28e24c8a92d3a49bef8ae341abd1def873dd2037b948359955b2d4912847cfc706bae2b4330665807f59684b201ef0b6eeb983d71bffea8f0cc0ba6d95bf6ff2b2dc9ffb7b31fcdcd52e9b4ac1feff3d58f3ceee98afd4839eb1861a510cce8771dda0691de84f368aff81e8bfa1887b3bedddfcd1ec56b60d5c4676c3f6f93c7877980fb926096246533ae8338840975ae3ca67b8d16082789b66d55e9c3b31c68f2167e9ed646ac349e6d2e83c59d399f3c2738d83fc33a6822c171e5de3b8cce014a93c48d2a8b202187ef06bd5da80abbcbb585aae883f7708fc4b926379d9ff6fc7f1a0f0d5fff35f1968defffd7f839b31bdf1b8d8786a8bb13f8d3df7f3f34ece9d25919ff36e7ee176b6ece26bfbecc17a60e66d3e5f72f7f8e3a4faf5fb62ef8b2309d89abe33ffde5ff9aff770a267fe15ffe7bbbb0e0d3a7de7fe7f0ffd664a94fc102fee8e1f7147eeba1b198ee268def4daa457f7b7c68b8736bd2f8fec87c453ffeb59ca2afd3144dfd8ba2ff45b5de9a8fdfe9f677eaebbfbf3efea7f5adf9f8b5fd07d5fc4e518d87c674f19735fdd5f8fe5f1d2c260f8d458046f03c5937be7f7dfccf7fe88706efcd1bdfdbd4e3d7c7e67f1e1a22987ab3c6f7e643a38fdeca3034f5f8d0184f2d381e8a7a6870f18fca5f7ff9ba4535be530f8da1059f493d3446a9b1b3608627f348b5bfc27fcecdd9a2f19da6be3d349e9653178e6634311bdf9bad6f549b6a338f5f1f1ae202fee61bfd9fd63786facfe3df0f8dfee18f46f3fefba1d129ff51e5afbf56de6a31b11adfff3fea817aa0fedfdf70ef9dc92fb44870dd1a5f9cb93bf9b200ab99be98cefef55fbafdc5d297fa975f13cbd1975fece9f28bb332b242b227238d8706effaf35fcb9ffad249895bf4f7e7b989fff0a6ffb2274bfcf3703e273ff5f5a5e934be7b2b001e1aa3a50e26d1aea27f0d27fa62eee1cf72f3ee144c16e1a7f19ba37f3e4ffce8e7b7c96299f934fc55e61bfdb9b582effbbf06197ef1f140239d7a8defcb5fabc9c3598b8826d29f5ba7ef823dffb73bb7d073a4c9afc514ad4ff3df4d069d711fcd25540007a744f6aac2d1fffba10147d8f8def8f9dc7e34e48d6db95260d2507952d3fee8113aced0495d23c0bb1d3595a421f7fa664f7fee1e7f90cb035d84ea887d34e4edcadcf98fe60e3a4443ca7c9eaf5f198bb18216d30f5a6bd335d7fdf7a74d7fd456dfc6db3795768021bfec019b4fb8e6c2f0fa5f8db7c473687167bafd95e1829dd5697906a3ae0dafbf260ef9da90254a55c2b17cdbbee600a647cf4d38f19a0b165a85f7a035c91a0e3d676970addd9f99600e7424adde70f3e7f4db5a65c4400d5a2b5d11a957d75a5bd3f6ca0cda24f0953fdec8f17f4160542f9aac3996bca57e8e84ad257717a811571eec7dcfe2ba81464b1472d2157c699d3b96ac5cbcbe3f2d0d192ca083011dd3a831edb06170b0d9fb2747451760d8e01d02328ec3bd1ab1a2a60c9de8a2ecb497b10ce682757d33defc1d91b5653c8f4738cf55bfd35ceaf2165ed4d0c90d32cfa33545d8e51937f0993ad70eac10202cb9f718f410018698b4b336bd416ed3399a6f0404940fb4673eb7d82490a2c6493b5db65698c808939760621e40c0420608905e738167c5a4ed595077d774db4b9e6b87c4f64b8311100994c57517066ded5e3bac030d5a2d4804066829d06569878961da9b8814deebdb06a341c39782ebf63a65c73a37b62daebd31e4f6ceeab089e40308c18842d0c8185cb3eb886f1d36dc2b5b57fa680d5040f7ad157d0e37d7a3a28d3f08b0c966cf50a68bd716af7b7b6d3d679ee9096b8319ec1b9519793d60a81705ec96506635ae4ba93590968f7bd2d4e0c03b31926da41b656814bf9403b1c903af0121f029dc7fb022cf208674776a301215824c59b2b0d065d149c9a4a239babc8d0987a00c4524022d4a95c10a818372b1915f3749c2e17543603403d36dd3ba8cce1e7a9fe936a379aa6ebb890179c6b69979962ab7663cd7a555192c124444f05c86e4102b8bebfa868b8065e34047e74689887202e2f82ef5295d192eb4513982851393cce8ccfee9b14dd5ddfa26ed1490c25cf87deed63199c1d290dbb3f0eedd4bc8ef0178f12727b3c87a4677504992a7d38a66f0fd12d946d13d599228e3bc751daed5a0e997dac37381f8137345499c9adf591be140729e6e3bef3c5ef79d5c37b07ab33a002713fa400026c3ae0d4ff455770b5e15d631bd61ebc3c996f2ce7b14e88d000f4bac15bfcd0ba2f35502e909bba304686c68eb6649959284d31701cb3d15e4f1d6c07293c09e98b8ed6492f16309a0b4bdfb01c46d893beaf381571e2386c3eb141135474df0b14db8345d696772ed954983a9c18d9744e72d755a6a99d92444d818246f81ca0ca1cff568c23d7dce5dcf00faed06dddae98878b7b95115a10a896c60d05b50923cb66241a3e0a8f462096d7f8b93821a08dc3aaa2cfe82fa16253dce20461d205f638b40bcb0df82084efdf06c417f1afa2a705f0d460a543a4dee8048418f01e61e01c92d0d8cfbbc9dfe9ca1b5b6c3b54e00b59d3f8fcfe553bceb4a44cc5bb3ed14ade1d9b64c6da01472eb570de7b20fdf53f2fecf07c8cf0376e5b66bb807984004da466d0a918584c4246ff5c604dea0bdbe8b4958f3007c0dae0de5151397b8d2d260860001d412f29aab904f9c0b6444e4bb4cc3365faa10b014e950c25697027dd44c26810b8bd5cb1041942681c82380709d96c94981c5498f58175c16f419fb7ca17cc73a17c978eadf5aa0ca16feb9e3382a336caaf266c173ad35d479918cf584b5ee4aef1627cd7e94380f15eddf93809d7528938a40698a43a5cef55b7c76aebd0e172fb42820053a721e024ddedc1c50eed8951644af5c40a6c9bf65540c83fc170beba4b5368d8a37a01f3ed795a788fc09156a7933027c0cf5cc62c57787735de9db2add5df19c00780efe1fac341c3b8576721423c5f263edf81edb343d766dd2e35b01da1d45734e10d3dfd01a959dd395c1a49b40e380f3aaa0b3913e23a8d914a49b4d6b3e236fb234d3e517bc4f17008d0e89735444b28c721d4b4d1efaea08df8b891c08b2d9e0de27eccddb20879be13d237b159347e3fb66aa297d22aba9cf2500cea10c2f81d649db7075e9ea4b0218a2bc9622ce338d75476d94a3b6499e4d02706e43a5498ead8b8ac07716d75d9ae710b5a13d81e31ce39c14fcbd3c867be59ba9bc13cba84a3fcc63ed744e9a7d743e0e15862b22a5cacd4d04b07fe67c2e51145b06c88c14f92240f69c269c786d1407fe7d972a50ccb3dbb92ea54968ae4b8b0694de6952badc0413b79d0591b2f78a0ec708d43f1d2fbb245024d7dd599de6d2a03139845603b9e11b7a279b78278bd6c364868ea13c9d9ef79eedcb16d46d46fa7da18c96b1472e4982d8571591e2b9e65ac3c407648cb19e20b648d5395cde5fcd274b2c96c7f47a80490ffe5d4c159de7c4890e37cf140220e2c2684426c1c5f27de1fb23cee35e3f36f392d07b710dd3e9b11a5ccf13e584637b33d69d0352c3406a166a8d93267cc79e064c2c27a1ad527decb5c5468be52efd2ce911fe9d8c3fb789a728d678e0deb920c841783f456b7f7dfb68d67e1b50dd7e7abf4fd5f1e459488f4a8bc433ebd6e7614d5cf2cc223b27ac8334e4f64c4bd6e9966972bacb6b465ea37a93abdb25c3848e398530ab208f95b46bfd14f151afdb54e56d68034d272344d09dfe0c3a03b87e32e1ebbe1bf410fc2c434a7e2ddd9d26294a12cd26628369222353911c23b47d38a1456223a9cfe0b8cbe73c2787e31c3931162f8cadec37711fab77284bb85c4a6767ffcbf571c398428578e4413d1ec5c41204c4713c424f910d6e6c551ece500e3fd8d89adc747412573698e11cca0daed73dadd684af566f629f5a73c2135f5922e718dbfbd75d87caf981f2e4aa7b67e8587d4a248b9eb4c23e731318b2004c245bd2aee4793aebfde9711c68323c14e32c96737c8779d2528bebf9a3866c8d6bfb45356147ce6eb95ab1c3e3aa12273fb8e6a8cfe165e86b34a0547963bf1122c42c71dd8f97e1cfd168f61fa4df46ac6f06ec86e464a18e5bf03dd127b9591c3397b70b83b1763ca7ad311928dc1b894639245ab5d511eb5af276c17382afba5bdfa0ad4055d8b92ef76dd395de0d464071223347871f5de76a355c856b53bab62b779fc2d84d0b8e21a8f4fd434dc565be57e50cc7c4766574491e6043d1ba15e6f012cf4bc6173e3246b031dd760ef9cfc5e30303f81e4d11a849c93c47811d8af550023c047d7fb4b193b689d64139dfbc3e87a827e9b583c8c9a9d70eea4722750b35dba2a8c78505a6376c256aadae3fc77f825deaa2ff7f0ebb7486c67a49bb34bcc35aa8c729ec9352848dc188289fab75581fc54051cd1aaaa5897368bd582e4319c2351384189c6b4f511d4499f352a0abcbe44c2b9da7fd7599c6eb8afcba88b07722a37312f64d0526d786773baa61d46514074079714b119339d34da4c3461b543f6de17315127faf55d7072a33a85a4b5dfdcecd01722963eb5b722bec335baaae14a07b43e91faf1939fffd69bd7000d4e56d26fe09cf44151b93e89015f40f4c97e42f63d08c5f9a02186857edd5481ffbaf7c1dc0d1399fe267e5cff5e90f491143fdbf09fb03715d20d859a8ae0ec59c13f37eb4259c9f84ff511385f555babb307a3324e321f13f3ef74fb62e3f4639768bebce5465e8a0dac35ed89339b6755a6a59743bd07a7d1bea2c7246327d844f27d8f9d5fdbddc75aae603169cc7b44c55f97e8e0d9c0021da3aaa9b26ee2a2fe737e847714ed390bbab574500aa4c0875393247ec07657a4e70fe6dd243ba32db4b5d617f4eb8177264adca7d9f2363695ff9727a6b673002857a2a7e133941bdd90848aa15822da5e2c4af1d96d1f15d1cdac0505f0155117da8ab4cba1d1072375b959b6bc335a39891c948ef7a877c4fe9277458babffb1fe957778ec7750c59a274aefd5bc99ac988c064c490c410589cb3d6eef752f1bde489700f9bbf8d9d847c99704ec82672c8dd1318f466c5bfa0bb094cb82ef2535f3bd006c2fa17d9fd1d4b813eb8d6131c8b7ef4784e44b92dc31da23a396d04efb52e95c495807e37cf398e19b0534d96567ccff22dce99996e9709b1294cda595bf276c673ad35cf6dd7866b41ff61aa8da01f26dde37fbf71fc8f3f5ccb8f3009708eb4bc3f54590757ebc7b60b627a42f2ee3ea12fdb2ea8fd91c21ed874dea810bb24f4bb6f3c16919b6b3e7dae55eddf0ab66e78472580a70ff52ee402541b5ebf7cbd7de67915ee91d2f5f7d1dcf26a3993b86597936316c722a51d01350e31d4923139f4fc5bcff566d6278c53a3b19b046037ac8b48c6d670dcba0228f207c9aa4a880f4af7507db0bc12a2867aea1818dec6eb23266b7613fd16c89e7274b985be6b903c6a853ea9686d4af54ba5d7fe145be79bfadec24437bb12f50ba7cfff7a31e0e33d5189e725722bf9bd1335d5c0a5e65543bd66ea7d67d46a86f9b7761893d8a83208b05d6fdb3179d2c6d614676370dd15ea91f366768407583b8e4376ee615d1b9af79af87bb6c9757d731ae6196322189e931e4d6eeb186e973218a185fbe21166509db5fa59c292fdfb6c3f9f1d843841fbd865fbe441fdc3243c95ea874adb90f9bdb211864f951e40be284f2e0f67ba42c8483ad02f6d1299115a3c028dc7f92c5511509da8ae0c8131aa98cbab603b9f6437a3fc782477910c9f8adb54c5fea910a339de8fb52f57473112c65de1e7981a1f26bbca91ef5a889b8acfe549b9f85beb5b47efbf402f6e547bed81844d11f548137c4e80ea22d07ee2fab2c8ef4358819c1458bdd902c9b33748d54886764615dfe19a780ce1ba117baabefa83cb13ae14fb128708996e50964fa9ff3f24d312c1f1cad6bb5fd017b8266642365e85fb794f9fd38d601cb4761992c7433553f5e0dbcc12718f0be8d24ab1869bc03048cf3fc2a349c451a2be99e4fd80f7f476f0333c920bb935f90224475e2d569717a313a25c4e882b91ccff90bc8e8ec80a454a5304df6486be5ac69fab43cee27540ba6c24b76618073dc2ff087dd6443cd9714cb7fb6e7152a02b22a5cba57cba4bc9db05c98409d66e0db5cb180bf3696e3082a7ca2d7f12d66a20cc3868a7886b633a3b2bc690c1f6b4d15da420fb07a01ca4c2db260d561a232d5485b77fa0beb376a0d1dd95aef811ef823965379a22ec0cfad1c73613223c032a33f42d776cffe09a4da337f4a1bf128dddebfb35f79d56585312bbe8a5b196797c97a35a4c4d06d82e44bd1856d3e0ba01df711cb41eaee5182ef81ac5ed18de8676b549b7573f3017458c6da96880ef384b4bde523a94cf51b896ad5d19bcaf4b6177e4e135a665bc14563d59c39af1c619c12b197bf97458eaa97badee75bd1e8efb3d76768f9ddd6367371b3b035912ff3f07148ea77d9c7f97ad653813df11482b1dde79997ad062ce1e12ff79be8dd85736ce82fcbdeee973fa8c5875d89eab07e3628c71efed71021bf90caca1518cbf2bed78ee25c501a6c63d8b04af829d69b2e61bae84e2b7496c8b2cef157e46ed982ec4b66647695c617407eccd957008d81a27b9badc02282e3b6513fc619faa5f30d28d1f8af712dbde359c05eccb9c878b1e8e7763636cbf50378954967bad6e5926be6cc20fac34d65bcc551fe030c27b49f6b61c3fcf795c5f294ec93afc36e81fd638bf3016b2d4f3f960aec70de5b603ed0338c6626c957adf4b705c6ae6df62e71867f1b8dc56e6cb2a96a9a6e9d63ecfc0609e6a96df74bd56bdef4638e457796798af8d6bb3caf1381ef4614bf60f56c20ac8cd7b247dfa8ab59fb971e793b9c2aad47696afeb3cada693e0e147fc70b83ef9d4384e955ae52a75cac76de07dbdcb086b4b792a3e27801dbd35c5ee11bd9e23df4579f5231c6599cf65f199f98cad7d65dea1b599ce415e0bf7339d63390747517eb473f31ddc1668888328cc693ccda1eec5fe5998abb839dbfc6726b712d9e845791783933c54274b725b7cc75919ccc0564771ce0af500a37a545c77a132089303af77f89ecfc52506e514cb492d1cc5e21cf78dd76663a3f9d56f5f77671aca0996e131bde47ba5a52a8345cd36e74647dcf9f5daf49622d43e4f844756ef3b5331999adf8db9f3aef1ce3bdfef9deff7cef77b9b7cbf15f94de2b8601a0be65af54ea4e605fa4da7f478e79ebf3d4c708c0be4c4f1dca739c17071109fec94fd399e89c2b08330aa508da43a62e1737d8d6e3916aa9917df75a8efcae4df2f8bdb88c70c75490186f8d5e7fb79723217c016ff1c7de4d2093c6ea9e7edf59084f59c719d7382d32f8b9de468dc30d01471f7da61e19def1b697c428ce3765a0cc7aeb93f17cbe35e5deb55d6e1dea79be65609f31657cf5dbe6563217bbaf4d47ada7d4e068451985f33db4475b59823169834f00cb74b216e445a9c6b25f1192eca017d745d0edf3179f197fb9d72bf53ee77cafd4ef9903bc513709ce3fabecb28e27c251cb767d6c5ac111eb4c2db16f7cd56e5471bf1652a42e86b6f26a310572ec909b78f0da173dd9dde615d83e1119716d4e521d76acd71fbbc350a317d36068d7a920384f78bee4b2443411837317bb390c722c575ba8f21e138266d136c600d982e3c4b629443f954bd142e9acbd971e6437931fe302edc1c8e8d47b60a8ee9998ae49bae94ac0dcec90548813e6a06893ac08fab19769d16ea6787f28462cec9dac473f9e1ff7ff6deb43971645b1bfd2ff575d77bb610a677d311f783858d90caa60b301af2c68d1d1a7c2440029d62146f9cff7e2357666a4280c420436d3e747455d920e5b4720dcf7a9eeb6bfddf02ced800be7699c336087265be12927d94e831bdf23c54854d3e721ea8ae798de89adf5a7fea8e86f9b9fb7b57dbdf4c6ac70f327afc3cf6eb65cfe29b352bc2467f79ff7d37a945cfee9cb335ebabe27fb84a3e77a78fe35adaee34e7280097e8193e9108da552d778e54db355b13da774f7c20c68d6bfbdec456dbf32fc20a3b692e125433c5b5f383622c7e501b02fb8a68372e91e8f1860af6ef2e63e02fd6e20d5148f1c3d7f7efb39813a70c5f4f5e3cdc9f2a73b3f53ca3d894808e8bf8b839789d2fc6d894dcdbbbd8a5aafcee037b2fed03e1784a6d6c0f6817eee4d2682fdd7e2df74bda6ade5d59d31ec3ef5c3d279a7ade795a69807904ec15d50fa3df1dd96c6b24b87a5d5e99536f51f1be4ef51d24e2cfb2ef5c557fc7febd961e7f52d72fa56b44343a1bd31dec46b57a7f511eab025b2db0679d9b83b1ea7dd74ce6e02acec7f7584fc5368eb32cb1b9b5c5f65c12231cdaddf51b41afc8a886fdeaaa7b28c680ffac8227027cb46a7a8dcc7a97c3ff067d9f45b07ae7623dfdeeca561b9c359d9c36be43f895d661be3b12777e1db7dd2975911bae875c33eebec5ba47b17a47719dc1e3fa86c56b7ca575150fe91946f77e11aefdc37a6033932fae8b78962ed365f4989836dc0ac753715f6249fda53375974ed45b3a5567e988be92bdb2fc79114d78a76c6f59fefa9fab8fb759ff9cbc3a36df0c8d30ed7f95d1273a5397e8343da2537488caea0f95d01d3aa637544067a82a2e0f58e7377513987e05b9c949e43f43eefacc98778b6dad49f3e089bce4d7c70e21e4af93b16ea1777de46bcae56b74dee33e2bc8d3f4f073ced9ab3ce12eb4c5669df2364e91da9c5a7e7b6d881e8e2db0df3f25f30cb82ee83b225c41d199a95857a21bd89d8893f185f2537266dda67d8cb667f276a86bc20cfb9826c46536dc81047f57730db02b56ec0f6c1f7bbc744e92c6b4d7af1b8176e239f5a20fbc5e90c7ebc82bdbf7708c493475f039129b53b3ae6c4fdd3755daf1219973b6f7af3aaec779285b4f25b9b8371578b8aaa8a7b29ce40b70829d7e3e7a3467047b479d783d498431dccebe6779ce57782fb6ff4f7aefc7be2eebcb346be6b41f56e3cfd0679de5d3b0f7253847c817913c939bae055456677a31ebcad2eec88dc8ef2ef68e8fba52b99891e606afbf4ffb8467ea8cde10dabfff653e34797e847f22e3b93f3b798003ec8bb9170927d8f5eb9b437c0e2cd15d997e418c5fee7e8c794ecc29c95b4ba2dc90f0791715c2fb50007f7ac93b5f119539d2c83c26ec26b683637ce66db536429ae4e8d38963a77ff7feece661fc671ef694e0126f4f8f9bd5792ea55f1c69a32434bc624c66babf2e694fe792c86c6c52b30b78714fe34b2f6083f3d7e044ad6e8fe176c1d7bdee3c5c511b79e7bc284738d6e3bd48f2d4236181e0accbb0b7aced8935ad32cf4fbf07f6c7b02f3ea6bd9a657a0073f7f9c1fa8c0fb5aa32dfe79c5ba7397bbfe6cf1dd46d0cb1b9400381720745767bf9b3d55c971ca313dbee736b4ae5f6efce3c31bf74aa2c90269f5817db5b635d211f057bfa64ee700f0006d447be377eec8352fb6061f232f6697f937df0ea986a7364a8a0f944fc6311db40d9b34625ebf199f53bb52e9f59c7b2f5f9cc5e2c5da78f3f3bc57735becfbae5b001a5ee543257149f72c97af27eadd2e41a25e2b7afcc67019fdcf5e332653839233fe029830fd6a7cb2b23a9d30d00f756979c01f402cb4ba4f51c0bfaab12fd8b95710f29838f974863a4fcbbde477fcb9e5ed6afcdc7c21a8715e4b8d27be93c5d418a9f87bedb8ee29a2d2113e7559b5bd81d1bd37520bca552a78f63f61af0c4667ff73ef6eeedf4664de31ed04ab917cec3f084097e02d7aa77573aef51ae1ac2abc034c291d685f319efbdded77129247ab013fda98eae75b726df0d740d74ce094f02e51ec7bf47d62bded355627e2ec38d80e7ba20b7e8fd71c38657d45ddcdf9701794a9dbb607fc443e3f1a1f1f8d078bc6d8dc743dc2e4f0fddc787ee6389f35715567ca66bdd5905bea5849f735e1fa9ecb13838e27a87facdaba3d7e586d5e9af505d762dd10df4509818aaed59f59e83786549f28bca44129b3cd43dd33e6a823f92705ee9ea666ad6e5c016dd421ce2978caf06627b6bbca47cd1c8cf8cb438087fd7d89ae2f78931c792d80f10af6ced9630456a03f26948ed39661d7984bb38114f74942dd9bfaf8cdbcc35457b65f91e6788857ac17e875a7072cc233c27545b6a63ab5e88d4dea1fc71e95c7129fda8bd367c778f5eb066dc455a7f66f23d820de0dd40c7cf1a08c44e88de1638567d8f476aefb66bc0f9f30458880f55e10cb13921380d7b66a8786cd13908ac5098204d0e6c5f995c950bb2757acfe2d9bd92a73f3ff51e97ea9d4caff9debacec7e0f575f13e96b8bd1a58fbc798ae358d045e573735fcae43ce15de3ea45a77b4576f60eff8f7d6a2bdaed41b70dbbf5ff2f56ace197ff7e335bce8f8275eaf3facbdbe7dbcf2073417f2f7f9a3fe521d4ede6fceabe0b019e2e79cc3c944b4a8195f7568f21b8ff091ca9e24b6b784a35b99907f8b34ac2baec3c82b33c608bd124d70ea0776e0678433d627394043b597d897827f23b905e81fbbab5cdfb41fd8e226872be4f5f2bc1d69dea50ab8347eeb3ce643e3eaa171f5d0b87a685c5d56e3aa7598230834217362e294f6c2a4f1f291e5d66b15f64f0afb2987fc956c1eef5c4e21456d0496a678590d1293d7c919a4daa6ccc73179f97f90dae56e842f28abf90531ef1963ba1c27d061ed83cbd6cdebc2ca9c7603dddf786f9ae05ad37ea3a21afadae471ac20cfd140e8313ff1ac7a7accb5cefccf2dd27ab076597e532b042e02aac7db004e665deb3986d8e611c97bb2f70b4cd02a26f8234b544272ae221f38e62707ce661c7be077d9e07b007f17678659bb4de29fcfce97d4f173e73d9147f59126435d278a3b78852339e40ccfeaf4dd617362f130a79c21b63949745ddb1f023ec0129b4b8bf74686ba09ecce84ea24089e45fc8028f689d70e38bd21aeb07c658ef71cfe2ebc9e997b1dea0b38e6bc3b2cc1949c33d0392c10633c74674f7ef6c3277ff8e40f9ffc3fd02727f730e8fb3936c12b86d8761b9aecc1bfc1bc91fcfbc7a4fb7796d7bdf4b92c7e268bf8430393df94ed71cc3b9743d89bc4272177738cf9c13e4d6085295f07ff1ef6736e85d373dfbc105f1d6c0acb41baaedd8acf22f6350ced3de5839894b7a30c0ee88630089ca1f52bc96b2ba2c79945f55cf6e0b16df21d9427a51f587561ae6b1347571b137c77dabe37a5e7a9e27c36c9ed26f8e9e8bc12ff1e89ded61237eee740704d1f6a0abca1dad7d415704cd57b426aaf294dfba1bd8b7b22fba12eaf6cedf9405e57e19126376cd1c53e35f67728dff59fd7e16c61d8cdebc78a2d5deb7add71efe4fdb8079b7e19de433a0f6c3fdd131e84ad61cff79680092d8f0b81bdc76a17ec4ecdf12f6a963f59a462cbdbe31510a16ff015f65539ccdf415b18ebac90fc11d47d1cdd57f0f33dec2f4a1ddbb54201cfcb0ae20fb1bd955e817f84efb6207f304203c13355d94322e0eb037324b8e479c047f58f945614cffd01dcec1f4f4ba9dd9fe17b10ff479e4fde87de977543ddcc73eb8dc44ff0492fa53d43ea53eafdf1f72151199b3c7e9f1be7399890774e6bca5c715d12f8b1b7913034000fe431dd2fa25d43f34d36efcdcd167c8f6bd541af187f4f943382f33310ea86a82c536b423146b0ce6aef16b4589dc3d85fa215f7a6dd972ef147527fee82fac467ebc1ddf479cbea0252ec00894d4628b245a9df4b9cc54d60fa0b7c0ec264df5169ec7209fcfe318dc6c4f725efd3afe4221b1b1a9d8351353cc0297ffdc4b8408fbf0772baf19e56407bc1d0fa33d0b14fe80f63bfdca07dbef8ef3f44b981f78eae36b6949b6699d0ee0dcd7a77fba625f2f28349d579f697686dc6716efd0bc75e954f7a11bd1e5b6c8788570af5855d3057cce2ebdf09833331f9f785919fbb2ba5e95c6a7c532134ebcf5fa9237d2f79bf6c0dfadc7c9f62fadec656878e91acf58f62dd5c9df0db310cdf4af7034faf97c0a817f4234afb0fe03764fbaec06f387d4c77a8991bd9beebe755e23b6a2470ba264f91767a8e857030c51a17a4ce2b7bf86c220db9668be83e48623788ee9fafba9353e325fda4493d0aaa4310220dafb5c2c33d4c7b8992f7fa5df097de10cfb325b6435de5aae02d772dfc4cad5f18e79417a30de17d6b1ef6afac50c0f71b8f6d9024be3aa6aa8c0db1bd34b4ee82ee1712af773cfc0e811e46f13cd3a5f7597fc28fce7b80fd36e8c9c3b6ab23afcc2239948be6c1d373447a3a13ff367d679cff1334c0e7b6e6e9bceb9abeb73569ae9cc46afd069e53437d8ff0dfd4bfc3e79df44e0cdced8f01cd8d10ec4b68f2ebbbf34b4db13d42eaba0abfad66f1ed69215ff4927c0c7c7369d5fba1ae7a4bbb55edb3515d0990a85c5aa3736c88cd60a76e5c7e3de83e3e3d3628e73f77f13b8d0badc1be5884e619f68ebf6a0ccd035ffbc0d7de07bed6399cc7eecef13d777b9c15e4bd2e10431ee2810e25913c07af1bf91dca2f70073c163d7ee35a3187cc55c65915ae443a9cff98204df04cbfbf7d2398cb1bdbab7dcf129525eabc3b85f3c9a9efdb8d3dcd3ac99d5a099f1d72a37ef3175b5f43c3cf6b7837621f5fd91a4922c4c2048fa23698e6f05ad764d754150e8fcb501bbcc92fc026daa21b58a140f418ee30c7c1fce84ae3c09130d755d9335fceea31589b627b8c5477658af09d1007e903616180adc0fb8cc4786fa4163c31b42efe4ca36a7e9461ea1c6c5cdd57e609ccd359e37860a018cf6fd7457c253a6cc97d9cc76b7ad27e8e35d295ad24b697a825789f1d7c4e3cdacb3174ac8e125a62738b281eced6ba1ee3134adada8a7379bda46ddce14fcddcef487ba7b843e5c91237d8b76435f7b5adc96bb38ec704e3af59fc90e5fa92f6f72a9cac92580b3e4565f2732073d654d9a94314c46e7bb6af849f5a7f86cfed9bea2d89ceee6eaeef082fdb8df9080f0eb6a43d7f70b0c9782c5bbb23e3f35b497d24f9bcb338d944f639e8398477a07fc7f6166a0e299eb6541e0e3ec321ad505c7f594dc1f4f899efc0e6896113a2bf23cd050e36ca13cdea3d2b13ea0fed00ee4ec81b2bdb227bf006eb27076bc079b92b186ba6ee5c84efe98b30b0a935973a7dcfaa17ac0916b1c19357877d8fd472bd4f5119db5adfd5fd8df76350e02c94b0c5256df2c9b63969a37be973cbceecceb9f9212a4f48edd66cb13d32c561007e09d44dbb29dec2ccf9fb6a7c27ebd58ab9e0f3e3976a38df7dbb067800e2eb5c1dffd64fd427cee3e71442f0373b44739cde71b4370bff0ce1e76cc1bff615c6d93c61b831525787bb7d9faf5a755dbd63abd857db04441f92e91c5432cedba91f1e8b4d3d61f051ebb68fd4d072ea3d25ea28978c6d093f5f05b12dc93364fc84337028de1289de18ef390bf81904cff26b01b6adf89e61790d5ab377494f72145b032784e537d728e6a3a84e8f94ccf9ce9d47f0a3971dd723874331293cfeb76e15f1c4077e27caff79866e13d303e933ee0c56e37574b5b6225af41b821706ee0ca56a2df2cc38898e3ee366665cca3aefae0c15f22e0b93c7ffd69e531c336768c8ab521ffa32fa20dd99c97be30b6036cee0d7775776585be86aa391c9e71cd210adaa3ee95a3edeb3edb9a1f51b17a8536aa4278a622540db7e4d39cb09de97fa1c5b1b788bdb50674103b0850bb32edf4a1de845d7e489816d80e8c55c3c6dd273c7ec13e4f65ab4b78ce82650dc46b706dcd3b4b6456a97b59575a7b5a1c82e54817f2576f3bc3e777a67c7eb8463576ad33a5dc8cde298cfaa2b63a325ac488eba51b54d4e8c95f9e7d45f88cfcfca1c09aea936972814b608db60bf3d67fbcbac9377bc925dbe4fdf416c8776ab029e61fc9c33eb96ba06fc1124bf50971c32fee632c2a6a6b0a8c45fc49ff982ba4e326772ce7bdf4e6c58a8e709f832ee9197b7521da3721c6b15f73df99bc0f4e75fdff7f4e8717af4385ddac76b1dae73441c20b7df7307cfbf044e92edeb4fc2059a8b9780de5d72ce63ec44a48b49f3318335e1ac22f717c37fb135be152e2e366f703747f5e8a9c730699ed4116ad6545859908b684c686f32b1ef1d05cf49b49ff17d64894a68772673c855d1da20c3f131dc6f955c5d476cebd20a8bd7f1aadccb565d700bc731f17373e319f85eadbbd6710cd669d77475935e63926bb8a93d198f9fc636f08ecad612db63341036b6da9e1b2a6a2470beb0a637b4b7c6a6d8de66f7d70dd8ca1778af927aa487b166b1ad84b1927c0c193f8f7d842eebd1bc93fb3cc2dd53bb788571de611e278a370692637e04a1c937b99f03b981b4f72af0922cf63823b7a3b83aef381fb5ee4b6fb876e2f150dd33d0c15188369af8ea0ce39fc778a68a63671687b0bdd857db63a325fc1c725de1a32544710ae38e42789fa944c34e1f08bdf8e7d17a56a845bfa72fac552ab65d20adef22b1cde9bb79f8cde5793cbc852536c3aa7b254d5509115f49ae6061f2d8c79b54f1ac91ae767fbda9356c9b3c6b745aefe38333e4114fdf453c7dc1bb16f05675b98a1ab66c6ac2ca9ae670d19dca19f2ca6ca890c078e1dff3a6a64fb1fb0361ac6b7dd7149bd3b7c43df6968e97935ac5849bb1971c131e67776eabd8fe3ecf925ca4a84562754b6c72642fb5e76667e2986a7302fb4aed05440395f490c5be40c59c0d9368ae52bc7894a7fefee7f2be7c8d680e8ae4d2cfd509449a3b363bcae4540e8233ee4558df23bafd39f977253406b5a426cfd7610f7cb701b926517922731cbdd3657226a2b734423827ae24c6fb97d4e2937f47a1aedae4cf2dd7d5ebfd9aaeaee792d858e13565987abcc7a04f4354263f0a60d0b2f7cd35fa4f0cd04d96416f27a57994d00ebaf63cdc61cfca0269f2b40a7cf2078909e25a68e7fd2c5c03fbbec498c858f01d123fc331d427e20bf09b1ac967547d27d63ccbb7bd985768b34dd48fbb64fe93f721f97d2b24bd5196df9c5b21f4b8c29d677614c2197f6f9a52f8de53e5c0f4cf8e0b2fc599e35a612db0c28a3873fc6ecdaaf757e639fc9d8738732ac25de3efd0fd6a7a1a7af4590c736f4d95b3f4ac7b03e1c5e46b23c0dcc4392407119d6b7ce6ea86a87006f4a443bfedccac5b44ab2f1ab7b0b0d50d67601f6ef03c2373aa00feed47d207ed20cf020e66ca834bf2fa5b88cd638eb18a6d113b834c8f5eae25b4b305e9353aa349bbca72895be0d9a71cc0a47ee6ae6c729f8ee379add5cc4e3fc0fb4c6ab97047210db0c041f29d6c5f09a14767fa1e73eb74bac0791fd9efea7af0f26bc62ade0bcdc997d637c8bcb25cfc02cfbfc997ec79cbbd4361ed20df6f905a40f2bed91a62b3668a3dd04d37f05910371eba915ee3ac5d60eb14d538c4669df2e3cc089e3bbe7ba54e7766d69539229a0633bc8f4d51995c94bfa9b5d3dbb94f5f2c9a03eca380af4770e9291d94e2fd98ca12cfa3159d6f82a1fc3990716cb440be175af55e5e9cb36bab0bc43c27d9a1fcfdb9fee941fd9d694ae0f7647699e8f68d9e1791be84266f99be26deaf52c70e6cd171f481303534e4992341eeb7a00e52b37865f277286c6d55667e0c07386bec276ab207da4f3c60bf617f5b2f05c65abed7b1f8bec9d87da436f033c2829a8b9e3955b01fccec05e10524b62c44f931eed7af3df3915b5cca77b7798f3398661adf5ea001acab6bf9c3f83e567b7fbed59f0bf4fb96d767908ac56a396b9c3e87877e3f678d1966bb29f90b0f69cf37ba66f06ecedb20756fd40dad3f4bf93aafdeab24b64334107e214de0de203718f3e7514e3db0d53f5bcd7591bef0c239f09cf52f3a4f511c9d3c4f87ef3a1c9f7196ef8d8fc4fd87ee84aae27e16fb5cdf8727da4e67e6e0dbdb37d5db267d7623c90dc4b48a627ec6bcbb1edfaf35bddeaf416e50f4965407696ed373a753dd97cf01d898c4f8f23edb9f21d50ba54e94878ef2d656f8e40c347c7f35714cb134ebbdb89e33125c733a89fdeb0ed1a84ef64b5961d5398a36e83fc51c6f4f4e4f7b5f808656bc7782245f5152cf3269b32dde5dd9ea66029a5d9d2e674d95b1dd5142a4f6727231824b789c9406d88854fcb4fb59bc368626394cbb4a12f1fab7e7266f6fdf46828c63159357b692d85831ff4057bd258ee53e133916aaad9ef0f9956d95f994b3f93e7c7965f21b4f579ff6e6d1abe13888721ad7b72375656b8bcd852412be29ec0f9fc573f0cade3d997b43c01746fa9713fb8f696faab51152fb1382d3933de0c4e0b1ff876d42c2eeecda96cab5046cadcb993ce7909e247c76ad649c5ff5d86fa6d785f5ef1d8c470bf18143afd745fa37a4727944d7148b70bc5ffab935d716bbb3cbf4e5b07c64ee5a1cea2fbe243f0be1adab86a78bc4a9d4769d63b7682d20e16b404f31eb715aa1d1f38cf57a925a76f26c3609f71a7d0f7c0fa251c27fdf56cb27d18bfbe2c8fb475c126d624792f77b4b70d97bc3185aee96f6f17ba83549f92080d3e77566fba80e59aafe7233f6e8d67aef80bfa6625d07e8b5a818a3487b632ff6ccc7bd72d7f78af3e01f7df08fde204ffea3efe6d177f35b618129ceb25181dfdda5bd0197c11c795dcf6e25f9fd64ea4fb78117f0480c5c35e6688544cfff1ca47d7b6213cf1cc77d6160b748eb2d529a1b47eb0bbb7ec8d19ac8f5347f5db368afc9e99c5d8762ea683dec481729d2cba77bacb633c76feac2fb4cf7d125d71562531ca37d7604d7169d7cff9c57b8372dc91198cf178fef7b53ecc5df35a17b7b500b32f340e780fa04a7d54d624c7515bd0cec59e9d8f5d4dcc187252a63e22fbe3b36ef06c0cb95acb78a7f3a86daa0386ec1b7fc26abb927f0f6cfb3ddfcbb1548a2ec611f2abdd78580f463f40b61472e995b18c4e3c8b3816ba47689af08982f6f6cb452754cce0ce31e024944a1c97314a304f6908cbfe5b21e1347e7db9cae6e56289c38baaf04a66fa5df4ba4bd0fc5b02677970fd5d5cdfc8c3e8372cfe2db73f332b17ba9e79a6a9bd379e7329c3db780e5c46b56a91d6bcfcfd1374a9c69d714d729db85a6f2caa4f821d66f86d4541f98f32361af2aaec7eccc01e3ccd5f94d0d611f1faf45caf74ad89c84edc8d89f280f5ca4ffe09a584982d5a98d0dd19ba3562d614bbf52ef327d07e0381ffac9773146d1fb5e8cf733cdfb165861b2276d8def5f8ff6b20576e7ddd17937c07ecc0f916acf89d816a5f3da04afd69e5b7ce29e566f867f27ebafb886daf0502b071f94c23f434df22be6ec66f19e87f23b695bbd17ef99e5b1d87fb62ac78d256c1e5dbf9cf3e89aa3e4dac77be86dfc1b6334fd3f6f73cd3cc2f5cbeed598239b9dd5b563f28df9e720e933776706e08092782c82d34a9e49a4b96b13fbdf5a1f7f7e8cef417a3e1f58c08a74ab2af2035ff073ce885f5f888f94ba234678cfe1bb60302c90f7bd6c2f0df641d9fd75fcdd2aca9bedd18466f7ede25eb4ca13d800b95f3066487d5f56ab9cf26047bd462d3b402dcb41fec645a1005844a9d3772ddff6ec1d7ff0cb7dab1843f2eabd465ae5a78fe972becf395ae553e8db58503f6091f003beb2ae9af04f58dd25837163fd26893eb5b3f727ef7a66a4470767d531b4f7a4cf3a4ff6df195a7f1bddb12d97e969e3f83e83f901ecbd6b76ba2b496463532645f47e3377cd95eab627c56864ff7fc19c5db02eecc439710f62eebc3c5e6a4f4f658ff482311eff0426f890cd4edb9ebdfee7a7aa6c0fc51c857c83fdcf2deb8b477364bda462cb1cbf929e47f051a3b54fdcc54fbf718f506375a36b46637a96bb82da75f2acce25b1b9343b9364cd81e68fd2b978d0644b9d49d0490e74dee3f0e7211f4ccfe75dc6862cdf9bce09ecade31fb217d5d5f1492efcea5c99138a0f4bd967b9218927e09ff6d4f5415f24bde7469f03e08d9adaeac6b54669edcf1f0361a16b7dd04b815ed38a6b5b1f64eed379aee924cd25378eebfd9718df57e6962db1cd81f6d6e8e6f8ad7bd8af459abcbc40de58001c405d99eb9a94d52a26eb91c00e0d867d8a6b4e6b4665f22d2bda87453574a0f6780bf14c72de18174e8854bb668aed70476f16f6bb1bf78bbe7aaf14bbbe32fd21c17babcd100d766ab8d0f717e1c46f07d7b7b27cc0347c597cfd51972717c18d4e5e1d1ccb18aa1df331f0ba630007c36b46772a8dc32718ffd72c77315b373247feedc42af19c311ef798bb301e1ff06ab819ddaa749f05e9e170416796d496216e019e19d8cff839b2875a05f05619dfe0587c4c710101e491941c3b9cde87e93ce64818e9847ff618063a3dcf47fadbf761c8a5e3750ed7e2bb388603edc033be07f616028c66639a8bd9aad24f3b721f3e6aad8f5aeba3d6faa8b51efcef516b7dd45a1fb5d6e4efdd42add5fb142bc30fb7a3675d063facedc1c9c663ba3c4eb64a8cdebef962b5865cbc74cc7b7d79bcf4edf0bb52edf043b589478fa9531977c1b4ebd9ad5aa28747aa42b328d18b217c20adcf9dcdc1d2497de7967de75b2bca018006a1aeda2ec1bef6575247581994c30761bf05cff5f40b7aacf6cf47521b98ad8f63f10ac734e0599c4f3406db535d03bf0b8f796df21ee184e275ec436f912693737d433d0385b0f2627b84d42267fd6cce829ac5b7a78574072ec81f80ef01abde0f719c5bb5be12aa2b011215aa1d7e319de44bf16a131ffb0c9eeb52b67dcaea1b57e2d52e3776bc26bfce5e9343fd1fada3b5925057b9bbc1790d93bd9904db74b6ee6d86a7ce63b17adcf7ff3c35d4de5412d15c572d0772020381d3413fa0e7247b19ff0e85e0cd1f2ea58e3d33d4ee2c7367619bbd45da8df49ca7ef24a8dbb13e13247a631db80569ef7939ec58f22efb97244e9668f014f510a6fa6be18eee7a0f0e859d7dfae050f84fe6503862b791a8ac91da9858616d95ad73dfc05e7da558b9ad24362f52ebc6ef0b3a0b697b1a9853b43278b6be1e3c0fdd88c6503f5a2361658e635d33a6099eb283a2b7b4fde62fa6e96c68d8a76f7815626f2fc895d79ec398ae9fb31280ef8061e2ce882dcd9140be6b94e0b8eca4fabec7a06bc02b314e42acb908db141c9fedc5128246485edd9aeaf32052b7ad96bf17d6478fb846487dfacbe7e0beb84242a4d65676217da202fddd857353ed093a3f7e3c83db2cdb1b725bf1c1a30f24fede3bee03b960ee53f64cb5c957a13f35f495855947ee399c05c3bae0e9e0932a09fefa7e029b47c7a3f61887410623fdc55c521e793f5d8df003291e99248f7d94d724f3e6a116ad8964ea973b3cf0d571afe7eb3c818dab8548d56fcefe0d13dab5807b6eb9ae55ef06886f00ef2d19c3056248adef991483c6d6ef8df430269e4763eadbb08583844e2ae09f7f90f86f6afacae4c7207a57123b961bdf6df4c7f924fe7dd3640fdd5e4cb833ff3abf71ad7a418ebdf81d7230a51e87d41ab191cc3e0ed6c9672ca5d757c7169bbf90caf0c1cead60b30ecc0bd84fd9169505ad9d339f734e7a1ae87a8f04018fdde0b18f4d6a9717ee3d3b279f16a0d69dd8ca0be593f3d72bcea922624738435402c8bb329ec9afce9f79091de401bc6332279c7bc612ba3a13a6830e3a37afdeabb5bd9d3d88d784aefb4def43d26b23c0fb52bb0efd0a8857964893033d4c73135f6fbfd2b5a47398e040867793ebef3497ba3ef87e6f2dc17bf3ad25b1dbdd151287ffa0fcf4b0e775be39411f4ff01d786ec8df1b50c72763239f3984f3bb855cdf996b78cce7809c34f13be31cb5817f7f606fe97e9e135e56db337d2534d4f7747fd768eda04163fa863fabf5e73407cee6f9fee23a9207b97a4cd753fb132319479dd63398caa1318da544ef8a8b44b81702738ae3bc184ff6d6dad5f2ae18e72620b11fb0b82b870ff312e3b92bacca435fe30af898644ef77cfee252cf36456f6914d175bf3d3d91d3f3b8536165f11ee94df8c27e58b3de8d6ccb2538512c9fd522fa13e6bf20cda2f55c5813aa392a7b565df0f47a0f7e9fe03e68ce137cd93817ff43943d8bf726e0fbb4e0de0ccc6937407007f78a708316b3cbe5ed73d24ea7e692d8697b867d12923bc4f725f323943ab5c9303edad7816d32b6eb1cf1f161ee28c6056c796caf5aee0869d1f8c1b731407710ef2f8f2bc22d9af5c92ae33d9902f67f89f27adfb2f6794f2f88ee2b3ef44edf268f46cff2953152fb09bd5c6f4272421166e937e63769fbd9daf30dad8d68f29bb959b7ff33d766dac563e48e69d37fe1fac8ccaea7b581d7d4c6f51696aff8716d6ced443ac21d32b67bed8d928ef72d467dd337d90737f196f48e4e6b0cd3fb9ae6201d5b6c878857b8b79610e91123b531b9d775abaaa74d7ae4789339b321c3fe9a62739ce4b12076a33d4122f1ad6f858b62cf3c103c003d1392b859e97c829b82f8806e14ff8f2ecb2f711dee29a6f949e31c4f187cd4baed5d2c5a7e8f5a011cce167d04b31c5d8ae3b15fbdebfded3be12e7eff783ec0e2877f182fefbbfadd05dfb79b133b167cdfdae9efab9ffabeeb539f69abeb539fb9324f9da3a910a253f7c3b4efeafec64b8d37bf67909e3daa097cb86f18efcfc3f9b181b03034d7432fdcc8eec8b51d1b4d3ec37482f7ec0d6f69e238564befcb0bf63fcfde47bfc938c2df631cdddd9cfb7d8ee337391fdddfe37ce4e8aaa76b4492580b3e4565f2732073d654d9c9bda4eefe3d7703d290674d3d8ef0e2d502d3df04a63fbcda982c7fb8db679df6671c53f59e90da6b4ad37e68ef7263a534b7cae28cf7e6a78966f4be7b706168cea91865fc79775f7fe2be1ef86c8eba7ff8fd5624dfdb70cd57827fc9bf3b2fc059caaf8faddf89fc0889671d58bf7dfbd81427bb3e0e8deff29e7dc13d3d372e633759ef6cd9fac7be38f288fd5278a4c90d5b044ec885a136682ff469b53958037ed7cf2c71466a79be26ad8d1f884b12b1f7f0b0ad33eba40ea1ab9b17dacfb8ab6d79117cb592a30572e11e8c83bdd0fbd67c1394ea93bea0ddb0c5f6c8148fdafe2fb11d7647fa2adbc159c77c95dc3d4fcfc3a0648ffcde9ae699f32716ebdf39edbb77efddbd5c0317ddaf39bcdc27f82947fc0acff695f053ebcf80b345a53ee5e05a76a93fb97b9f92ce67d4f3bbe759d9b53bc20351f1dd5b0b3e0f61250eef992de91d69cfcfb9abf59cdcccbebb769f2da4ff4ec67a28df48c69bb5737bed7afa3bcaf9f77bf36ed4bfc9bdf377b122fbf34a99fd97f8de92e3bb9e0ddfb36f4ec65dc17ee19b939c7c5ededdb6cfdf5c9cf37ce39c6703bea1b944e139efbfeb239498fbadad9ef9f93d1ccf053f1f98ea2eb7f3b17b74c766b23b949c812377cdeb6dc6f947d719b0d5e7ccb5679e754e76e3d812cf1e9d73c6ac7a3f34f93ddcdd85bf4339f31d949c3ac7de5cc905b1d364dd2bf0f9727349b71bcb46b6f30e731c47fcaca3677197ebecb0e67cb63f56e91c7ebf26a97dfbed798ff4b75d2bef8a6dd263fdee77fd82cbc46d97f6398fd828d57baa2a46b9691beae770cbde822ff4a87914ca05814f7391f377837b73daad5997a95fdfa4ddc471cfa5382e7475c3edc1e0e4f388d6e5b134126a04672f7b96a604960ff9790ed68b6800b9e6d4538693c9b5e6c0bdcdbbe366f215f93ed2ee33cb9d89ddcf5fec7ce4f933876a0607f6cc69f76a8c719d01f6fb22763793339c927e4a5dddad37579ccb3d9e9ba21ce3a5e3d63279c73cdb06bcedbd8bd9b713798f2f712fe59d0d36ce1069ed9aa1c91ecadef3c73fbbdf4738fe59d8db3dec8fecd6e872e7cfe800c7cc2a3ddedd3b3fb9aea9feadf85c4d74adef29a2b740831af4e6bd69fdc054953f4cbe718aeec96eff87073866f859fc2ca677f5ea24d6ddb1f1cfb46065fac34bf5251fd2c44bbc4fae9fb166ba97711f86b4fc51eb2d7f84aef1dfedf9af37855bfe0873efd3dc9e80037d0087d6c833d576609ed06fbf8b5307ae4dfa7d802d071dd90ae61a34bd72fa57e03d6dde0d6c51f9b0c436bef7e35e3fbe3937c5f6dae277f3a4a4d750c0e7c3b3fc449fd3e8e957aff5f4eb027db5bbf3316978c0ad39104608f606f0c852bddbabe0f3a33db86bd3d37d96295b90a71999a3c396c0918439d8a293f697d4560683023da84538e20e69c1e96aa3a128b29ceb434eed99a1f5bd615d70f1fd1cf7277657a6b871ad4e77177fb4f7cccb96d559bcffb7b2a0ffdf4c7ed4d60badd5b07f8c67cb1f17d071cc99c701bb8b2ca24f3a36b06f3048e8048acda5d4113c6b240cfa9377e77d3b79ea5e83772a3e63bb759b3c6dcd037a9a397aa6310e429303e8c58c38902eb81f41af38e2f99a4b9d6e0df4a1b4777c9643a46ef0eff3682028c3c9fa325cb887faa0fdf6f253c1ef957befd40dd1e390d25deb6ad74becc3b1c96fe6ba266c737da132f660ccd6a83b436acdfde9ccfe9f6fdfbf05c6afcfe9e2db5ffff7dbcf89f3edaf6fdfbe7feb1afe27fed3fffeeff76fce68e12ecdffb266fe3fed9935f9fcf5cfd9dc32bcc968f1d73fff1eb49edffeb9f1bd7fce2df7d337c88ffe3d9f07ff26fff05f9bb98dbf7934fdef19febffdb93046de1cff714a9e91fb89efdfe6a3ede7b7bf6a7f34f97f35bf7ff367f6e7b7bf9eea7fc01fffbd18c147798ee7fe0fc7ff1faef1517bfa8b6ffec5fdf15f7f3cfdd9f8b3f6f4af3fffc1d5fee2b86fdfbf8de6ffb647bfbefdf5df8637fffcfe6d1ec2d35f3e57dffefae3e95fffe2bf7f93a6b36f7f35b9a73f9e6a7f7effd6f546d3c9b7bf6adfbfbdc353eb759e7bfafe6d38b2bffd55e338eefb3731fea3f6ef7f0786cd7dfb8bfbfead6fe3efe4be7f1ba4de5df02664304f5cf30ffcd7993599e3affde3fbb7e7c5c8c76f33f8b4befd556bfcc935b966fde98fefdfba73fc2f7ff2ff6afc59e7fef5f4bfdfbfbd1ffed568dcfffbfd5babf8af6afffef772ba9c7fdadffefa7fb9efdc77eefffb5fbce6eee72f98243c6fdffee9cefccf7fcebde5c4988f26ffe7bff9e63f6d6361fcf3d7a7ed1a8b7f3aa3c53fdda599dd1c3b7be3dbf76f921fcc7e2d7e1a0b37b5cda29fbfcc2cf2830fe397f3b9207feecf66f44fefc6c272bffd355d7adef76f8385e17d46ab0a7feb7f1af3d994fcae386b8fbccf39fb6df2e4e8af2f9f41f4e78fcff922f3dbf89f329f789fd94bfcbcfffb8dbefefe63016f3a9a7efb6bf16bf9f9fdac498481bccfecd357c199fd973fb3e17b94cf5ff311cc4fedbf6a7538db018c851dfc8343a26b55f0c8ffeff76ff8edbefdf5ede74bf3c954d78eed2b2108e58fb9d1fbe00907cb38305d21d15ba22d375294bef8f6e18c7e6e9f7ed00b032e3f7d203c99ea66696d83276b8b83a03e67bdcc566f75bb6e878dfa7bd85859beb57a1f3fafdf074dfd63b8f9d079d733d5d751f682fe146b7373fafe87f991f81ebebbb5fcf7a5e97b5bbbd5989a757d654edf5734085f99aac2e91a7b973f376fe3e7fddfcb02f77a778d033cbbd35fff3dfa73a5d7bba11e369686d6e5de7c7b658f9a4b2b6cd28454c1ef24c980a6e4bb9cdd79fee32d6c8eadba3c7ef31b8155ef2d11dfe4dff8c6f68da7c99eedebf2bd25651c809850a4ef374373d8f790dfae999d5e539ab66bbaba018229b4fb39464a0284a61671b0ce7d171e69f2162ead8184e760f9deaa2d0c75832f341c0c468412071df8c364387f9a1fc196ee074680f373c875858f96f0f1a97539a472ce9057c6d811b13b1367286e5c73f43c1bd6babd1f034104721c2a1ec42ece5c22b297cd22deb3b5786c633cf6a7f59b5a0b4c51d9da209621a5bf0f4086ddbce01a7fe7ccaccb1c7b666a8fb59a3b3fdffd3c0492a1517fcf274e9b3eff43115d4f7a6d7ef4b8f6bbf41a1330e0399044d2b46db784b1ae3e0179b4ad7599181e6bb21e31120068188739a344141d6f6da85dd714378da4b0016a3181fd6ec3aaf73d73206c91daad59bec77d0e84b529b6976f2d616babdd9924b6412cd7ac773d49c47b9608971bea93f331f13e9496f0316c3d3fbdbf3c2fde3f28c9ec3487d02339de8ebc32ebbdb8819c8dbf1dbdcf47e27d7af87da496fb31ac3d07893909ac10f6d8d8e4fbdecf29fb6c2d31961a8c2549ac481bd4b3e407644ff8ca42d7e45f5636f015f1cf9a2bfba5b1a5fb7661c5fb163bdd2e25740a4dbec9e504f16902a403ceecdee61c6c0b55fcbb39e0abcb8b59d6747f13c4cdf135cf16db135debbb67888ef42cbfc91b2a886c81bd807524890b57f79b3546506175949149c8634910aa362692d8e675d59bebaa1c9822ec8b7de2457112a16aa191c3f306e403c38ebcb27d6f82b4f79df3aaabf2ca8e0856b2dfd55ea296e0da7e3b30c5f6c85037603363128648e81ec876e2c0ac90c0fc0d100e76b7d64b40c93a7788e23685c50a0f17a0b656fdf90fbabfb60669a8395af4ca213f283a9eb98efd0eb5867d2ddf50f39ef77ac9e74577df959fc3e6b3aae74d4cfe9d142fae2f3e43f74855a490649f5c4418b355a0b055efaeff9ecaab62849e179a4bb11dda9d4975cff395ad25369716ef8d4c71b860cf3f4aaeb4fb7e47899cce7dffa840c77c8f22c49ce3d77da454a5c8a88efa0647fd84c8bf2d276a107d5f56d8202612d2d535bed717f4be0af17d6fd2fb1eaf2701ba78d8172b236cb0df27cb7fc763f766eef71391839a6bf98b489c3126566eb826880cd5a83f213724482c43d16ead6b32ec0b42765da2c0d12a47bc55a07175d786e583b6e0cc0ddbf2cf21373c62af76ed5b25e087f282f3d1986db511e0cf261a9e229fee4d0352d59539ed06babff1de34c1b5a6fdc69bbaf03eb5f7dcc29bc5e3b3dfe5ccbae47c7604d7169dec5d00c4a426dfd81aaa3c470310b2e73ef711eef89e678abdf8bb264268f21bef4df52679e00d369ed3c08eb2abf3f385a992025c0582872d5dedfe02918f4edfb30a92e6e691e5f6060224f351541c68fa92d80dd899b642c135fd1e115eaa2ba1ce83505382e4be6ad142986b87cd754238fffc71dc83f020f653fc785c15fa469ec5376b96df3d5f3cbea2067c4ae85dba7857561ce0033fa7a020f39e33982c0a12e2ea813037e11e01e24a22c8210e93fbb7e273b7094c7f1e8984c21e8945623833145c4a1c48042888380c870684e4dfd6e431ba5031fe820d4a70471769de960a81020f025f53cf3c58646e15deaf85f7eda1fd6b601f429339a4b95c6a5d2f2010d71b08248603f2f1d764fe8588a124fe8ea6b28b7846b6de1edb1dc5355b6bc7f49bd8deb0b3b0b6fce6ff603b8fd49b215d9fe135b6a67defb3d34bdd2b89fbe9daf350f4bdaf2b3e37953db3758ba2731bf75202037dfa77dd07016420c82720a6a60f768ff91cbc1b582d5827c8efa2a4880fdc4d4f8e22ba8115c6750c2a9e4cc5b49a61828015f68f5c7f77ac8e125a62738b06057caf827741e93b21793778f198d97ebfa939ba11b17e53552686faba208259e933420033f984e8159d912e52fb814ed7e902e4c8af511d0ec4ac5c4f126b1e123d9782aa13397a7cdf2ef0daa77c855b204cfe206b46d78a89e0d1fb4605501cd9abc9df4bd460600ff3ca848af182ff7c97425b535277b178d7ab42706b98a97501385aeb72ba5a5b9f516b1b02d1bbd8c6be1bc48336018163df6f2b89b18d903ab66b85c2da56e5b9a1756748ed552db8d58367838d835ae0d0009c43df35b567e6879f3b9eaaea5f04f4378cc466f6c6a09f1dfcf36e0a649b8e7df1b955602ede343bb045679100ebef2535a360e3172652769da6d78d6bd57b0b536d4e40e85acd6954b9744d7a02cf7412cfa4cd0b679f95571dfc3aa8af7206137f14d3cf6375d82204f747ec7461fb0c76596c6fed96b030f93ec36e7039e7a3f418ae109fe612fc1dd88fe9f9d05cfcf36d0ab89ba9011e6c9cd99b7b21a0e81e13c47ab94a23665c07bd7e4ef435c63724705c67de1511467014dfe9c9582d1614ab3a0f9ab4ed11562b752f947af7ca729ffbf75dfabb9427fc73fafeb90d3c5f6bebd9198ce6be025b4ff160a9f53e518c947d97585b21519927beb36a3f87611f93671662c88f5af7a5375c839d4649bc6e9106a7c77ecdecd7fe4a0f6b4115be7b3f61630649f1e1f3ea5409fc5a5a3859ea2471c2903f70cd51e67792c2d334968b3092a32fb4ddafde04ff1f7c374d8af3eb49df5d4cfd8e63698a6b32dc942837b07f93fd1d1287dee739399ce3cecb39829f95dbc07dac765f46a0ac142e649f0df7e05dcbe342f6da716f89589cccc40413f995acf8b7aef62780030ad70e526baea112513bb3de9fe17d8363499d8a969711ad928af9f8b96b5056bc50a2318092cac95c771e4ae78e4a0a2cee6b543cb817a7ca92e1694d55f62cd85bcab6e0793aebf9e9f738536875779f3f1d125e45623338261cb9e7ec961392cc7faf53852577e6dc7a6908d26b3f40bcc7e9eadaf9e065a8e764ee04e7c76bffe76030f917d8b7811058a1b0a635266ce3e652a71b80a05ba73f33b4774757415c740b3d0120b28ed746e1f133f059d007826fab9bb924ca81ee6f0293b7435d136686faee58be3236ebf204ef792bc7861f9de7e2b9cd83737334ef79709d184e2025405aecf3871a8a8b7caecc1926735533fd42b6e490686376def68a3726be2f996bfbca1cc1daf29b39c23f17cf0ff4f0739026739f05ebda7bfc50628712c421f0f9c1da49fa26b41729af0f638cfd7ccb6fcedf5a806be4de483d97124356de9b119a75a85d3712b5eaeb8ff13fc12ff5e1fff7e1974ee05d2fe997b23bac01754d8ae3b535794d7ae620271b403d007a04003b13d7043bf1be647b4822b55ece1015fcff91e12be34279b73db6ba085ea6d479da9d97513caf10d7c92c26fd54e19cb0be2e5aab26351c43853cc00472f95ad74bd4b7d7910d1bac01ef6d9373b5c27386ffaffb81a7d70bd576cebb7373485c8af8fab6da2022b9aab2d07d25847b437b3f2e147cfef3d376e100a1cb21bccae13db25734fb17d2bc3af6abac327e70ab1406ece8984f89b3f2c7fafc0f25eeb78db01b704f88ded6061c1de49c13e38e701cf83fee5313029d6fcfcdce84f5eeae48ef2d3ef7cfd047cb30030c570ed829f83902717683571a36df0c51e7ddc1368b9e91749f631111fd3df6e1dcf92a1903ee398f8545f7f3d77c9f08bfbf71753f2dda557c9fdf601c25ba35536d2fdf34d9d3552aa62bd231923828d323436ad19f1db0954544dff7accf8962f599bd5656283fb3c70a8bfbe7afe75ebbb5257dfc5e2ea9e93dee136c634c20916a30a2a5549ef8ad25d40d7217331f18db2b4fd7ba01b65516df0ca9b09ba3abb595e95b51cec8aa2b63a3453f077dcccc86c57be43f36ae6e1dcfeb98aac21962f3b7da6b56bdeb59f52e1330f46cd15da1c7bdb4ff5e9a76f11ad67e1b3f0962193626f0895c7af78426bf5e4aaf7037799f621be2d4b716f68188fd05bfbf656b3806471dd9b5f9a7a92476a1b665fa7dc0ad10ac579ba3be4f14774ba2eb5aa13042aab2943a76608beec4f2db75b07f7ecfb1787765ab9b8924365692b85999be8de387111ae0384c79e4ff7ee3fc9f74b897254025f0fb99ef2bbe5ec5b1cad1d872727a72f2ee2e89594e7e6f16fba398beb7b1d561a66eb4975b85c5dd379e8bc8ad359f3ed6b2fe6f993eec6338fbcc3ecac5db4fdfd304de456a51e5ef91c2bd57d1d8f27a08f13b6b8468f382fb5820b948654b098d37b6da9e677272f0fdb75eebcdcc0fcb532f13dc6f112e22995b2379eb927c015fb057752a7ab08770fee6f62b1569a806c750971c323fc0d316f504ece37832691db524ff85538a03a37556ccf0a73e6e10919b6d01fcc2e9e3bf5e0ef8788f60e2fb12b5957c4c784518b8d4b82ac06ba69e77065693d5df9a2c27b1d6552f247ebde3c4c2496b07692e70fbe95a7f654d274ecc9f5335c62d3b76866b8371af68bce758623bb046acce188bc048a2f204fc817e9b33eb7283f49303a7ceadf2b6c5e21d94e3a62087dac1bba20c7ea8b00f99d76f15713c96eb8f95f6d5c94fe5f529e33f97f09d4ff29b596f6bc4e544f63012fb41bc4fbb2b93fa33f8bc412e83d42f5dcb2758d5533064257234c77b4e76f7d51e114ae827e90d27cd8ffee088e8f82e27d8debecb237c42d9bb226dcb336b7d4408293f0e203e14d49952e23ab7d7a70ecfbf40ef6d9575e65be05f60f306714184399f7a095f4aa859536165f143ca9bea011e04f86908ae2e8a7781e3505442bb3399c339a61c0d2ccfcffcab3267bab0c8c581dccda5723615ede57372335f9393b92647c257e55eaecd695026c752119fcd19b994ca722857e52ca82a5772e5bd4563849bdb5f0a79af72b98fc3398f884782c54589d87ea66bb2abd7fb9ee503b6667c2bfb2c9e07826d8b6a528cef2359c7a2f529030417bb1cd2e4c0aaf703bd08efdea5f6db25059229776e059cf3c09d29b5dc95e5dbaee97b7f44f99fbae4603fc5e29bcb1fe7619a33dc9a02dc45e0ff884a407dbe2db677b6ba71add1f34c57f1f3e5a9ae36824f861b01de37c1b3a6dd95399ad0bc55736e8aca98602d9e67a6a6cc6dd15b9b80c521ef6e8593aa31cf85e794e4e6401c32c99decc05dae0136d583faac263916ef2d515d99eb9ae4fc809ebc6688f8f6d2d002867500de2ea4c95b937f0a089e1584e03cbdde0f6c7fe8fc106b35b3d30ff0fe8ce672fa5e84dfeb56b8ead9f82ae3b5c6fbf0ca7cf5a447a12aaecd4c9eb2b279247c99d7e0767fe4c61eb9b1476e2ce7fdbe3a3766ec17b9fe32fffa14ce8043e74d89b8cad37d9517ac1f5e33b795cda3403c77c698ee917b8ef2c7a771c8d7ea1324bcf2c220c1c97c7aedce4bf0e982c86b529b8b8c2ba9c395d512c3fb59e79b13f4d15820adef425ffa57725730dfb99de609063fb99d1dab4039fa8509525160fa0ae45d933d1d77c3b995b68d3bdc652971db3c9ebb8bc69e243ea9e22c505ffeacda357b5fc0d633d1e869dfd5ebbdacd657d57b99c457e3449c57e65def452f60ca62729253b872acb435c46668b72a79d6caf2ad05abef15d1073a5dab89ee0bd00fa92a0e6c8688703655a5b7e522b11f22ad5b283ebbcc189585ae7af3ea742c8419e145acea794a6856b77e8f3cc5234ff1c853ecdcf38f3cc5cde7292ea9fb5397a715f8c63f33b583337ce4bdb58239526d7cf6583dc6f921365636f48845759639c38152acc018efd7948e70d5dccc99ba50acf5b7a766246e3c04ba4190e7e03e07cf33bc569218fbe33f066bc7e63dce68911e375ded7212e45a60bed973eea54672c86fbdaca62fefaeac69af121f19af6db5fe717b823ab2077d1315f91e942bb0428d581778edab7a9eadc955fae2a1597fae6c6ca9387cf41b6818273597887f53602ea5cdbe3ece523d9ce5fa37f76832455ab065fbdd72715aa7fa7465fade4af4bc9dd4ef86efcfa41f4ff25227ebff96a93794e8fd397e4feeee2b3b34ebca3ad70e78c2e0a3d66d1f397f39e7755f9de5802f99f37b59bf32b3d65ba4b56b24cf7d1dfe439a63051df70af044c46fc46764877bfa1cff355d87023ea684ff26b5dcadad766792d8de025ff56b73d0e3bcd71fc0370018445712f1f77a53d36f7348ed3916df9da182b8ca4bfaaf43facef8ac656b91f43c5e7dbc77531339d6537d08df595207eda47baafc5db5efbe1a9ea08b76e8be8af092091c71ac9197de5f73498c7c5d1c27919c698a0f11ef91d7d37230ad8a7908220ef4346ef42af3f0d57ddfec8e499c9fafac1d46315af5f991cb694180fe63aa5fc207ac695e7ea1a3006e9568aee23fdb4b9d70d76e75def54c7558b9dec9b179397cc7e4e68a1e77cae34e79dc298f3be54bee140bf4d2e715c42eb1862ad18c9d9f894b6902ffb43522faf5e648004e7ccba7f5aebad020fb25add74df3d02b7206e07767ba867d7de072e3912627793a2ac6b4e4cd11d3ec1756d0f3ab498e2dfe09f725ec214d667985f5e78071d4a5b4437778260cb1bd355ae4deb57d254cea28de511e9eacdbb9b9b973f0b71dd943a3c3bde9593c8131a885096c621e977c610ef9c2dcf179e7d1771bd0272d2a4f647e4be2258f9c4f52e7276733ad87856d73f2ef28d4559bfcb9e5ba7abd5fd3d5f55c121b2b53f560bf425f4f475e0167bca84c7edc88beb401fce73287cf21e4c6b298cad7ebcfc38df4b02f88fe788ddcd323aa437e5c83a19abd3e4969975f607f9fad217e0bd8f4ac66fc3eedff45f2f7b27afd10a7f8cad6ac2b21d88ebbec0765f840a2f951591e772494e10cc98b1944d0826ab9146b30a17de0c40f605cb3b6ef4d6cb53daf5a039de6c61dc05d473611d54c71edfca0b8811fd486105f0de2e625123dde50c1fedda5d6cc176bdb8628a4f8dd2fc813b1b53e353fd49f2a73b3f53c334565aaabeb808e8b689fe5e488be3aff536e6f67723ff799d7f9dafe893426261b775c5c0f37f5bcf3faf40183097dea548f8b7e7764b3ad91e0ea7579654ebd45c5fb3a85fb4ff08e947de7aa62c7fd7b2d3dfea44e5e4a2728ca2b7eadc67e8cd9bfbead16d8b3cef037200f61d5fbaed912a277afbac6db63faafdb64ef4f736b8bed643ef09e721930976fea26a8122fa6f31ef779edde1bf0c98a8c49da9c8145a37bb2067d9557ee5b1a9b75656977e4c689cf61f7e5be3d73542bfbcbe2e853f4af6f58f7faaafc4a37a86f5db0a7a1b09ef48574ac4fd4cfbe906ef5115d23436c16d3346c95ee193a7b9fe5cfcd33f63567268fe38ed45d584627ed3c7db41375d14ed5433ba2835637ebf2afa2ba5467e9515d46878a68e275ec95e5cf13b6a0a4eed4997a5327ea4c9da22f45efc3f4793eca73cf6200e540bf159d03aa5bba370779c8f654958384751ed5e686daa8226f13c502a4ce780647c6e49570a7f11b5ab38c7335a9bd5b2d7f3db37b907f4fd6630abdeb23e75832e7d80d2ae1539cc073ced8ab5dc28bd8e9af6cca1788786585eab26b892e68da427c41e619eae3a6da0e4ca289eba6e3e7ca72332f8696d07787986dedd862b34efb0ca7486d4e2dbfbd36b08fa9ae711c36253e11601a0013437074d1b978ecf1d23c46a00358856dfec0fbe19c5ce390c4dc73a6b76c029e84e00f7575b3427cb3668527ee9b4af13064ced9debfeab81ee7a12caf573ae752019f9159ef72783d7bc0a975c6f9887285cd506a07f210fa92fbdeedecfb28c7fa023c616cff9ff2de8f7d5dd69759d96a83b3a695f833ec59e7f834ec3b28c6bce61a9047b6629f765b717e9e6fd6cc693ffc8cfcee62eff8a885968b19593ffbf5f729c1559f51376a831fddfa321f9a3cff85ed478613bf3b3b99cb67f0c57e00e1e4bafefd3fc4e782722a9c652f1927a0395516baaf84922837a44e1f8f6d6d88cd252a802fbda4bd5444658e34328f719c17f1c12c6db536429ae4e8d38963a77ff7feeaed87eb5279d852823b7cf4ff3cfa7f6ebcff67e7bc1cca4da7f722d1911f090b04675d86bd656d8bf7c09dfcfcf47be0bb19fb36635a07cbf5cf4bd7b4d25afe4c27a729f9ee2a83b72dfc9d656b4b17dbaff973b7fe39797548ad502077c820b2db656b6fd138cfaac19db87f77e6e9c49a5c7a9ef7d6e656c847c19e3e983bdc0380f1f491ef8d1ffba0d43e5898bc1c98f9d8963bdc07af8ea93647860a3a40c43f16b10d943d6b54b28e9b59bfb3f101a7d575337bb1547d37fdd9e275decce7cadca947eabe99df2b8475b9c3de5ee083bb7e5ca60c27eb33341694c107eb45e59591d4e90636d5cd1f40bfabbc445acfb1a07f2ad19f58592e56197cb0bc41fb8477bdc3bc82adc9c117e3a22136aa60efbea663b0b3f0fd14432f403fa8adb6e784cf23b1d7abcd79ed8c2dc640100c3ff4fe7614d76c0993ecef3e72b1657914a21ec84ab914cec3f227f906da5b8b6f8e0d9570cf509e04a6a90df6cc6e09f1de6b7d1d3742a23f05c7ab2b5b93b1bfed5af5ee4ae73dd7065d70c27b407923f1efc17a25b820eea93f80d8c3df4927712a5f8f5b35976f186c06df2da2e750b0df2171f609e767115d83f1ebbe18a7542c5318c77fc086c4bcfa25f0fcfbfcb8c9c93ca7457be18fdf8fbb7ba22c1617df9b496e5bca7d7ea2964299b8bd0ccfd0719f70f7ecd7e595ad3de7f6e80cdbf2cf21373c72ee76cf69de1939e607e6fc5ed627ccdedfe5fb647ce031af111f41c69f0f2c1fc690e4a5f8bbc7edf4fb973e8be7f1529cc0e17ae80c7acad2d0da35341082a4ee6052c39bf0ef7b4b8213698e804be4e5367a6672b9f4daa78fa92a6e940bc63d84d3e8fa718f849f73b6efc8fc4231d28300be2dbd2e37ac4e3fc6d586c2c4506dcfaaf71cc42b4b923f542692d8e4a1ae99f6e3127c88ae6bf18ea3ab9ba95997035b740bf5775db2363b10db5be325a525bec6be7ec29e130cf940185b53fc3e31f65012fb01e295addd12a6486d40be0cfbd6661d79d6487053fe7782eb92f273b9a668af2cdfe30cb1101ff8ef50eb4d8e7984e784fa571b5bf54294e6d83ed96697b6dd076df8ee1ebd604db88bb4fecce47ba4f6cfbb818e9f35609c75de16720cbec723b577db35defc7902ffea435538436c4e080ec39e19c0bd1d9d83c00a8509d2e4c0f69549495efce3e762f75d93798963be55b4ef68aed93155822981f3a5bd9fda8f58e6f9a9f7c0b609ce55bd5ffa5cee5ff3bd759b8fc1ebebe27d2c717bf9fcf78f716fcfe5907385b70fa9d61dedd5b4da3bfebdb566af2bf506dcf6ef97fc7ef973c6dffd780d2f3afe89d7eb0f6baf6f1faffc015daffc7dfea8af5498f36bceabe0a019e2e79cc3a9242a3ed312c7be96c96f3ca9d35f49a24cf37ede14f49de1df5e21468ffaacaacbefadcc1803f44a34a7a91fd8819f11de537fe8e85a17b8c0214f89ff8d695517e043bc54de3a4f572463330e6b35891e67e6f162ece8fe9dc38bd19d99759963bc7657e5e08058b4a086d14373eaa13975c4a77a684e3d34a77e27cd29e970dc0b3ae18778a4f1733f26ddbfb3bc8ea5cf62f173987706e5640eaee439cc3b838ae97b1b5b1d66354122fe5caa8bca7c8195ee079e5e2f11eb168c714bc7b610d366f3b7e0bb9c3ea67be4cef595ad25369716ef8d4c71b8a0be633535f0bab032a7dd40f7379ed4165c6b0a7df267e534230eef01e5ecee743dbb056bb74a737f36b68033675abed3777c5fb836e809200f727bd1fb797343eb37689fe61a69329c2b96efc3be07d264a871a016f3cf65cfc4f617beabbfcad698c81e529ebea40e9f3fef714d3ee69267fef916693dc89366f95bad506073b28539edf467bad6730cb1cd2392175ee37f37543930415f98e0af2c5109499c14c508f1da0127358ecdf0bb6cf09ee3e97a66ee3d121f7e76ee0a0b40629d412dc8b9e376f5872fe393568b0d48cf7165fe3ee1eabf8a9fcfeef990f9b005b11c07eff08218dea33987b43f99977f88fdcb2239889defdbd1003bb19e5e26bf5d22b77d525e9bdac2184341745a4e8d29caf8fe2530dcc7f319bbfb6a6af9cd9a956f077ac349f3a3bf93a3489fbf9cf3bab74e7ca00f35e7f7323da999b53e45c385dc13b57bf1bf0789fb10df6f03ec2b5cc00f1fc2bd48ee4cce10db5ce20ce23b37b0c2d45d8c7f0fdfc365f03bd7d4b2d8372fe0932870e6580e117cb4c80fb03b13c7d0de9d8c1f0b3c0517e6d6ac0a43c0195abf92bcb44272986771c7d13c28e585e807565d98ebdac4d1d5c644121baeed7bd3afd1e2c2767c93c49ad27925fe2712bdad256edccf81e09a3ec443bca1dad7e4f5c77ec913527b4d69da0fed5ddcd2519c17d290674d3dce003eb35a60fa846f3ae92f5d701f426f41775c812ef684623b5f4eae91e463c72f83c36fd179a03e42817ebedbe809c163a46bd86f196ac3cd70e2e4d88f3c2c1e0a4c51213a1831fe6ea7dfe44d4bc6de07eae4e539764bf9bffb6c5ddff7f0d92fa3d753e4defd3bd20721f7ad0f3d83229e8b6688064260b784baaebd3b785e4c1eb46f5d2b14d89e8a6a62d037aef6b1ffe518ea93a30fe079f0999fd36cbf407785c4e13fde46c2d0000c89c7b49ec83ad118dce6bdb9d91246145b1f20be819f1fc5d188cc49dd109565fafd092e45e79bf87dca627c8bfb0aa7fb0cc9f329c23bbfc23a333ffe8aeb92c4ba3d61df04fb5641a423467435a80f6607a6b8cead79421c21e2b335746cdef5584e9fae09c1cca8789d9549d9f8a2a03f53c8afc9b1ed97d48f2b7cafec799733b15f67e8ca1df48b2ad397fb8af3f6b5ba73ad62776cde59b8276c8ace7b51feac125e5e31a9c77562fe5d8cbf87e4bce33d4db4103ccae902fe4a48722c386ef096d1df5beee813f64e1b72cb6824109d60aa0b6cf9cdad15a6345883caf56be2b589f57dbf70ecf7839969878857b8ea7ad4480c78e5bebb2a7afb2626ffbe30f2737357c9a55b1d796515e9b53b9c4b7ff4003d7a80fed37a80385d93a748ab226f92ba735ccbb73dfbf41cca3f7a291d055aa7f5157c363d9bdc57a43f2875ff55a90b913f5e8a995a26b8e4483eb2237b78ad9186f0fd49b5f553becefdf5e47c2dafc7f653eb7248e51616afe03b21b03b13fc5c17f0951f4168f24deee7406e20edbd020c49b761d5fb9e39103e90daad593ee00b7aa6d85e4a2df763587b0ecec39344dfbf4d7cff1a7fff5b4bd8dad0e7d28678c7ac77bd882f44953dd412027324fc3d50ba43a9dded492fcefabdc56dfe2e60a72fe9ab0eebded6169585d4ee7ad867001c4b5b98ebea93f3a3ddfd18b626b10f7ba5f1de8b7f6aaa0aa7abc0377965ac353eaba0d7bab6fc26c94dedf88faf97f41fa373abf3ae6bf9ed318e390cadcb196a3707cb709d67d39ea8a49dbff23c83bd0d4d7efd05cf965d9d9f2f4cb5cde1b9ae5c6bf2e13f3ffce7fbf49fb1af049add380625f9f0ebd7c207d83ed4654e6a0ba1c9435efe1c4ebc2dcbf31bec7bc93afd1c725de1a325c4763fd5870f5848826da0f7b65c7f2758d18ebc325ba4b6077a5645f05417f5bdd99d25f4d8bb47f80cadcbea4a6ced487de3b5f9d1e3daefa0f743e634d57f9fe0876677c4d40ac95eb6fce69cf08429a0a977ab79ae0787d08343e8c121b4f78efc420e2117fba2b91c14b4de97f5536b963f5924b1fc5f88139c017f3cc1b6a7fa0b2e8015148876e69c61fb139c8080e54ffeddb7fcf694fcf979a6ab5de0c57c6b094b93af05510d03ec7be0e9f5be875a05fa8e0bde4fa5efa9e47de5bb0d4b5442d26391ea6948d46cae3c0ff7d80f44fd8e37b53bd335d9c563b17cfc6fded80a2be89567f98ad79ce717c4afe7e63659cf16e9f3f124316f7c715d3e9a8764de43f4382b247eea5b4b58db9abc36eb5dfc67c010267262e0f7e17d22891bcff69579d535ca63f3c874bdf0f7186a83d5ecc786d80ef17b234d0eac7a3fd0ebefd0f74370ef2c3fb476acba3236086626b03bef14f7b276ac8e125a62738bff0c18d04e22ef24621f123471e648439ed9aa52ab770fb6bc55b8179f8ebdd2be9d287742e6b7c0730b725fe6d6fca2b30f67714179862f972789eee6b4af5730ff7413bd34fdb45db990dffcea64ec153e5f6b88b79231e1edfbcd7b39ab4f1cdfa39ffd8c7ef6c2e7fe32b5fea2362d7556abeb49045faf32fc0412db1c1ad45c5bebcfccba1c7cfaf9f1d325f3ec71cda6b6050c9bd60f6cf2777adf4a47b1d33bf7cb514ce035ee1f6c9fc0a696b91f2e316f81a909ae5eef2d4c51e191babe36bf0fb653b59c9cd145ef75188b26bb8857266f6abb668beeca8afae09f464731aebb67a6c03eba029f8f063c83a1a10594d3a746ed423bfcbcb26f64fa0a67f3cdd0086baee5776786d6c7715ecdf2afcecbe4dae2eb02f99b955d30b778f2f9dbc305718bfbe391777de45d1f79d79cf7bb7edef558cf77c4a78a3f1b739645f1735e8e61b1c7f62c0c5e695859de5556a75137d806afac91f064e13df6b2a35191e23a79d308d7c92e860abecf3754658e5af177f548cf31e06e737a2c6b9427e8cc3c9b37a9802ffc83e6119c447d799cc2f09ddaff1bad73aa8e4ff177a9da5e1403ead817269acd33e8dd66b9aa64aea80318a5aa35978ecc13c349edabc7033f502a7f98c1488d3ea137ccdb1ec45adda77ed3c1fc4c1e77439a5fab76ab3ad109ceb42ee3fa8df609b1afe57955a43d79ea14fe83e6458cddbd98d85f2834792ee216677a49661d05707764cea5cdb7b749ced8b27c8852394e44e7545e4469170f138d3dc634a675a7136791e5b3839cb58bedd1545e99d0ffea8d135a592bdbf768bf678aff0dfa45137d9c65f353ce977399efd63b8be8b5fe5994033af7bc66f8ac23db71dabba4f7d47e5d6aceee08dbbf477fae90af4c2cbfbdb05a8da959d77f0f7d5a2fbbb79550ead8ae15a6fabcf15d2322b53fe80d6b3d7ccead9cfce0d1772fbfc7cfdff73b6366be556abd2fc6d76e74fa9cd579ffe32d6c0648ebfb6f7e3344613344fefbcaf2d1b8fbf21abe8f0a70ffef3ef3549ddef43e3f533338de87cfffe80d80df92479abcd5d5cdfc7310f35d0e86497bf73c531445eeb7260ef4c9130e72b6af06fdc93bf7fe2185ffb1fb8af55da4f51a0af48b17e7d4cfcc158e378af4fc17b92f0af5fcb31831d1937213bd27b4165a211601feeefc784535535c9fd353023c5d68aacc4d3aae0486978defcb629e0f98d7e7591fde2fea0b29face8f5eaab3f6738dea0f7fc1be6e139d811f67685424f493e91ed98d85d3581ae8d71b5b7e73f9a972f3883716f2014a608bed511eaf18e56099e85adf953a7d17386c017b85f75d8df0348adeb67a5edd289e27dc332df783cc47aabf0ae699e6c4f27224733c0ed088c2b106f4637643936f34ccc19a71df055688e7d1e3f498c72fc9671698d0e708750387cd23f472d69585a9424e786e685dee4ef30c5fab139dec7be481738b3334047f6735c30afa1e13bd7c5db071b6e8f1f0f75782373bf78e028d3bbf8d6d3ec4f8f87bb2f17366fc8eceb739a4dac9da626a3fa77d4878b62b892eadc9266236b119101ffccfcd7beb897f7f919edeb8863cacf596fd89d71b864f9bbf3f26a39f13240fdbef8bf78f09e50d7ffd47e538bb04e66f98998f0fb21f52f7e8f5e75510078af0f1f6f1daf8bb481de436b8ead275c8e3676c91f1d977ea21195f38cfee1caa63e4f3d5e6e46312f58de84cbe69e933f9a6520ca89ad121cbcef3be5cc9a13ceb91d8d6149bf50be0d84be5b8ac978620b5ecb959b7a65227639f181e36e50bf43d84c7a6129d4472c6397cc6b15fb93e1cc35c145f9d9ec75c5bbd574b6e61f27da2119a87552c9e0f28df370871fdf3d4549b13f2eec3ffa4799f19aa3dfba23d0ecf96432183b762f8e6144e7a4234d168edeb35bebb0ee5504ae4498ee7428ee53b0ee5340ee42d0ad438d378ae4aeb9d0df2b3b36b9d09acbcd8f7a097a0837d7479656b3d4757377349cc8c13fa8c94481343d7644fea7439b32e7b08ef8d8ebcd279656bf1cae48df49c7096df5e5a7c2db03bfd44bd704f0cd511424343ae5ec771516a9c731c5f21a86934b76890dc7bde928cefd53128de2891ff9c98fc6469d6e5e9dbf675fd36d6d7ef6367f531f13e9456e363d87a7a7a7f795e74c702ff3e9536d2b891e57be0df491fb5fb73f465f1979cf2abc639bd0ef7be7eafe00b3bc3dab3f3f7cbf3faed435fdf6a7fec036f5c0dde38b37f168467b402bcefe9fc6fa7fadf39fd24e973fba6c1dead807f2b632fda2578644fb8634cbee1e5dba8613a37243643a4f6e6a41fb1eb59f52ed82bb32e39764776cd697761687d8ef97d077abbd696eff1bada6d649fcb7ade004bcc0f933168608e4e8bed87b5e725b367f6580edf07d23fc8dd237c0c5bcff4ee7986f9d53f2ac706c999787d98e4bf4df6172251e174d59b5ba1e0e2b361b78495e90fb3369e710113ae6882097adc2d27702f647c8c6298fddbd044dde997ba883e135ed3e4f78e84adad09c04392e0dcb87d7da649e66cc75a1ea78def81093e07135cd4dfcae43509ae0f70ae057c8bec980af41e5c8137b8629d6abeb9443ec3e9b5e72467c87aa5afdbd762a80d0ea97658e533750db986ba7199aee6b9cf3d5bb7f7b634c21e1abda93be04e357a5b87b1cfac9fff98665d8455f8c2fd98e7f7c67a2be7f2f525746b625c49b63646ee901258e5eb72f4a5fd7885f8f14c5b28d6aca375fe883f233f762b83232e9ce34d72229dddbb931f5f2ff2730eb500b56abf90e66db37b96e9e79aa232b601b3e1ae75ad3f2b96cb00de8dfc5aadef79a6d8733e3b826b8b4e539a44b5d48bf7ed1c78b70a380a73f7dd29f7452e2f9439ca628adb355ddd806d4dc69b88f778a43ee5f625e0f706dda88f065b0312afc3bf3d81bd43e9bac86e0eb96aec4e7e1ec7c9e5e2049ef1744f85a529ae49e62cea6b4203616a68c84bcfe96e0f42e1f9b88f3a7e11bda7fd9c6d518f60eebd78340eaf5a53eef879dce917ba9cc694d75d23b59be913cacd2f15d87f2563ff123e5fe9f398ef031e3b9f3bbd41ec1e1ed6054fe7d33d4179be45f24ceb3cbb9fa39a520df270d7d561db398385b0e170a72a4b8217a979a62a7b9647ea5625f4d74e7e7efa3d4ec0af1c5efba27d1b25eb96e5fa154af71dee1fcbb9fd0ed13a592f449714b512fdfd3cf6ab608e52f7b815a6b8f9c16ee8eada1976949129c66787e57ba5365a991d65816dd960200c90860262e79f3707702107dfb7b4bedb219b73623f5611acc991cf8648837d3c2edcc358bc27233d57f44c1fed2564b857e58036fce19820b346897b3d3fdebd06a62ea7a6d75d993e62fb18fb57497e9e2ab475729e2fc8f4f9096ce7a91ce17017799f1d81f28532cc10d57da3cf012c8eba21796dd6eb0bf53a6599e0c3c19f9f185a776c8acdadadc92496ced6ec2ad7c9dbcd6b4aaf1107e43b8c97e9f7b4bf663e6eb1ae75039809f0e7afcfbbb5a16b7d395ea3483f53edff8fad7539f2fc1afc39e5db15e362bb09cec95e6a2cc28fec584ed0b3ce8bff6514fb1173a476011f90e4b4a5d86be8d141a2e753bd6f2e750e89cf97f7b939e3fbd077b878839a554ffbf189de98b121b697881fde225f9180c8bb93bbeb75671c3137c1edcfed836bf30caecd4335a88b6aa34cfb1eaa93de888863fafa785a39f15c67c09e7ba15e23a4b96b7626d83930793de6d0064d3f654eb9627dcb6f2ee8fead997ecc67089f579b93949dbf013f6890a8b156e8ff2c4c3e7deec99ca6724455f6edeed37028ea2fac2dbfb9ae0ebf09b6f6dafc9fb41672516e58662bdce4ddf4a6eedc03c5782b6f032755e09ebd048fa217f5b5c7be698a9f8b9dc9c00a056c67882ec7b4c7b88448edd96f6fd120ef73d0c31b308d235df59651ee76aa6c33395ae8eb8db40ad4c6b490e653dedd76558c567b42de9df8df83ec38a2bac91dcced031ff6159c9125f3426d5e57bdb9aeca41f539a1ecb36f281f041c09728df1ebe3bb5e57bb63a475b752a7bf221c090a3e3be4fbd2359088ab215b438ab0c555e78e3218b1abf94d15ccdb23c7f4c8313d724c8f1cd323c7f4c831dd418e89d8e5ebe794a07ecd724852cb7d31f986cf3065babac17b6f2ebd7a4b5b54a6c4d7273d6c59dfe01cde2a85f2e5523b35829e3888319e6779f5abb79690cc8511ddbfd7ac5f38b9292db81e899988dfd43a6b5c292e1ba25b1c735bc37a9eb38ee9b82ef2dda8fdb91b8eb99c3cd2edf1d5ec79afacdf99e182c8e7d12bc7d7e11b9ab025fc44b5b959cfc52595d49e2fd553b0fe397975647eb3b2436b876b89dd91195ea5c01c6579959e0fdafacb6aaea7e732d716ece5424681d5a13c236a6d8544f89d4bf4b79cc29792e0c8f94f9b7b3740bcf3457b1d9ebd971328cb0564a84f37c905740883750067b5977f33111b5e9f7333e193d35c91f3e3350f63b47692f522dafb2dd87e3b30c5f6c820f7e9d91cb4c918e19cf738aaef5a2d074c5c4fb9905f99c83125f6cb757dc3bbe0e4dc9b67a965f0ba15f275a6b19049ce4eb6d71ffece7fd49dfbf0771efecec3df89fd9dfd3aa7957216e7d472cecadf884dd03735c5750a3f94c4151dc6121dc60ebfed6269c8dd2e6e5616d5c74fd78cbe166f94e424cec16a25fa936f7fdeeea67696e02c3679f97ff0fc191af2ded43cdfba342fdbba521de6bd6349faccf73a86ac3ffe35e3a828979fb4f99403a31fd8fe7091c73953052f6b22bffb33f13e849f337b4eced3a3e0744d9e222dbae388bdc91b77be56c528a7bf2eedbfede2291d1bff5cf4965fade952769e09460bf42242c42b1ce32c27f8d9dc5ea8184395e00e847849ed393017e467191f6c178f2b75ecc016ddc0ccaec1ddc6c2c5cfdc0e277c859a34a93edfc16936e32b38ed91efad2de2ab2f6e95dffe5e620ca95cfee22e38ee7fd3b9bf619efb2cbfbdb7fc8fe0b72fe62757515b88e2bd8fc47bfc3d4ae5a3cfd3f9cef50b92e3acc61ff8aa38faf0bc327dafbe6bf9b667b76a690c6aa2772a57f30bee447c6e9acb18239f3a6779d8d3baa1f567d8b6a5e7fc6eb8824e88396fb2b670ca7b676d423ac7578c4fa9442e76b3b2f37857aab8afc566fdeeef8db23e69eca37c51fe3bae7bfca7cdbd217a53238f2bac82bd4e9e7df7751e6a43d3715b0a6796c739b3af5f27a98ba63647860f1c453c1ad4dc0c96a0e21a44e25d3e663bb5ff737814f7f801d9f156e30b548cbf2831bf8ccb3d3f4f97edffa92647777ff8d2e2e7ebf630a867bcfb03b77157778af3c06ddccbdc3f701bb786dbc0eb6e6bef55f847785e6ad6f6f4ba5b9ffe5df723bed59525b23dd770cd96c0c613f3a27f9dbf128d97d4bffa513f0be30e30eb4274a67475ed5878be3bca36c155ff15fe43192e15b68f42a4d65ccb5f6cefa92f75e82b0b5d937f15dd93c7f6674fed4f8c782fe2b9a6fb446e247ceedbd746f264cf54dba1517f8ff28f48ec07600bfcf61c6ab6f46eb1a69344fe55702d1ff64550b4c65af23e4aaffdb19ec7f4be9a5a7eb366e5f772f78693e6477f877f27adc193c369b357fbe1881642f67e4dfbb599b5b6786563abca52e78b6b80802d118723e017c07ff7f17778211ec7f9f76fa19ee47d77807701dd19e833807520fb2dbe077c2bb2a3b7a2e931246b91ea6f2cf2ee17f4e39c32fcdb17e1db3ea61d9fbefb8ef18717de9f67dbbff8fdd7943725e2b387fe74b66ee206dbf4351ddb12111eecb5e53727369db34379ce9cf52bddbf5fb887bd5530175a62fdc0266ad20241bcb2595984a3e97ed6d157e0bce17bd750ed25689a8a7d8805f0de649aa6d49786e722b5b73feeca9beb1276a2c439ceacffc1d86cd776ed8bd3a6c0ed14bea935d7f09b21899393bc5647b8f5cbeb649c644fd3fbe299f6d8475a0a81150ac0a160f9f68af0f1bce23bfd7ff05aeabceb9abeedbdb58409e44ec5e69af8b129fd5ae2e78c0ec4d8f7bed67e3fb0eac20af20e195cd5fef35752a3e03c4d823fad17da4b48f3b1a0612b365692b859e135b446d9d8ef775eaf2667884a78a3ebf461f2a0af46deb1437cbcbbbdfb0ee178f27eef803f7550c3ef54ac400e560872869aec225e99bca93167edbe7cf6e5b9eb208716eaaaeda19620d85a7f66d6e5e0d32fc5ef945fef12d3782182e969e3f79f214d72323d22d11d4f791deb86e88d0dd0a3060dece89e307dd7b37c8fb34261ac6b02ab0505487b677ae75b3c7f168f1aa93ee48eec599a12583ef109acf0c9e9a9d826b8d82671489317713d09dbaceecaf4bb9ed5e911bf6300e3f4cc8f06e407a09ec0379776475e992df01f7943ed832618f9bdcab5c8a16fcaf2db53a4f69c5e3cbf19cecd572793b3a03d37d15cb8f13e502689b9a7fd3df6cc50bb33c6fb94b0f34b6c470cad8fe7ceb5589d46645a546d4eea804fb245d374bf731ce3825ddfbe8d04c164b6b3837d022eaa8b32ae299d57d654dbdea5790dece702cfa7e53789ce7d1df0e9e15df50c55cbb7971a6f753cca9bc0f4e79569295b623b24dce839b9a04b7237fb902f58a46ddbe57493a31c11cb7f86c5f80b0fe6e20ac67485f347fbee9a546ef212bccced0912bd28078fcf26b591e1e72051fb17db94cfce2bda7353dc3e9fef8f61bb3d6039f808ff706a3efac1557c2daee2f8bce46954fa1e7e5fd00ca4f8ccbf7b1cfceceb72b63b1ad9e76a322b4b03df6d838c1e6c5cf38a38b649fc4eb11b2fb791cbcdd56d6d9f3ea6cbd7ea135af4c5b5ea8946f648a8911c6fe4e3dee07ebc903678bcaf1bb026d416da9abc36eb5d0fc71880bb98f63de21bc1dc24eacad82f143c6b0adc3cd88672a4ff9cfa9b6c8dcbe89f5e55eb9ecd1be573a5fbf45385dc35b9e33a4a6889cd2d1a08aee9f71c03729ee03381966b623f835e06d264e03702bf88703831df9f69e2df8afe78491ef85cffebfabd362c067add89e19dbed8e6d0b95ca4228c8b691944b1b2e52b63a47a3ce05e20eeda797ee53dc6ecdd76e2cf91f04a6b8809ae89b3c67517b84c724f406f64757d2979bce43beb51a3be16f697af7f4672f6432b7afe793dfd69df620458e84cdec8cedb430e8d9f5d6b0abc6c6b8693303b13c7aa2b6b3ce7646f510d77b11fe8aa1dea6a0d704cba866ded666e03a60baf31d523d91d6b62aeabd6b1df1d772f1e77dca79697afcbe478e4fafb91b1ad1db32ed0986c33ff1c085b5b13927538479f4e1c247a2eaacbae19e7ec0253dcd4ac7a9fe03bc95de566f39192487201380ebad59c0e3b6f99f52d9677b80d5da5d7b4af7e218cd5ee39257ba32e73493feee6315693cc5d1af72c9c36be47cc7e4eccee14cc7356ac13973aab95e5394dd15b1a45728297c91d4f0cb53db5fcf6e22af31af5834479c37bd2a64be6f42ea19172328eb368ee452a9e7f714ec57f00a62e81dd25f5a893f3b80fdd902fd00d89c63c8d726791b664d65f7b5313fe9aca7c676e61f04ac3cae7f7619cc12b6b243c59784d5f766a2cec7b767bd5602d5080d4cd44eab86b5debcf7e0ee467236353e9f86aa6ef6d6cf5b4782af2612b889dfaec59e7c549d856af0dd11bb3d8c5eac82bdbf72608eadb026f68dd1af433f8cadaf2956dc21fd9e1f030eb9263f1cd05f6d3adbae0812607af3b86d6ab3ae7f0caeea1842f56e5586fb9bf23e393de51bd70d7cfbec83dba13e776ba35ab23acac29c171dfcb3dda4f9feffd717cc1f13dfa3dcee8f768158c0ba64268d69f7fd77860acb33d7779ddea479fdaa34fed61b72e6db7cee853032c554e8f9ad481b922fd4693c6cb07fefd0bf04216da8f877ce78120f70b72ca1f3e834f8e91c412c4bae154a39cf8a2b7d2c3961d3f8db9979298c287a4f095716c53223f59bc47feeab86a9d6faff770aa5dbeaec59e55304fbe27361b59bee7a19110dfa1c07d1fc50cac26526a7f5d542f32314e8623d6a7728054dd89e75be0cc5088e698d5c34aeda7137808b1ddfc1495c9cf81cc595365871fe4688ec6071c7e03f8257d0bfb1773436d78a91ccc2571ffbec2d97c333442ecd37467f89ed6ebfd9ae50f2bc0fc373cbb63af2c7feef434796c403eadcbd99a5cb4bfb738de3fcd8530b5426189b47eddaccbbf24b11deabc8beff1b1dd51c2ff9fbd6feb4e1569d7fd2fb95dbdbfa938dda3ed31d6c5c444d01599ad460e75c7c1056a41fce221c13dbeffbe475501165028281292e6a247f7eccc00757aeb3d3ceff380726b8767de5375fdf5ec7c67d58e0e20c16b35ea8cedd3bee193fba6d4faf599f77cf57c07137bdde43b9a7c471337b0feded7ca77c4ce6a9e5c6739790fe42bbc55575b3ed53fee31af4d8f49d363d2f49864de01f7ec31b9649bf1982da5bb41bf7bc23c47fe253aaf31fff2fbd55c072d6dd67693fa2e77d2a57ad2d4a9337c025ba363dea493c0eab7c57e89f071001c44f36c03f7e360f945787c09d65f5324dfe84847647b4cff84c5d415f988f599c5e08c0b1fddc0370ae615f7462c17544e21ead315e0d610711f7d88cf86263727dfd819575edf8dafc379bc2a98f15b83b336e87e1e0af8778af0fdda9ad25d0f85c1ca747b47d3e73796383ee1845d084dbfc43815f766a06fb472f1463578d606cf7ade776af0ac5fdc3fb01b3c6b8367ada10d6df0accc7ba1c1b37e633ceb1af99dcf0af62177a71a56fb0da8f0c8ac3179123aef2b4be8f9542c14b369146e945d8f7321348489bd1079c712ecde70cd6f12362d882183efbd520338f07777344f6265bc53308a6146f83e8f9db9ebeba8730ae399f4f735ec87ff69eb287614d3bc9209bec84feb9b9da5d7238c792611c7949f8a111d14bb193eff8ae21d2bcdadb8a1e619827e957a7019d892bcbe4793432edf9ff3e42350873962b892e614dbf6de1e7f4f656394a0e9818dc6cd2bdb3b9877411dad0caebb0721ff7275e30dce7b7b6378009df383e9adf3f9988dffdaf8af8dfffaddfcd7733edece5225682e6ff365c933caf563af1d0f7dc73c2b3bb8886be3d0fec816d966a3333c7d5b02c78ee799eb625ef4cfac7704f35b1d7fcd00fb05f684fb70ccbc35d42c6d68b447892e61dbe4308f678037c277a4a375a647a2e96c27fd555abfcfc1be6d473a681c74308e491c1d0c61fe69feb98cd7847f3484c1f164332b196f1d71572c5fb6a5abd32d98e5c30d5ccde9c93907d39b90fbbdc477e5ae77d4d7d769ea1d59636bea1d4dbda3a9778473ea1bdc077c562063dd9fee35af11171550263b531c6d2c176e8162c1e145dd82f4da5fd448686a364dcc9bbadb9a98f72bc4bcc3f3bcb72896c4dca6b837581db4757584c780fdf08077f1652dfdc6fcb8b7eb05e7da8f8c3328e358e0a9642e66145f4538c0781f5f8035f28102203a871a47345775756c9378925fe1d8c5af09bf2d243127939ff9a9a4717ec11e46d3ed6dc1acbda984bf16bfebc42d8c39b00723085cd927e7f2a6de466a8de6b80647ee0914d7a235c379fa108b88ed2c59bfaa757f719c1ddf874b7e467dfb097b28527333c37537723fa07954c7363af3961bf45c91b801e704aac4f89dd1eb8fdf9faa837e7e8c694566f889cf4a42173f793f24b495265c6f6f0971bb7f2e6e3857c38ee9359dee81ec6f4bd62a3d794fc6d886863282264473271f037e74ac1965b8293dff5cda9b37eb6e5ed06cd454e908d4c9cee8587ba00ecf693516d669bc5aa311ebb30f561ad76ba37dacb91f30d04f828627b5c978433e5cfcfdb8ce6e28837da037b53196bca371d2c174a78ee14a30cc8f199d91a729dd88470cf33409bdadae4858e709637445de3738090251f6813a3ea7f39ef0bf8adc4f05e2f50bfaefe9394fec5711388628631e35b32341abdf76008a355c18e0b07b6775e40a6bc85daf1ff7a7f9d89d01557a3738643746e8eec01c089a324531dac6ec4c61b0fe0eb2ef561fe745c9b8c46fb55647834bd5193ef13c06b6cd8be9e89f34d04ebab707c31bdb1a877b83fd61df7979698d3779b4ffaed0fd2b10f714d1fbbba053ecf656353a2f1250da4ba08e8e549f02d5a39eb92ebfbfdbbae84a7745f853263bd3958fa6d0db9b1c5397a43e6748807b8d23f107d611ecf007c343f7d5146a240ff05decd92b503ede9f15146f6e6bbe260e34c45f4407dacfa1217b857e6c91beef02bab1173463a583e1820de8443fdb853e13c9e5b6b74019ac6b64db98be0059a3d458ecf858b01ecd0a60ff706c03aec7017514682d49af9ad2f54080db24cf1b1c4d4e6e7d197b984793f6821e2d852388f66a98370b62bc985e4e06de37a6e9f9acf2beae828d21c81ea880bf764ee5f96fe098a1f313c7a1f064632e560efd99d22115e9b1f1af18a7918cc3fbbc63083de49fe2decaa130d893bdd55be9ca00f7f0257b3651ccf1ccf5fca118d8577710dfebb1f7569dbba0defd12e6cee87c19e6bc3d9a82bc427fd668ad1dba06836caa40fa17c998706e6e3b14065b83eb7a617ca6293f714c6770d24653711f69b276ea18eee4807973a3182e8a0f03cdaad37bbf7cef637d6b400d1620fbce6bb0005f130be05a4a77156858a1b809ef67a04cf2d4839378f7b37b1ffd53a4ce7f433d2baf8e63569ed2ae4cc711c6ee575c5f2b585f66dded733de4169d9db8cf689e4d807d45c8e9ca07045c2efc5ff4be5cfc2ac57de03fb55577427d938db94ec3fb7740627cbcaea7989fd6195da77c862f58a7029ebc0ffcda9d29c83ef1fde47505fc1c426407bcb13da7de7d838f19de974be233fdb2a9f1d9b1f1115fc6190ad6c672e53dad2f87fcc7b85f45fccfab6ab0a5721182b6e192fa84e9f313ca7686b5adeac75f591f5a764d2afe2cf927fab9c9116d3b8d600c62b637cbee9fa9b995a8718a9f713030c6a60a7edb13aefe567e50e0c23de647a1fbc1029cb4c6a1186c44f0431ed1d7d030d772ac2f338af3aae7bf8dcdc3c94f54c0c6c0b55e7a5d421e1dc9417b28f0155bf81ec0b126d98b1137678405af695fe6495f37ceb993033758172efe347f6419fc70696e27c2bbdaf32d81d267ae3f3f5c2a4e0cf137578eafc1c5dd808b63f95bcc1e0871743099df7717bc70ecac5687c5fed818eeb6320cb6896caa2833744698b6ed6aec753c67dec638960603cdbe231a0c748381feaeb6fe1f80817ea4fa695338df9bf558667cd863cbd465d1663cddcf5b97bcd1d939b9847dc65a2dc2532c8e2ac2699ea3ae1d8efdb4efbe632e731d8bd94acd65d26b33ea8c6d5d94779af27367bab20384c1d288f29d35c1e1b3e702c7b97258cb8f7e6e1d8782d33694c1fe591d414d09f19fd8572872275cbe0fa2314f5ba60b97963a65c6b3f4cfd9b99236de7bcc7d5913db48eeb8526ce20ad765b91ebabbc3fdb9a46b57963a7a373a129d9baebd9d0ce727d21fe2062da0580713f3ed9239d028dcb129cabe29f48e744de18e36d3ce8b171fde8649bfea7df1f7de80554faf6926d6cfe47aae255a4e42d7e8dc3f85716537d93df698deff5e0ff68b197f3438d0b2b841a84d14e0bad0198a6b030317fa868ac7791987c6b0e745fdf7827b32e3bce6c2aaa5d6261bb7e638a63bed68ea0866facc85f68eec5b2e5c31b503b39f57742ee263bb721d4efbef17b2bd47a08e385dc1f8509cdb36944117f72b74c00608737b22f323330f66f1bbee158f3f18025c2dd8f993a2cfc27d2066679c894f48db884cfc2bc1232a448bad8ce719c220dd2775c579001d790384c15e3b8f954ecd5b4d6ca967292886f9d818ee9ce8a9bb72a839b28e782effb1e7416a69781e46ec9c5cc1bd829eab2b1187e5c5bc19e1e18afb0417eb119e443845e5331a57c11aa138f62c3ef68cff72358ee1344f517ee0a40f4af9806a84e7dfa018e659c57da0b7e9a578cc67e6e612a37a7f4be7fd8deea6fbe3335ec277dd82f94df2dc6a6eaf6df5314fd6c670a71bcb856b4b196c833ee20dee31666b7b54ce19468d1fc7d1b32427b1323a58ea24a87377d7ba0a3640941da34ffb10d606eb9226f4201bccec59dbd860661bcc6c83996df8b3ee590f4773da3238e9605457833fe5ed72ac65cefa74c4a510d64a733ebb16b81eba8e598a9dbe5617b16e763aa68549784baead5d1789b31aaddc49467f5f06de2e382f547c13f9503afa5e11cf0bc9cdaebb8f2f84ef34cb2ee79ff73c7b8f71decaaedfca1935ce539faf74407b4e4731a46bda0637fa3750a4564dea1331cea4a85e76fd986a5237c3ffaeddde0bfb2b6edd73d11ef620ad11de363dfe6072f3400312629c38f68344395643c2b83b41f62d71bd8df0ca9da16d74a6af649dc97a16c1fde4c4fc14ce53ff2d0cff2bd69772ea0bedb2eb81833de6e6f1a690f82ab85e4af189f03eae8578d3ee733fc235fb43a1d7d20519fd7ba9bbf2cacaa33193dcab35e867416b6b09bd95c1bd57a08384e6727ad0b8def60e399268af06e3c15821d0c77c65efa19610eea38e6a2dd5f72d53e33f9b2339ed3df2f7f1995426981bc00c759f66846f28c8037d25ce741c273fab23c770ad5cbefdd938ed069f23e453af1986ac2c6c4e745f2f14264e006b2a63ce7ee22fe233436124701c0dd4516b317bc75848abcf1fcc257fc01ac94bfea0b91ba8756a839f88e178aabcf7aac2a25dcb27c8887fe367f0fef9f1097adf7040de7783fd57d1bd8bf6ae29f25b5d9108162be8b7d389fe341c3ec189b59ad8b877a3cffb985b85e07a3bba00577a785f4477018fd75a53a7b0f23e45c81fd0de9abb833d38f16e5633ce8afaaf987eb727b5b03f15c749ee0daefb1b28167a1707e6f87c7a193c9015f58093ef2cc31e1bee7483715ce1fa89e4d9c43725fbc0f0e49de622df12eeb1bf42afed4b3d7cec79678aec61b8574b19574df0bcd070137908b77b30d65d08b8414b57019ce1fbd28a6b15256ce3bd63c3a9d2cddbf75d6c3fe2bb10fb0af87e180add36c6ea2d097f69b8966664abea80e595f7e0318af7d0f7af887d23b60ff9365f701fb6d01c9b1dfccd9f68fba6685e8e788e1ecbc845a0b5901c4b20fce560c6d3e30c74a56a82114f8c3d6b7f59e2c8313c899c176237cac584f7533cd7e7ea7b7f3238d86ccd1d1cf3c437f1f9cac479cd27ed5f97705957e1b16ec2613d7ebc876b6628f018701a607e02d3ed6d878358fc7d89c3d2be8ac7b25fac6e3b2cc86799636de4e9a0ae6b43b40fa6c2a0a52996af292d7b7ecad7e4c3c35d89832b887f2bc46f99134f761947763e875d1ea78617c5c055e4fcc277dda0af18fc19f921e91c06c549583b4cd424cc3387398969d4b711dd7f542e9ae20b3cc56b98b351577e267414ef13bb0d85f66621c86bec7f7872ea8eb8d877eaca1c50475d8ce172cd9dae74b7bad28d63e44bcc5f3335a8ef9fcb1819de149a98bbb60b833bf6a6fd6d09838d218e6d92034ee3e322ed7ec678abe6869931be81dadf2d4d815bd38ff43d93b8c548a79f31875f2987ed03a57db084f92ec2282a411db12c0d72a6ee39f2617e5586318ad98e6565b81f6433deaad3924fe29779c7f4a6dd869f82f92d0d3f45c34fd1f05364f153d4ab8e98c4ebdc9a2f9433b827e87ee33df665485f72581fac473e679dd425c4b9ebebc75407bc473fbbef87e92ba6fa7fc85df7acece0424d69fb84dc795bf4fb28ce5a88bc6309f6257e278c9361f43b12fbe842ccbb1e3d6bcd53dabce93821e405b92ed645f764af0566edd0870e35d4efaf03e0ca3ba33385c3275cc3f2d13e325c7985391007911f5ca4d69f9b4bd80cdf2d30de4dc790d56a0e066bc127e32708fafc4b18e3e4e0150e7def543c94e4ccacaa67e826fdc1380f41eaccc4f246738ca58ce36ecbc48345b10cdc5bc867127afea28ab312ea593c51efbd4d87136bf0199c867fae71bd3578e96e0c0fa07d7030bdf50e63d9c93b560637857f632d3f647f496e4653714cf46ebaf231e46e05337ea7295d077032c18e447384e259dcd7ba026a4c8fec93ce5a645f46d498294dcf48a72e3d27b33bcf431d395f99b92c7a5c6d1c3bdc453bbe89e99a98ae89e918df77ff98ae443c1dc38edeffde9c295d0e7d9bd11975874f78bfdc90877eb24d0eee01f701914d33dc8187fc299d7e07d99375a9afd0779b3d0beef3902fab84b1d431171deeb744ff71ea5c7da4cee1ea29ab2e5ca81e9c1b4fd2cfe2214cf55497726f0c85045fbb28b54d8cf999d2f8dfdadf1b69eef6c067bb727c4d3fe30dfd8cfda62ed3d465aee50588eb5e3c2b312d938b789bd49ae618f78d6bdef4c637bdf14d6ffcbdee929b7be3658ce1345df4fbd0074dbf7cd32fff29fdf2812e35aed77c05de73f2bd718de061314d2466bcdcf30137d8ebeac639d9d2e05d89b5b504c74176d4f469fefe9ff47ac3853861e54b6d5970d0efed34756d6beedcd670fd0340649b31d631d20b4fbc93f43f6f021c96637670ceb765ba8395cee15a66842b0bb403384bf9d80375e4682edceaeab43b14913fd3dd07bdf307837baf4baf271f8c8779c65e3a234f53ba9b45a4c7fc8e359c813a49d67903ed32781c8a01d7e08c8ff8e748ed57fe19e4cae39c744b7eaea3df43fed00ceb9e39d80f74651fe79966b8f73ca5ed69e23343f2e6272d6eb93514a7bea6486f71ce659ee80e8aa06d085d68ba83a5ae7c6c2c716de378c0ed06b15fef60d48583a07fb6261de55f9e159c7fd999ae7c3485dedee4e0d210e63bdc672cae4be6a40c628754ef387e1eda3b5bd03f3d6b2206bc9889188dd2a747e3ba6abc098dbf5d8c9ff3b63a3ca91112df0c827e9be6b8cfcdc719ff9e3bd4e4cfc74515e44ce31a8b25693ece03dc76a07b781a1350a7511d0df38527f510833e34c0410e283f4fdafe89bada67e8405e98ab935ec6a99e78da73aedc22787d645f073eb6abb1fd19f414869aaa316cf029af9b9b3bb12e75c32617f4cfce0535f5dca69edbd47319dff7e9185dda1fda7d959c0a7de72662587beeca2e5047a476783bbe9767c42f0e5beb19c53d493f66704ceb59a7eaad75891fb335e996fc8c8aaf29cc542573538f1c8f271f3f378f78f23b436e345995e090d88cdb733790700f909e47e4afd3eb35a0ead29fbe4f4794cf1c72dec926378feb830d728de7533909025d0cdb5008ff06fe7e759c5f872bfffb62ef3dc785407ab6bbde392e84f8bd92d977ef5b4af7f8ac4a07e005ba5079b5598af877b7ef29e63c998f247e4de42662fa71c4ae3dd9a3ce698c233fa6a317e639839c571a6ba3233b28c0bdd9993a86f0816240cc4167a912fc676b44c947a08e773af215bfa2861cb1a7c9f83eb63774756c6bb35f1e35468f797f8ac1b3523900fe5553c7685f1d2d61b035c8bdba279cadf211c50c26435bfec2fa5f7b76f2fbe5ac3d1bdf07397eef825e16e1115da13d640abdadae48ddef6b7f423d3533fef320c716d44252b9330a2f750cf60d245cb2ff70db43e763c5f1ce1447078d938fa9dcfbf93df0e95a8444b737e977c7eccbc6443e7bdf22ba77aa742c7a7f991df91df34189e3803f54de233f54fbcef627c42dc4fda88b98965cbab0a77aca398eb5733edfd57ca9c33ea54b4bea7e272c77761de5ebd7ab0af684e11a287a7ebfbd49c722f7afd74ca2f7f3e9582827c684852d8971f108cec1f2e3f5dda128a1771c714ec0275cdba71a07e114ab9c2b768db102bec1bddb8c1839cc55849a5e4b80fc25a1d74960db6d1373594a2eeef1229ce8a7ba157efec7f1cb6baea5f05fb5c9b1379a6b99774da3b9f64535d79277a68fceb48ed642b90aeffc5132de39eca366f5da94c7ad97c436a8112e8efcbdfb7393457c97cfcac8c138a341fc1b6ec03814bc57067b1487010172ba326d0735b2e02effb47b7387f37fcac49e47351fbcae57de9d17c65847cc42b45713fd445f08eb9fee912a500fe867f73f26f6e329de1328fd8c743d376f9dc0ce5d2be85f9d5bf9535ba5fd8bb027f2caf135f5ea1bead5c39c381eac37529db666ecac56a795fab131dc6d75d8286f1dc3577e1e5e8968a2e7c01e25e72587df54febc617cbfca3b26f229d42934abc3951dd19e0cbeed2efb24e2ba09f13c793474ebd23b1debe52ae3cebb1ac354b73b8fc6ad9178f1dafebd265ebc255e3c1767d9e7fb8a60b277e8f7a44538753faf77a8e49e2178ea31a1fb56286e339c5bd414487a6e427dc9c77ae8fe24fbfb08f6e4fa31d5446b65758a9973f5b4d5605fd279e073d8b55b7bdc9eb0ed09318643717a180a4f548c1b5ff3ba68c0d23583d89e1c50183e9a2ba6e018eba0f737cc5fbf4ae4e2dacbc52c5ed3baa976e58eba891e9ebcbc9f293cee6dbd56f1be2a339edf49d7eddcde16ccda6f408547a6ce8127a13b6e65093d9fea8f8afbc9cc67de85f7d4a67174a47f385fcef15995a0d5c79cac8ea1c82da00e6fac55a69e97bbb70cf9911aee81bbf35a63db1b8cffb69eba583c927b9cb1f7df83d756427e69985baf809f93871a87ecdfd89e5363bb45c799b2a9c7a168bdea8af44a7403a72116e5c4cd15b7c78ee9ce6d4d99aef1f9e3e475d57d7167e623ae3d4b6ac7a11627b597a668cc1bac93b20c70e4c17d4e7a04076b208ea0d9912068f2c86c7fa5c9233779e47e9347fee43cf227f7817eadbc6a25f9e8a6ffb4e93f6dfa4fef66876fe83fa56389a0ffb476bda6a18ffd427d6b757da6810f4cc74f4381e0af4d3f9e87a9497f1ea52f4bc764057b488b8dbbaa1ed14bbc77ec7c442c366d27b561829c47a97a33f8995573fbc463fc640eecb6bc52da4fc839b658bf437b93f0eb82da4c902fbc8ee79c3df7f7c7b5cde2efe567e8bd37e41f5867f160b873cc8566283d1fcc487e0ec7efeaf47528d2be67c08f46345bdf813ac2df4bea1b4f36407754d06f6abaf216cd83e5d25c6dd199af9a333d6b1e438c6d8a5bcee0ba7088f6aad03e98eedcc6394e35c8cda098e0f4bc8d21c0d622d0e43505d927f70b8e099da100da861b68b48a2368a0ef5401c9b75375225c87a929f6bc06f1d63f02b713f5d4b0795a1b0c48830161dbb60603f2b53120dec937fb0adc3cf378fdcf9ee3fa1f3f9a3e96c07d8cf312783e68fed884ff45e9df0ba336d63c51a5237dd7d6a5267f6eae280e13e24f06bddcba3ab61335561bad41706e97962a6d0cf4739f772da5bb227d4135e1412dda6799f4f92be91539f53edfb1cfd2d5952ef2a35f8d4ea85342f9dee93e7fba1fddd6282dbfa806288eabf69b0bcd15c9cf4d2170d1798cf59150fe75ba3f9d7a56d397d9f465367d998d8f756b5fe6bbe9f6deab8b136367b5b278d110e05ecf13c3951383b3736075e4a265d650d3f8ad5bd7e91fcdc999c094deeaf7b3727051cef022d764986b0b38b5a9da02d67838f92d742daa2e5c87311f2b5173cacc4f563037f5aeb7a4f0b7dfb7e6928c91be2cb6b5a82e7bba1feffe984f147b0ce877f20ae19bbb3e164ce022a3bc22ba0b2c41f6230e370e6e8d3ed6547175e5634bb45b7fda9ab70ece3b3aff1f07cc6f1070700e8568deaa8e0d5f507c3aa7c731087841d978d07b8efbd2777f86662dcb8722dc85b37cbab525fa1be46ccf706d14f38e929a26e98fc0ff0f8f99f0c3beaca5dfe8f758f169eed8347f5cca8a4927942db267f349093d68fc4157ba589b03e30fc4d819c7b54ebce7e87a5c1fffdd10c74c69230d36864bed45d1da18c23bd1a952a5a3ae587ba0d4c6bf60cc25c6654c0c0e12bcb9f0271a376dff3330e8efc4f7e09c8dc6d949dd3608fa0137e78cefa0733c1430a6fb6872d043f355971ea282b5fff0ccdefdee910937e5f55ae6848ff65d17478ec9919a7ec4f51cd85ae0c2ad218e77910e5bfc1c605ee230476609f231cadfc57aa90afbd165de3bd17d4ce5cf3f63cc55dd39243f3a277a79e7b49a1722fab994cdf79df25be39c9513a2fb16c3fe5d7d8e82dc52e8cb85f9a4743ed639e80abb56967d97f2bed191e06fd7fec8f0c5b37301e2e86072f3ffab3f66f9b899399777d3ed1dc1cbe675ec67f4ba5dfede2c4c538eef9d5ffdbdd2f2caeff5d2f9bc9cef6c1b59fd9017e7a8b7bd768e4c7194159b5dfc5d4b182c0d61ce8a6156bad0db44bd41610c43f6f7055e34fb235dcf8ac7b943a1bd5908f2faefd9a8657a72cae73a8b170ef786d2dd925a1303f7560abf9bed7f93711cbfc9381875d22f398ef6371907f72dc6e1fd62dccfb17a298a5b7f0265d21b7a53df4a73419cab2b857703b45cd95fe078abeb3d2b706f209f7076af31f13ec3778ffb33337ea7ab0e048fada5258edaa91c7bf03bc13d50b4de92e5af6568b987f7607bb3b8aa5613fe7e66fe207e9f25e2f513de4316cf7f5fef3dec2f9a701f8ed91933efce12e2af8391eef52e3b5773b6d726631f6f7506e741357cab1f9b72ec8df46a707085f77f913a69665ee8bcfd022a80a647f20ac06f6f0c8caf4dfbb505fccc03c3cf2ce0dfca0c5f33c43665c725741d637aded61d480eb8eb184fd25653a5238b13a10c1c95a5bc5fb2ddb7635dced446b3d6dc10d685f29825da8d96866b36b5b41d2d93119355623bbce9455f9eb9e783f350b4667eaff9cb8963b8ead97a168f76682fefb45ff54bf75c3e3fe5825f2173401d753107876bee429ff26e7649987c759f329ccf709db2de955cbb0b759a6aef5e34c767b033e7f78c27bd0345da68cafb2d77b553e0aecdb285c13a91b19ecb37e2f126eddc056c7ef48c62fe7dd67803ff4666def929ce99ecbc5272ff9d9e5b707c77b4e119fb261d8314d82f2b839ba6f379fdfc393da0b46e79ffe696779b9da96f708c9c7b816768691fa1c0dc4bed5b7fdfbc29fe843bc0c8935fb847533633f8ffe40c5cc28bd433cebfbcce5c6fcde0cf2b30d7f2ee967dc688630bbc3b5d472970c68eb8aeec9ab73d43b9f11b54469d232b575266ef0b59f70a7c3e662ea9b6b16c643bbf608ee3829f75d91664e594183673c8c2fccc2f7c5f870f7a5e3f1e0d6170bc5f4e5cde35ebf795d76f5d4adc56bacf79de46ed74d5ae2a46a9b50dd5d258d93af8424dcd235f2e08fb34a59cbf1aee4d13d9b752ee863ada4d1cf714cf39b371bb8e2166f12fb3b9d64c777cb997c81dec17b23c9bddabe6ea3ed5f3eea84bbe22c34762f83e85cec41dcf07cb9fb9d46bcade3357deaba73973d0da95637713394393f05b3b8c7a73c5b9dccbb929c393a0c9e266bf10b716c83bb26cdbdee4649fc1bd7ead7dbbae2fa1947b897136280ed950032579cf5ffcdd333ec2e5df457b1bf0c81f61f060b0e6ef15ed8f683e187d76d3f4bac674e5293e73c712e4b9aeb4e1b36a6d2cc1de5902dc017573305c066ef71c774846af3de176c13f8bde45f8e06d5ba3f0d6a08f6c511b2edcde1ee4e999cfc3038f3994919f1770b109182f1edc87d4f730b90b79e42342d3fd695b04a3df1b2e7fbec9fd9f6fff33d8fca9f8db9d3afbf9f63facfb34f1ded87d1a62bb657acf9e5b2379a729707b05474a1aa7be1eec8742f0bc88777f7cffb9f624b437f780ddabd8d105d802b2f4aea17b3fe8af21fdd21f5b4de58f593a23a630685982ec1bcba007e5a5b57c5eee7e3d2fb725e815a5e7e3c595d13e7586c208e2bdb1e4dfd1b903ea687f973e97d31e4cdb74573e62dbd0a1d62a81ed8fdd89626aef9deab5ea88812dba667f3dd9b23c1a95d427e10315ef9b80eb885f6ae4ae2073e74179be5e337d488b73369620bf98c200ddcfd1ded0b8ded61006ef269781ab679d79f8f1be687df49436f9b72a4cded47edb7c86ad7fff5efe7c2ba15f2e3d4f30ba8b026e1ce915d076138d83fb89792787839130f17f1d7fbfd8dc3dfab7a33396e6dc89afcf2ae67bc56c19ed7fc5f6e6e94e6b9bee7a17d3a62a713fc6f94fdf6db323aff43eef98b82790e2e71cc8b3971c5a6d79388712e733d69ba329dd2efe2ee6bd63bdeaea14ce3bbc83fbfec37d887c6fe1c3314589e90b15b107e11a699c030de5e9bffaf67ffff7c31f0f1bfd6de1ed1efefa7f0f7fafed87bf1e1efe7890747781feeb3ffff9cf1f0fcee26d817efab87c7bf8ebe187f3ea2e7e6ce17ead6f97ebfff3bf5cef87a5eff41f6f0bcbd1773fece5ee87b3377e58afe67af1f6e3756bea70bddc3dfcf1307437af6fbbbff59d137b07f5371e5f4df2a317fdcd5eecc87f4f5f5f83ff1aeb3bd379f8cbdb43f8c7c36ca7c3c5c35fffabc3ed22f8d374a16f5f3df27785d7c1122eb6e1df26ef8efef8b8d844fffdb2d8ee127f1bfdafc46f8c5fad3dc4b3100cc05eee9cbdf12ff3d5650c75ac2fbd87bf766ffbc51fb7ce9af03a7eb5ae7ec00ffbf55feeab859f232fdeb64b3c3fed7fb53b6869ff3f000000ffff010000ffffe88e1a013e400e00`))) diff --git a/types/oscal/profile/profile.go b/types/oscal/profile/profile.go index 85a4dc4d..d0fa06a3 100644 --- a/types/oscal/profile/profile.go +++ b/types/oscal/profile/profile.go @@ -95,7 +95,7 @@ type Group struct { type Modify struct { // A parameter setting, to be propagated to points of insertion - Settings []Set `xml:"set,omitempty" json:"settings,omitempty"` + ParameterSettings []SetParameter `xml:"set-parameter,omitempty" json:"parameter-settings,omitempty"` // An Alter element specifies changes to be made to an included control when a profile is resolved. Alterations []Alter `xml:"alter,omitempty" json:"alterations,omitempty"` } @@ -123,7 +123,7 @@ type Exclude struct { } // A parameter setting, to be propagated to points of insertion -type Set struct { +type SetParameter struct { // Indicates the value of the 'id' flag on a target parameter; i.e. which parameter to set ParamId string `xml:"param-id,attr,omitempty" json:"paramId,omitempty"` diff --git a/types/oscal/system_security_plan/system_security_plan.go b/types/oscal/system_security_plan/system_security_plan.go index 07e413d3..2046638d 100644 --- a/types/oscal/system_security_plan/system_security_plan.go +++ b/types/oscal/system_security_plan/system_security_plan.go @@ -490,7 +490,7 @@ type ImplementedRequirement struct { // A reference to one or more roles with responsibility for performing a function relative to the control. ResponsibleRoles []ResponsibleRole `xml:"responsible-role,omitempty" json:"responsible-roles,omitempty"` // Identifies the parameter that will be filled in by the enclosed value element. - SetParams []SetParam `xml:"set-param,omitempty" json:"set-params,omitempty"` + ParameterSettings []SetParameter `xml:"set-parameter,omitempty" json:"parameter-settings,omitempty"` // Identifies which statements within a control are addressed. Statements []Statement `xml:"statement,omitempty" json:"statements,omitempty"` } @@ -550,11 +550,11 @@ type ByComponent struct { // A reference to one or more roles with responsibility for performing a function relative to the control. ResponsibleRoles []ResponsibleRole `xml:"responsible-role,omitempty" json:"responsible-roles,omitempty"` // Identifies the parameter that will be filled in by the enclosed value element. - SetParams []SetParam `xml:"set-param,omitempty" json:"set-params,omitempty"` + ParameterSettings []SetParameter `xml:"set-parameter,omitempty" json:"parameter-settings,omitempty"` } // Identifies the parameter that will be filled in by the enclosed value element. -type SetParam struct { +type SetParameter struct { // Points to a parameter within a control, to which the contained value will be assigned. ParamId string `xml:"param-id,attr,omitempty" json:"paramId,omitempty"` From 97c7ad179e80b11e8c0687c0a528f8a9b7166b60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Wed, 5 Feb 2020 13:54:33 +0100 Subject: [PATCH 110/110] Fix build failures after latest refresh of the OSCAL repository --- generator/manipulation.go | 2 +- generator/mapper.go | 2 +- generator/profile.go | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/generator/manipulation.go b/generator/manipulation.go index 693805e6..e9baf2e7 100644 --- a/generator/manipulation.go +++ b/generator/manipulation.go @@ -67,7 +67,7 @@ func ProcessAlterations(alterations []profile.Alter, c *catalog.Catalog) *catalo } // ProcessSetParam processes set-param of a profile -func ProcessSetParam(setParams []profile.Set, c *catalog.Catalog, catalogHelper impl.Catalog) *catalog.Catalog { +func ProcessSetParam(setParams []profile.SetParameter, c *catalog.Catalog, catalogHelper impl.Catalog) *catalog.Catalog { for _, sp := range setParams { ctrlID := catalogHelper.GetControl(sp.ParamId) for i, g := range c.Groups { diff --git a/generator/mapper.go b/generator/mapper.go index 223c223b..d92e4bff 100644 --- a/generator/mapper.go +++ b/generator/mapper.go @@ -50,7 +50,7 @@ func CreateCatalogsFromProfile(profileArg *profile.Profile) ([]*catalog.Catalog, if profileArg.Modify != nil { nc := impl.NISTCatalog{} importedCatalog = ProcessAlterations(alterations, importedCatalog) - importedCatalog = ProcessSetParam(profileArg.Modify.Settings, importedCatalog, &nc) + importedCatalog = ProcessSetParam(profileArg.Modify.ParameterSettings, importedCatalog, &nc) } newCatalog, err := GetMappedCatalogControlsFromImport(importedCatalog, profileImport, &catalogHelper) if err != nil { diff --git a/generator/profile.go b/generator/profile.go index 4c148854..7ad81c9d 100644 --- a/generator/profile.go +++ b/generator/profile.go @@ -26,8 +26,8 @@ func findAlter(p *profile.Profile, call profile.Call) (*profile.Alter, bool, err if p.Modify == nil { p.Modify = &profile.Modify{ - Alterations: []profile.Alter{}, - Settings: []profile.Set{}, + Alterations: []profile.Alter{}, + ParameterSettings: []profile.SetParameter{}, } } for _, alt := range p.Modify.Alterations { @@ -105,8 +105,8 @@ func GetAlters(p *profile.Profile) ([]profile.Alter, error) { found := false if p.Modify == nil { p.Modify = &profile.Modify{ - Alterations: []profile.Alter{}, - Settings: []profile.Set{}, + Alterations: []profile.Alter{}, + ParameterSettings: []profile.SetParameter{}, } } for _, alt := range p.Modify.Alterations {