From 6d19fb0e6f2dd8293035be5bf6779e9d3e6ec226 Mon Sep 17 00:00:00 2001 From: Matt Tesauro Date: Tue, 18 May 2021 20:18:34 -0500 Subject: [PATCH] Updated to handle upcoming changes in DefectDojo 2.0 (#10) * Many minor edits/clean-ups * Updated to handle upcoming changes in DefectDojo 2.0 The setup directory in DefectDojo's repo has been cleaned out and had a script used by godojo - the script's functionality was added to godojo directly. --- bindata.go | 41 ++++++++++++++++++------ database.go | 26 +++++++++++++++ embd/dojoConfig.yml | 40 +++++++++++------------ godojo.go | 78 +++++++++++++++++++++++++++++++++++++++++---- os.go | 13 ++++++++ prepInstall.go | 5 ++- ubuntu.go | 53 +++++++++++++++++++++++++++++- 7 files changed, 218 insertions(+), 38 deletions(-) diff --git a/bindata.go b/bindata.go index 1154a2b..44e8cd9 100644 --- a/bindata.go +++ b/bindata.go @@ -1,7 +1,8 @@ // Code generated by go-bindata. DO NOT EDIT. // sources: -// embd/dojoConfig.yml (12.361kB) +// embd/dojoConfig.yml (12.556kB) // embd/gdj.tar.gz (11.531kB) +// embd/setup-superuser.expect (290B) package main @@ -70,7 +71,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _embdDojoconfigYml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x7a\x5b\x7b\xe2\xb8\xb2\xf6\x3d\xbf\xa2\xbe\xe4\xa2\x67\xbe\xd5\x40\x27\x3d\xdd\x9d\xe1\x6a\x39\xe0\x24\x5e\xcd\x69\x6c\x33\x7d\x98\x67\x96\x1f\x61\x17\xa0\x89\x91\x18\x49\x90\x66\x7e\xfd\x7e\x4a\xb2\x8d\x0d\x24\xdd\x7b\x5f\x85\xc8\xaa\xf7\x2d\x55\x95\x4a\xa5\xc3\x25\x0c\x70\xc1\xb6\xb9\x81\x54\x8a\x05\x5f\xc2\x42\x2a\x58\xca\x4c\xfe\x25\x81\x0b\x6d\x58\x9e\x33\xc3\xa5\xd0\xad\xcb\xd6\x25\x3c\xc8\x27\x30\x12\x14\xb2\x0c\xcc\x0a\x21\xe7\x02\x35\xcc\x31\x97\x4f\xbd\xd6\x25\xf8\x2c\x5d\xd9\x36\x50\xb8\x51\xa8\x51\x18\x0d\x0c\x76\x2c\xdf\x22\x6c\x35\x66\x30\xdf\x5b\xb9\x02\x19\x15\x70\x01\x66\xc5\x35\xd1\xae\x99\x21\x90\x3f\x04\x5b\xe3\x9f\x3d\xf8\x23\x73\x8a\xfd\x09\x97\xf0\x87\x3f\xfe\xfd\x4f\x68\xc3\x1f\x03\xd4\xa9\xe2\x1b\xd2\xe8\xcf\xd6\x25\x3c\xad\x50\x61\x25\x03\x5c\x5b\x74\xfa\x07\xe4\xc2\xfe\x76\xa3\xda\x2a\x3b\x08\xe0\x06\xd7\xd4\xbd\x82\x2e\x24\x8a\xff\x0b\x4d\xc9\x04\xcf\xcb\x5a\x55\x0a\x39\x14\x3b\xae\xa4\x58\xa3\x30\x2c\x87\x1d\x53\x9c\xcd\xf3\x62\xa8\x46\x82\xdc\xa1\x52\x3c\xc3\x1a\x9a\x85\x01\x66\x40\x6d\x05\x18\xbe\xb6\xda\xd7\x47\x45\xd0\x0c\xb2\x43\x8b\x1b\x09\x33\xc7\x20\xaf\x34\x6c\xb6\x6a\x23\x35\x5a\xd7\x04\x6e\xbc\x0b\x99\xe7\xf2\x89\x8b\xa5\x1b\x8b\x06\xa6\x10\x72\x5c\x18\xc0\xf5\xc6\xec\x81\x3d\x32\xb8\xb8\x78\x4d\x7d\xf7\xf0\xc4\xf3\x1c\xe6\x08\x8a\x89\x4c\xae\xf3\x3d\x2c\x51\xa0\x62\x06\x33\xd2\xb0\x70\x52\xa9\x65\x5f\x61\x86\xc2\x70\x96\x7b\x7e\x74\xfd\xee\xfd\x47\xdc\xb7\x2e\x21\xc2\x54\xa1\xa1\xdf\xad\xc0\xf5\xef\xb5\x00\x7e\x47\xa5\xb9\x14\x3d\xb8\xb8\xea\x7c\xe8\x5c\x5d\xc0\x25\x0c\x06\x49\xd1\x0a\x6d\x08\x31\x47\xa6\x11\x76\x45\x8b\x5c\x50\x18\x62\x6a\x06\x14\x77\x0b\x25\xd7\x70\xcf\xcd\x6a\x3b\x2f\x7b\xea\x16\x40\x24\xb7\x2a\xc5\x92\x05\x16\x2c\xd7\xe8\x80\x1b\x5f\xa0\x0d\xb7\x52\xe6\xc8\x04\xf0\x05\x30\xd0\xf6\x63\x35\x1a\xae\xc9\xb8\x5c\x61\x06\x3f\xed\xc8\xd4\xca\x31\xfc\xdc\x02\xb0\x56\xfc\xaf\x75\xae\xda\xe2\x6b\x27\x9c\x92\xd5\xb3\x03\x80\x35\x9a\x4c\xd3\xad\x2a\xfd\x4b\xd6\x26\xdb\xab\xa3\x51\x6d\x94\xdc\xf1\x0c\xb3\x4a\xf7\x5b\xc5\x44\xba\xea\xc1\x45\x86\xbb\x8b\xba\xea\xee\x03\xb4\x21\x5e\x21\xcc\xed\x3f\xaf\x34\x3c\xf8\xde\x80\xc2\x68\x8e\x90\xae\x30\x7d\xc4\x0c\xe4\xd6\xd0\xa8\x9a\x03\x2e\xf4\xad\x68\xfa\x72\xbd\xe6\xa6\x07\x70\x7d\x7d\xfd\xeb\x2f\x6c\xfe\x3e\x7d\xff\xeb\x2f\xef\x6f\xde\xbc\xfb\x30\x4f\xf1\xc3\xaf\x6f\x6f\xde\x7f\x78\x7f\x73\xf3\xfe\xd7\xf9\xf5\x87\x9b\x9b\x0c\xdf\x65\x75\x55\x9c\x30\xb4\x8b\x80\x52\xe8\x02\xd2\xcd\x0c\xfa\xdf\xc6\x0e\xe8\x0d\xa6\x7c\xc1\x53\x48\x5d\xff\x32\x94\x6c\xe8\x93\x5d\x6c\x2f\x37\x14\xf8\x6f\x0b\xe0\xb7\x2d\x47\xd3\xf0\x9a\x6d\x81\x36\x44\xdb\x0d\x25\x0b\x0d\x82\x72\x40\x4e\x63\xdc\x6c\xe9\x83\x14\xf9\x1e\x50\x29\xa9\x74\x85\xaf\x57\xf2\x49\xb4\x00\x62\xc5\x52\xec\xd9\x71\x3b\x34\xdb\x50\xf3\xbd\x91\x80\xc2\xce\x46\x52\x64\x2d\xb5\x21\xbf\xcc\xa5\x46\xc8\xe5\x72\x49\x3e\xcb\xb6\x8a\xfe\x14\x8e\x6d\x01\x84\x98\xb1\xd4\xd4\x51\x5d\x4b\x13\x56\xb9\x36\x8d\x42\x73\xc3\x77\x14\x19\x8b\x22\x68\x6d\x4e\x94\x4b\x8a\xd6\x01\xee\xce\x85\xea\x00\x77\xc9\x69\xa0\x52\xc6\xc9\x70\x87\xb9\xdc\x50\x2e\x29\x55\xd2\xaf\xc9\x9e\x1a\x16\xfc\x1b\x66\xc5\x84\x6e\x01\x4c\x95\x5c\x6f\x9a\xb6\x74\x4d\x4d\x3d\x37\xae\x8d\xb0\x9b\x99\xac\xc8\x0c\x6d\x18\x4f\x62\x08\x46\xd3\xa1\x3f\xf2\xc7\xb1\x3f\x80\x2f\x7e\xdc\x02\x18\xb1\xb4\x81\x3d\x62\x69\x13\x58\xa3\xa9\x67\x71\x30\x4c\x2d\xd1\x00\xa3\x38\x71\x9d\xcf\x03\x87\x52\x9a\x1e\x5c\x74\xe5\xc6\x74\x69\x81\x29\xa6\x00\x35\x53\x4e\xa0\x3f\x19\x57\x98\x1a\xa9\xf6\x55\x12\xae\xe5\x05\xb6\xd9\xc0\x58\x1a\xec\xc1\x58\x82\x51\x8c\x93\xf7\xba\x55\xd8\xd3\xbc\xfa\x8b\x89\xa5\x6c\x1f\x64\x1a\xb3\x0c\xda\x30\xa8\xf0\xb9\xa8\xb8\x89\xaa\x46\x53\x24\x0c\x9a\xf4\x2d\x80\x3b\x9e\xa3\xee\xc1\x45\x2e\x53\x96\x17\x70\xb6\xed\x25\x34\xdb\x19\x16\xb6\xdb\x4f\xda\x30\xc3\x53\x60\x5a\xa3\x21\x8f\x6e\x72\xc9\x32\xfd\x1a\xd0\xa4\x94\x74\x46\x98\x71\xd6\x83\x8b\x35\xfd\x2d\x08\x6c\xdb\x19\x02\x47\x4c\x0c\x0e\x05\xb3\x8a\x24\x55\x88\x42\xaf\x24\x51\x18\xd4\x06\x98\x32\x7c\xc1\x52\x73\x60\x8a\xac\x22\x3d\xb8\x70\x1a\x95\xb6\x71\xea\xbd\x44\x56\x1f\x41\x49\xf8\x9f\xe8\x35\xf0\x35\x5b\xe2\x01\xdf\xdb\x6c\xc8\x07\x07\xb3\x7b\x9b\xcd\x19\xdc\xc2\x19\x76\xed\x3e\x76\xf1\xc0\x3a\xd0\x7a\x9a\x6b\x6b\x46\xe3\xf2\x27\x5b\x6f\x72\xcc\x98\x61\xcd\xc4\x5f\x35\x1f\x4d\xa6\x22\x34\x29\x40\xb4\xed\x03\xb6\x53\x31\xe3\x6b\xc1\x4b\xd3\x69\x9b\xe7\x65\x04\x1d\x66\xfe\xa1\xf5\x3c\x34\x65\x38\x09\x99\x7c\x12\xe4\x88\x32\x68\x8e\x42\xc9\x45\xeb\x4c\x6f\x59\x9e\xef\x8b\x59\x3e\xdf\xba\xec\x73\x54\x07\x19\x8d\xf9\x82\xf2\xc6\x2d\x2d\xa0\x00\xbe\x58\x72\x41\x31\x3d\xda\x47\xbf\x0d\x0b\x83\x0e\x6e\x13\xd7\x4e\x66\x65\x86\xcd\x69\xb9\x41\xd7\x62\x24\x25\x0b\xf8\x29\xfa\x6d\xc8\x0d\xbe\x06\x2b\xf7\x1a\xa6\x52\x9b\xa5\x42\xfb\x7b\x44\x05\xca\xe0\xf6\xe7\x42\xaf\xbe\x17\xf9\xa0\x7d\x11\xf1\x98\xff\xee\xff\x3f\x4b\x3b\xa4\xc8\xad\xdb\x61\x70\x9b\xd8\xb6\x23\x2b\x3c\xad\x50\xc0\xe0\x96\xbc\x24\x85\x5b\x11\xa8\xea\x5a\x49\x6d\xba\x1a\xd5\x0e\x55\x77\xb7\x86\x9f\xec\x44\xf8\xd9\x0d\xe8\x1b\xd7\x46\x37\x93\xe1\x6d\xe2\x5a\x9f\x01\x3f\xb2\x26\xcb\xa9\xf0\xdc\x03\x3a\x19\x2d\x41\x54\x45\x2a\x08\x44\xb7\xd4\x02\x84\x5b\x8d\xaa\x07\x17\x4a\x4a\x73\x30\x9c\x6d\x75\xcb\x0d\x2a\xfb\xbb\x4c\x31\x59\x69\x49\x67\x16\x5b\x8f\x32\x91\x41\xb8\x61\xba\xa8\x6e\x21\xf4\x7f\x9b\x05\xa1\x3f\xb0\x42\x0a\xd7\xd2\xa0\xed\x63\x75\x21\x77\x0e\x6e\xb5\x23\x27\xa1\x1e\x5c\xec\x10\xdf\xc4\x2b\xc9\x04\xc3\xab\x8c\xe1\x54\xca\x7f\xde\x70\x7c\x64\x35\x85\x2c\x7c\x1b\xa6\x4c\xeb\x27\xa9\xb2\x53\x7d\x74\xa5\xaa\xd3\xcc\x26\x5e\x09\xd7\xbf\x14\x15\x1b\xa4\x2b\xa6\x58\x6a\x50\x39\xee\x31\x5b\x63\x31\x03\xb3\xf9\x81\x88\x9a\x29\x29\xd7\xca\xe2\x8a\xc2\x56\x96\x35\x1b\xdb\x75\x76\xab\xd1\xe2\xcd\x9c\x1d\x1d\xde\x56\xab\x03\xe4\xcc\xd9\x92\xfe\x88\x73\xb0\x56\xe9\x17\xb1\xa7\x3f\x6a\xa6\xe9\xf7\xac\x64\xb9\xce\xd0\xfc\xa0\xd1\x1e\xa4\x36\x65\x7e\xa7\xf0\x3d\x30\xd3\x97\xfa\x44\xa3\xaf\x34\x5a\xa7\xbf\x54\xa6\x07\x6f\xdf\xbe\x79\x7f\xd0\x54\x2a\xea\x6f\xff\x34\x34\xa4\x54\xc6\xb5\x41\x41\x81\x22\x85\x95\x1f\x28\xb9\x39\x9e\x0c\xd4\xd6\x5c\x6a\x0d\xd2\xfa\xda\xc8\x14\x94\x75\xa8\x1f\x13\xf5\xe0\xa3\xaa\x70\x21\xb7\x82\x66\xc0\x24\xea\x1d\xbb\xaf\xad\x55\x59\x71\x4e\xa2\xd2\x7b\x93\xa8\xf0\x93\x04\xf9\x24\x8e\x53\x31\x31\xe6\xb9\x0d\x72\x9b\xf2\xeb\x5e\x7b\x62\xab\x9c\xe3\x5c\xca\xbf\xe4\x47\x76\xc3\xb8\x59\x21\x9f\x33\xfe\xf6\x40\xf1\x9c\xd7\x4a\xce\xb3\x89\xf2\x7b\xae\xba\x57\x72\xbb\x39\x3b\x22\xfb\xc5\x0d\xc9\xfd\x7c\x7e\x4c\xec\x64\x50\xb3\x60\xd0\x83\xab\xb7\x6f\x3f\x1c\x0c\x14\x0c\x8a\xe8\x86\x60\x70\xae\x14\x29\x86\xe1\xb4\x3a\x11\xbf\xb7\xe2\x4e\x91\x67\xe5\x97\xf4\x99\x96\x36\x34\xe4\x43\xed\x7c\x36\xe0\x36\x1a\x6d\x7d\xd4\xd5\xc5\xa7\xea\x47\x27\xe3\xda\x74\x36\xfb\x72\xe9\xf6\xe3\x84\x04\xac\xa1\xcd\xaa\x9a\x85\x5c\x1b\xc5\xe7\x5b\xda\xc7\x95\x92\x76\xb8\xb4\x43\x61\xb6\x64\x35\xf2\xb0\x12\x5b\x5e\x5a\xec\x5f\xe0\x6d\x50\x52\xdf\x23\xca\x5a\xc7\x17\x98\xca\x75\x47\xe1\xd9\x3d\xa6\x5b\xf6\x76\xa7\x6a\x74\x50\xec\x3a\x1b\x25\xb3\x9a\x12\xbe\xd8\x95\x3a\x10\x45\x65\xda\x57\xfa\x99\x5d\xb9\x33\x01\x95\x29\xd9\x9a\x8b\xc6\x0c\x61\xd4\x52\xd6\x2c\x83\x51\x30\x2e\x67\x88\xed\x0a\x8d\xc5\xa2\x9e\x68\x70\x4e\x95\x4a\x7d\x62\x9c\x22\x3d\x37\x11\x4e\x71\x80\x1d\xd8\x7e\x6c\x3e\xf8\x6b\xc6\xf3\x92\xf5\xdf\xc7\x19\xcc\xf1\xdb\x3e\xd0\x76\x7d\x81\x65\x99\xdd\x6a\x95\x5a\x9c\x52\x17\xd1\xa0\x6c\x18\x16\x67\x43\x0d\x40\xfb\x0d\xda\xf0\xe9\x44\x54\xbf\x22\x1b\xd3\xd7\x2a\x4b\x0e\x99\xc5\xf1\x4e\xcc\x42\x1f\x9e\x05\xc9\x59\x1d\x63\x42\xdb\x50\x32\x6e\x03\xc0\xb5\x42\x1b\x86\x34\x01\xe4\x82\x86\xc6\x69\x7b\xc3\xf2\x67\x6d\xab\x01\x3b\xcb\x8e\xa5\x21\xf4\xab\x1e\xad\xc0\x57\xaf\xcb\xff\xaf\xed\xff\xd7\xad\x56\x7d\x4a\x7a\x79\x2e\x9f\x30\xa3\xb5\x80\x74\xf8\xff\xa5\x12\xc3\xe1\xe4\x93\x3f\x48\x1e\x26\x51\x1c\xd5\xb4\x28\xd7\x08\xdd\x0d\xa6\x1a\x98\x13\x26\x27\xa6\x52\x08\x4c\x4d\x33\x58\x5b\x00\x7d\xcc\x51\xed\x6f\x91\x99\x28\x5d\x61\xb6\xcd\x91\xa6\x97\x70\x2b\x79\x41\xd6\xf7\x87\x7e\xf8\x25\xb9\xf5\xbd\x38\x89\xfa\x0f\xfe\x60\x36\xf4\x93\xbb\x60\xe8\x8f\xbd\x91\x4f\x2b\x54\x59\xac\xff\x0b\x32\xf9\x57\x27\xb5\x90\x9d\x39\x32\xd3\xc9\xe6\x07\x0e\x25\x1f\x51\x15\xcb\xdd\x11\x72\x38\xf9\xe8\x87\x76\x30\xd0\xb6\x2b\xa2\x5d\xd5\xcb\x28\x71\xf2\x30\xb7\x00\x47\x78\x65\x60\x3f\x87\x39\xf5\xa2\xe8\xd3\x24\x1c\x9c\x9b\x03\x2f\xe3\x9a\x55\x99\x09\x8a\x11\x65\xf3\x8e\xfe\x3b\xe7\x06\x9f\x21\x8a\x1f\x9a\xb6\x38\x2b\x4b\x0b\x65\xf9\x4b\x17\x87\x14\xe7\xe8\xed\xf2\xde\xbe\x3a\xcb\x34\x09\xe3\x72\x9d\x2f\x4f\x35\xe7\x2c\x7d\x44\x91\xc1\x4f\x21\x9b\xcf\xb9\x19\xfd\x06\x52\x41\x88\x19\xd7\x3f\x1f\x21\x93\x9b\xad\x73\xf5\xdf\x39\x4b\x5e\x18\x90\xeb\x08\x6d\x60\xeb\xbf\x37\xae\x26\xae\xc0\x5f\x52\x7d\x16\x0e\x9f\x73\xc6\x2c\x1c\xd2\xba\x16\x0e\x8f\x22\xf2\x7b\xce\x28\xf2\xe4\x79\xcc\xc8\x0f\xcb\xc5\xf2\x47\x51\x87\x72\x39\xc4\x1d\xe6\x27\x98\xc3\xc9\x7d\x32\xf4\x7f\xf7\x49\xcd\x78\x32\x98\x54\x12\x21\xea\x6d\x6e\x6e\x9d\x95\x0f\x3b\xfd\xaa\xcc\x2d\xe4\x43\x3f\x9a\x0d\xe3\xe4\xd6\xeb\x7f\xf4\xc7\x83\xf3\x20\xfe\xb7\x0d\x57\xb4\xa7\xbf\x79\xff\xcb\x9b\x37\xe7\xc4\xfd\xcf\xd3\x20\xf4\xa3\x63\xf1\x98\xe9\xc7\x60\x29\xa4\x42\x07\x54\xdf\x26\x15\x00\xb1\x17\x7d\x4c\x82\xfb\xf1\x24\xf4\x0b\xb0\x73\x20\x11\x2a\xce\x72\xfe\x8f\x35\xea\x86\xa7\x8f\xf9\x51\x04\x58\x98\x28\xf2\xc3\xc0\x1b\x06\x5f\xad\x7d\x4b\x90\xd3\x53\xd8\x9a\x11\x43\x7f\xe0\x8f\xe3\xc0\x1b\x26\x9e\x1f\x25\xd7\xef\xde\x27\x1f\xfd\x2f\xd0\x86\x8f\xb8\xaf\x0e\xa5\x3d\x3f\x02\x14\xa9\xda\x6f\x0c\xa4\x15\x9a\x06\x6d\xa4\xc2\xcc\x1d\xc8\x37\x96\xa7\xb2\x8c\x25\xf6\x28\xbc\xeb\x4b\xf9\xc8\xf1\x21\x8e\xa7\x13\x91\xef\x1b\x36\x88\xc2\xbb\xa4\x3f\x99\x7c\x0c\xfc\xc4\x7e\x1f\x0f\xbf\x34\xcb\x59\xaa\xca\x4b\xc9\x72\xdf\x58\x6c\xf9\x49\x18\x52\x8b\xdd\x20\x8a\x30\xdd\x2a\x6c\x54\xca\x75\x9e\xc8\xef\xcf\x42\xff\x94\xc5\x15\x25\x24\x0a\x8b\x9c\x2d\x5f\x24\x2b\x0b\xfc\x6a\xcb\x5d\x6e\x01\xbc\xd8\xbb\xf5\x22\x3f\xf1\xc7\xf7\xc1\x98\x48\x22\x34\xee\xa0\xaf\xbe\x17\xaf\x21\x34\x93\x6b\x25\x5f\xe4\xd5\x23\x69\xea\x5c\x93\x1d\x37\x52\x7e\x25\x5b\xa4\xf8\x23\xd9\xb1\x5b\x1c\x4b\xd9\xd3\x24\x5c\xc9\xd7\xf2\xef\x11\x06\x09\xd5\x31\x6c\xc6\x3b\x95\x77\xc9\xee\x58\x56\x2a\xd2\xfd\xb2\x14\x8e\xf7\x9b\x4a\x79\x7f\x1a\xfa\x7d\x2f\xf6\x07\x35\xf0\x46\x4e\xaa\xb0\x5d\x3a\xaa\xa0\xad\x83\x2c\xfc\xa1\x68\xab\x63\x34\x92\xd0\x01\xc4\xe5\x9f\x23\x05\x67\xae\x94\x21\xd9\x99\x3d\x2a\x1b\xb1\x6f\x23\x5c\x4b\xb5\x8f\xf8\x3f\xd8\x83\x9b\xb7\x37\x37\xef\xdf\xdc\x1c\xb0\x92\xd9\x74\x38\xf1\x06\xc9\xc8\xfb\x9c\x8c\xfc\xd1\x24\xfc\x92\x44\xc1\x57\x32\x3d\x7b\x64\x70\x03\xeb\x79\x39\x05\x07\x38\xdf\x2e\x1b\x47\x24\xfe\xed\xec\xfe\xf4\x88\xb4\x88\xb5\xc3\x89\x8f\xdd\xf9\xb9\x56\x5b\x10\xf9\xf6\x7c\x3a\x6b\xee\x02\xff\xe3\x8d\xef\x27\x65\xed\x36\xf6\x6e\x87\x7e\x2d\x8d\xd9\x22\xce\xd9\x52\xaf\xcd\xa6\xd7\xed\x52\xed\xf2\x6f\x5b\xb7\x90\xff\x0f\x35\x60\xef\xfa\x5d\x61\x28\x7f\xe4\x05\xc3\xc2\xd4\x25\x8c\x2d\xb2\xcb\xef\xe3\xdf\x1b\x5f\x8a\x85\xf7\xf0\xb5\x5c\x59\x8b\x2e\x77\x52\xa5\x38\x94\x4f\xa8\x52\x72\x3c\x5b\xea\xba\x2d\xee\x26\x61\xdf\x4f\xa8\x36\x0a\xfb\xe4\x9d\xd8\xbb\x8f\x9a\xa6\xc9\x4b\x51\x60\x62\x0f\x86\x2d\xa9\x60\x37\xa8\xec\xe1\xcd\x65\x6d\x06\x15\x7c\x97\x81\xe0\xc6\xa5\xcb\xe6\x87\x21\x13\xcb\x1e\x5c\xa0\x68\x6f\x75\xa1\xed\xd0\x1b\x93\x23\xe8\xcb\x96\x2d\x8f\x8f\xe3\x0a\x19\xfa\xd2\x97\x19\x9e\x91\x9d\x79\xf7\x7e\xd2\x9f\x0c\xfc\x3a\x88\xbd\xfd\x39\x45\x92\x4b\x2e\x68\x81\x57\x98\x1a\xe7\x92\x6e\x89\x34\xb9\x0f\xc6\x49\xe8\x0f\x82\xd0\xef\xc7\x85\xe9\x3f\xb9\xe3\x4e\x7b\x7d\x60\x65\x80\x2d\x0c\x2a\x60\xa0\xb7\x69\x8a\x5a\x2f\xb6\x39\xe4\x04\x6a\x8f\xe0\xbf\xc5\x6c\x39\x44\xb1\x24\x5f\x5c\xbf\x2b\x4e\x85\xbd\xcf\x64\xcf\x64\xe8\x8f\xef\xad\x47\x46\xec\x5b\x6d\x4b\xe0\xca\x2a\xb2\x27\x17\x4d\x5d\xed\x71\x72\x71\xfa\x5e\x9e\x30\xfb\x83\xc0\x4b\xc2\xc9\x24\x76\x35\x93\x3d\xba\xfe\x57\xbd\x7a\x2a\x8f\xa1\x4b\xf9\x62\x8c\xf6\x98\xba\xdb\x40\x71\x03\xa4\xd9\x3b\x0b\x03\xd8\x14\x5b\x32\xdb\xd1\xde\x54\xda\x3b\x8b\x46\x76\x29\x92\x4a\xe1\x48\xfa\x16\xa5\x4c\xf4\xa5\x30\x2c\x35\xe5\xae\x06\xe9\xef\xc9\xae\x86\x44\x93\xa8\xef\x8d\x93\xfe\x64\x1c\x7b\xfd\xd8\x05\x78\x59\x8f\xe9\x94\x09\xaa\x41\x08\x08\xb0\xbe\xe7\xa9\x11\xf9\xdf\x0c\x55\xfc\xf9\x4c\x70\xc7\x36\x74\xbb\xee\x3f\x5e\x1d\x71\xbe\xfa\xf3\x84\xd5\xff\x1c\xfb\xe1\xd8\x1b\x26\xb3\x71\x50\x70\x27\xc3\xc0\xe6\xf7\x72\x0f\xd0\xa0\x45\x0d\x39\x7f\x44\x28\xb1\xf1\x5b\x27\x95\xeb\x57\x7f\x52\x7d\x78\xd4\xf6\x1a\x5e\x31\x21\x69\x5f\x53\xf5\xaa\x29\x5d\x14\x2f\x24\x70\xa7\xe4\xfa\x07\x0c\x54\x56\x33\x56\xc7\xbb\x70\x32\x3a\x35\x79\x71\x91\x38\xed\xc1\xc5\xd5\xf5\x87\xce\x9b\xce\x9b\xea\xb6\xf6\x80\x13\x4d\x66\x34\xa9\x83\xe9\x41\xbe\xba\xf6\x3d\xf8\x34\xf2\xfb\xa1\x1f\x17\x05\xc7\xac\x28\x8b\x8b\x1c\x48\x91\x59\xd4\x1c\x5c\x0a\x67\x90\x54\x21\xb3\x87\x57\x76\x31\x36\xf2\x11\x85\x2e\xf6\xbd\xc1\xc2\xdd\x56\xbf\xae\x5d\x48\x5f\x5d\xdf\x1c\x62\xbd\xdc\x0f\xbb\x5b\x49\xae\x6d\x71\xe3\xd4\xda\x2a\xbc\x55\xf2\x49\xa3\xfa\x1c\x45\x77\x3c\x37\xb4\x68\xd4\xaf\x0c\x6c\xc1\x40\xc5\xeb\xa7\xc8\x0f\x93\xcf\x51\x44\x3b\xa9\xd8\xae\x21\x67\xee\xb8\x3e\xb7\x3f\x47\x51\x7b\xaa\xa4\xc1\xd4\xea\xbe\x42\x96\xd9\xa5\xc5\x71\x51\xcc\xa2\x30\xb4\xfe\x8d\xa5\x16\x7c\xb1\x68\x58\x84\xa8\x28\x4e\xfd\x71\x9c\xc4\x5f\xa6\x7e\x32\x9e\x44\xe3\xe0\xee\xee\x3c\x59\x0d\x0c\x0a\xb4\x63\xbe\x87\x28\x8e\x02\x91\xe6\xdb\x0c\xa3\xed\x3c\x93\x6b\xc6\x85\x3e\x37\x40\xea\x98\x04\xe3\xfe\x70\x36\xf0\x93\x68\x76\x3b\x98\x8c\xbc\x60\x5c\xcf\xc5\x52\x00\xb7\x48\xf6\x96\xa4\x02\xa3\xec\x41\xc2\x0d\xca\x08\x53\x29\x32\xdd\x83\xb7\x57\xef\xde\xbe\x7f\x53\x96\xcd\x75\xae\xc8\xef\x4f\xc6\x03\x22\xb8\x82\x3d\x32\xfb\xb4\x43\x3b\x31\x68\xc3\x4a\x3e\x41\x2e\xc5\xd2\x42\x93\xc7\x76\x2c\xe7\x07\x97\x4d\x95\xfc\xb6\x8f\xa2\xe1\x83\x1d\xed\xb9\xf1\x4c\xc3\xc9\xe7\x2f\x49\x14\x0d\x93\x07\xdf\x1b\x3c\xe7\x2e\x8b\x03\x51\x34\x3c\xb6\x5b\x14\x0d\xcb\x64\x7d\x0e\x9d\x70\xcb\x84\xdd\x34\x51\xe3\xfe\xe1\x89\xed\x75\x95\xc0\xed\x25\x8e\xb4\xf5\xac\x33\x96\xd6\x5c\x8a\xe7\xcb\xe3\xc8\x8f\xa2\x60\x32\x7e\xa1\x42\x3e\xa2\xcb\xac\x67\xaa\x7a\xd9\x0e\xd3\x72\x1c\x4a\xd7\x06\xe9\x99\x52\xf9\x88\xf3\xa4\x5a\x3e\xcb\x58\xaf\x9b\xcf\x92\x72\x83\xf6\xcc\xb3\xe0\x08\x62\x3f\x09\x6a\x55\x4a\x24\x53\xda\x9f\x6c\xcd\xca\xfb\x67\xab\x90\x65\x31\x0a\x26\xcc\x84\x6d\xcd\xea\xba\x2a\x7a\xaa\x59\x32\xe9\xdb\x0d\xcb\x2c\x7e\x48\xbc\xaf\xb3\xd0\xf7\x06\x49\xec\x8f\xbd\x71\x9c\x4c\xa8\xf1\xba\x56\x06\x9d\x5e\xee\x5b\x06\xf0\x06\xd5\xd2\xf9\x22\x79\x33\x61\x7d\x97\xd8\xe5\xb2\x8a\x62\x42\xa8\xd7\xf0\x88\xfb\xef\xf1\x84\xa8\xcb\x2b\xe9\x1f\x26\x0b\x7d\x97\x67\xcf\x30\xaa\x02\xee\x7b\xb4\x2e\x2b\xff\x6f\x48\x5d\xd2\x3e\x43\xa9\x2d\xd4\xf7\x08\xdd\x6f\x8a\x85\x1f\xa7\x2c\xfe\xb3\x01\x73\xcc\xea\xf0\x20\x18\x34\x88\xef\xa5\x5c\xe6\x58\x0f\x9f\xf3\x7c\xf7\x93\xc9\xfd\xd0\x6f\x46\xcd\xd9\xa0\x71\x80\x67\x42\xa6\xce\xf4\x6c\xac\x34\x69\x5c\x8c\x14\x88\xcf\x44\x48\x1d\xf6\x25\x1f\x35\x91\x2b\xdf\x34\xc1\xcf\x78\x66\xf2\x68\x98\x43\xf7\xa6\x41\x63\xab\x55\x47\x9f\x7c\x8c\xbd\x12\xdb\x9b\x06\xd0\x06\x92\x03\xfa\x49\xeb\xb3\x83\x7f\x06\xf7\xc5\x59\x5b\x07\x7e\x69\xae\x5a\xba\x53\xa3\x1f\x58\x9e\x35\x79\x9d\xc1\x19\xdc\x62\x3d\x63\xee\x03\xe0\x4b\xc6\xae\x63\x56\xa6\xae\xc3\x1e\x0c\x6d\x9f\x3f\x34\xeb\xe7\x28\xf6\xe2\xa0\xff\xbd\x02\xda\x49\x56\x10\x45\x09\xed\x9e\x53\x74\x9b\x48\xe5\xd1\x5c\x51\x40\xd7\x9e\x5d\x2c\xaa\x77\x18\x8d\xa2\x3e\x46\xb6\x2e\xce\x0c\x6c\xe2\xe7\x66\x6f\xdb\x0a\xd8\xd8\xf7\x46\xe5\xe1\xc1\xb8\x7e\x98\xab\xcb\xce\x06\xd9\xda\xe2\x68\x73\x74\x06\x61\x50\x9b\x24\xb3\x64\xb5\xd7\x1c\xb1\x1f\xc5\x27\xe7\x12\x45\xca\x27\x90\x70\x2b\x84\xbb\x70\xb4\x45\x5f\x87\x50\x3a\xca\x36\x76\x06\x5c\xa7\x72\x87\xca\xf5\xa9\x03\x86\xb3\xf1\xb8\x7e\xc0\x15\xf3\x35\x7e\x95\xf6\x18\x66\x16\xf7\xcb\x9e\xc1\xc8\x4f\xbe\x4e\xec\x19\x0c\x75\x80\x7f\xa4\x38\x79\x6c\xe1\xae\x62\x62\xc5\xd2\xc7\x11\x5f\xba\xb7\x4e\xcd\xd2\x28\x0e\xbd\xfe\xc7\x64\x14\xdc\x87\x5e\x1c\x4c\xc6\xb5\x03\xbe\x99\xca\xa7\x0a\x17\xfc\xdb\xc1\xc3\xb3\x70\x98\x4c\x43\xff\x2e\xf8\x4c\x0e\x76\x17\x21\xda\x46\xb3\x7d\x48\xa9\x8d\xe2\x62\xf9\xba\x3a\x56\xdb\x6c\x4d\xf3\xa6\x11\x68\x79\x5d\x2c\xda\x8a\x02\xc3\xfa\xf4\x27\x7b\x20\xfd\x73\xcb\xde\x3b\x05\x57\x37\xa2\x5e\x1d\xcc\x22\x3f\x09\xae\x6e\xc6\x27\xaf\x4d\xec\x56\xc5\x5d\x6c\xf0\x7f\xec\x0f\x07\x30\xbc\x7a\x73\x02\x30\xbc\x7a\xf3\xe3\x00\xf1\xd7\x63\xf1\xf8\x6b\xcd\x22\xb3\x7a\x5a\x9f\xcd\xea\x0b\xfc\xec\x49\x2f\xb9\x2f\xb2\x8d\xe4\xa2\x36\x27\x66\x9f\xa2\xfb\x20\xf1\xc7\x83\xe9\x24\x18\xd3\xb4\x28\xbb\xb8\x17\x4b\x24\x54\x0a\x37\x0f\xca\x9c\xe0\xb9\xdb\x87\x86\xd0\xc8\x6d\xda\x1b\x42\x23\xb7\x59\x1f\x95\x7b\xf4\x86\x40\x71\x29\xd7\x10\x98\x7a\x51\x74\x7c\x17\xd1\x14\x6a\xec\x54\x0b\xa1\xda\x89\x7f\x5d\xe0\xd3\x8a\x1b\x14\x92\xeb\x66\xd5\xf5\xe9\x21\x88\xfd\xf1\x24\x88\x8e\x96\x9f\x15\xdb\x21\x3c\xad\x0c\x77\x32\x60\x1f\xca\x7c\x67\x9a\x7f\x7a\x5c\x99\x75\x6e\xe4\x26\xa3\x9d\x45\x77\xab\x55\xd7\xee\xf8\xba\x73\x2e\xba\x4f\x87\x8f\x85\xbe\x9f\x3e\x3e\xc4\xa3\x61\x3c\x99\x0e\x68\x8f\x51\x3b\x8b\x6b\x5d\x42\xbc\x42\x8d\xf6\x41\xb0\xdc\x14\x37\x65\xc5\x7b\xe2\xe2\x45\xa0\x7d\xb0\xe1\xb6\x5c\x79\xbe\x07\x81\x3b\x54\xf6\x61\x4d\xf5\x0a\x95\x89\x25\x66\xf6\xfa\x9c\x60\x6c\xec\x3f\xad\x78\x8e\xf6\xc9\x19\xd5\x8e\xee\xe9\x78\xeb\x12\x14\xa3\x8d\x2c\x65\x1c\x01\x2c\x35\x5b\x96\x57\xaf\x1a\x5b\x93\x8d\x9b\x9b\x2d\x80\x07\xcc\x37\x2e\x2d\xae\x8c\xd9\xe8\x5e\xb7\xbb\xb4\x0f\x7f\x69\xfb\xdb\x5d\x1b\xd4\x6c\xab\x64\xd7\xa1\x16\x43\xb4\x0f\x35\xed\x4b\xdb\x67\x05\x0f\x16\xec\x9e\x3c\x09\xec\x32\x95\xae\xf8\x0e\xbb\x07\xb8\x7e\x2e\xc5\xff\x0d\xac\xb3\xe4\xe6\x80\xf3\x85\x29\x71\x3f\xbd\xaf\xc1\x64\x79\x67\xcf\x94\xd8\x3c\x2e\x2d\x54\x86\x73\xce\x44\x77\xb3\x9d\x3f\xe2\xbe\xb3\xdc\x2c\x9b\xb2\x21\x6e\xa4\x7d\x1d\x3c\x87\x97\x01\x28\x66\x68\x45\xa5\x0d\xdb\x01\x62\x2c\xb3\xa3\x51\x64\x38\xef\x08\x99\x15\xe5\xa3\x45\xd0\x68\xb6\x9b\xe4\xea\xba\xf3\xed\x20\xe8\xaf\xe7\xe5\x29\x64\x0b\xa0\x58\x85\x29\x97\xae\x37\x19\x57\xe5\x93\xcd\x8e\x7d\x76\x61\x70\xbd\xe9\x5e\xd8\x0c\xa2\x02\xa1\x8b\x4b\x90\x56\xeb\x7f\x02\x00\x00\xff\xff\xb1\xef\x12\x52\x49\x30\x00\x00") +var _embdDojoconfigYml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x5a\x6d\x77\xe2\xb8\x92\xfe\xce\xaf\xa8\x4d\xce\xd9\x9e\xd9\x1b\x20\x49\x4f\xf7\x64\xf8\x74\x1d\x70\x12\xdf\xe6\x6d\x6c\x33\xfd\x32\x67\xae\x8f\xb0\x0b\xd0\xc4\x48\x5c\x49\x24\x4d\xff\xfa\x3d\x25\xd9\xc6\x06\x92\xee\xdd\x4f\x21\xb2\xea\x79\xa4\xaa\x52\x55\xe9\xe5\x1c\x06\xb8\x60\xdb\xdc\x40\x2a\xc5\x82\x2f\x61\x21\x15\x2c\x65\x26\xff\x96\xc0\x85\x36\x2c\xcf\x99\xe1\x52\xe8\xd6\x79\xeb\x1c\x1e\xe4\x33\x18\x09\x0a\x59\x06\x66\x85\x90\x73\x81\x1a\xe6\x98\xcb\xe7\x5e\xeb\x1c\x7c\x96\xae\x6c\x1b\x28\xdc\x28\xd4\x28\x8c\x06\x06\x4f\x2c\xdf\x22\x6c\x35\x66\x30\xdf\x59\xb9\x02\x19\x15\x70\x01\x66\xc5\x35\xd1\xae\x99\x21\x90\x3f\x05\x5b\xe3\x5f\x3d\xf8\x33\x73\x03\xfb\x0b\xce\xe1\x4f\x7f\xfc\xc7\x5f\xd0\x86\x3f\x07\xa8\x53\xc5\x37\x34\xa2\xbf\x5a\xe7\xf0\xbc\x42\x85\x95\x0c\x70\x6d\xd1\xe9\x1f\x90\x0b\xfb\xdb\xcd\x6a\xab\xec\x24\x80\x1b\x5c\x53\xf7\x0a\xba\x90\x28\xfe\x2f\x46\x4a\x2a\x78\x59\xd6\x0e\xa5\x90\x43\xf1\xc4\x95\x14\x6b\x14\x86\xe5\xf0\xc4\x14\x67\xf3\xbc\x98\xaa\x91\x20\x9f\x50\x29\x9e\x61\x0d\xcd\xc2\x00\x33\xa0\xb6\x02\x0c\x5f\xdb\xd1\xd7\x67\x45\xd0\x0c\xb2\x7d\x8b\x9b\x09\x33\x87\x20\x6f\x34\x6c\xb6\x6a\x23\x35\x5a\xd3\x04\x6e\xbe\x0b\x99\xe7\xf2\x99\x8b\xa5\x9b\x8b\x06\xa6\x10\x72\x5c\x18\xc0\xf5\xc6\xec\x80\x3d\x32\x38\x3b\xbb\xa0\xbe\x3b\x78\xe6\x79\x0e\x73\x04\xc5\x44\x26\xd7\xf9\x0e\x96\x28\x50\x31\x83\x19\x8d\xb0\x30\x52\x39\xca\xbe\xc2\x0c\x85\xe1\x2c\xf7\xfc\xe8\xfa\xdd\xfb\x0f\xb8\x6b\x9d\x43\x84\xa9\x42\x43\xbf\x5b\x81\xeb\xdf\x6b\x01\xfc\x81\x4a\x73\x29\x7a\x70\x76\xd5\xb9\x7a\xd7\xb9\x3c\x83\x73\x18\x0c\x92\xa2\x19\xda\x10\x62\x8e\x4c\x23\x3c\x15\x2d\x72\x41\x7e\x88\xa9\x19\x90\xe3\x2d\x94\x5c\xc3\x3d\x37\xab\xed\xbc\xec\xa9\x5b\x00\x91\xdc\xaa\x14\x4b\x1a\x58\xb0\x5c\xa3\x03\x6e\x7c\x81\x36\xdc\x4a\x99\x23\x13\xc0\x17\xc0\x40\xdb\x8f\xd5\x74\xb8\x26\xed\x72\x85\x19\xfc\xf4\x44\xba\x56\x8e\xe1\xe7\x16\x80\x55\xe3\xbf\xad\x75\xd5\x16\x2f\x9c\x70\x4a\x6a\xcf\xf6\x00\x56\x6b\x32\x4d\xb7\xaa\x34\x30\xa9\x9b\x94\xaf\x0e\x66\xb5\x51\xf2\x89\x67\x98\x55\x63\xbf\x55\x4c\xa4\xab\x1e\x9c\x65\xf8\x74\x56\x1f\xba\xfb\x00\x6d\x88\x57\x08\x73\xfb\xcf\x1b\x0d\x0f\xbe\x37\x20\x3f\x9a\x23\xa4\x2b\x4c\x1f\x31\x03\xb9\x35\x34\xab\xe6\x84\x8b\xf1\x56\x34\x7d\xb9\x5e\x73\xd3\x03\xb8\xbe\xbe\xfe\xed\x17\x36\x7f\x9f\xbe\xff\xed\x97\xf7\x37\x97\xef\x7e\x9d\xa7\xf8\xeb\x6f\x6f\x6f\xde\xff\xfa\xfe\xe6\xe6\xfd\x6f\xf3\xeb\x5f\x6f\x6e\x32\x7c\x97\xd5\x87\xe2\x84\xa1\x5d\x78\x94\x42\xe7\x91\x6e\x69\xd0\xff\xd6\x79\x40\x6f\x30\xe5\x0b\x9e\x42\xea\xfa\x97\xbe\x64\x7d\x9f\xf4\x62\x7b\xb9\xa9\xc0\xbf\x5b\x00\xbf\x6f\x39\x9a\x86\xd5\x6c\x0b\xb4\x21\xda\x6e\x28\x5a\x68\x10\x14\x04\x72\x9a\xe3\x66\x4b\x1f\xa4\xc8\x77\x80\x4a\x49\xa5\x2b\x7c\xbd\x92\xcf\xa2\x05\x10\x2b\x96\x62\xcf\xce\xdb\xa1\xd9\x86\x9a\xed\x8d\x04\x14\x76\x39\xd2\x40\xd6\x52\x1b\xb2\xcb\x5c\x6a\x84\x5c\x2e\x97\x64\xb3\x6c\xab\xe8\x4f\x61\xd8\x16\x40\x88\x19\x4b\x4d\x1d\xd5\xb5\x34\x61\x95\x6b\xd3\x28\x34\x37\xfc\x89\x3c\x63\x51\x38\xad\x0d\x8a\x72\x49\xde\x3a\xc0\xa7\x53\xae\x3a\xc0\xa7\xe4\xd8\x51\x29\xe4\x64\xf8\x84\xb9\xdc\x50\x30\x29\x87\xa4\x2f\x48\x9f\x1a\x16\xfc\x2b\x66\xc5\x8a\x6e\x01\x4c\x95\x5c\x6f\x9a\xba\x74\x4d\xcd\x71\x6e\x5c\x1b\x61\x37\x43\x59\x11\x1a\xda\x30\x9e\xc4\x10\x8c\xa6\x43\x7f\xe4\x8f\x63\x7f\x00\x9f\xfd\xb8\x05\x30\x62\x69\x03\x7b\xc4\xd2\x26\xb0\x46\x53\x0f\xe3\x60\x98\x5a\xa2\x01\x46\x7e\xe2\x3a\x9f\x00\x86\x36\xcd\x05\x32\x99\x3e\xa2\x6a\xa7\x72\x4d\xa1\xcb\x42\x20\xa3\x15\x12\x4a\x69\x7a\x70\xd6\x95\x1b\xd3\xa5\xf4\x53\xac\x0f\x6a\xa6\x80\x41\x7f\x32\xae\x30\x35\x52\xed\xaa\x10\x5d\x0b\x1a\x6c\xb3\x81\xb1\x34\xd8\x83\xb1\x04\xa3\x18\x27\xd3\x76\xab\x35\x41\x8b\xee\x6f\x26\x96\xb2\xbd\x97\x69\x2c\x41\x68\xc3\xa0\xc2\xe7\xa2\xe2\x26\xaa\x1a\x4d\x11\x4d\x6c\x44\xa8\xe8\xba\x6f\x34\xfc\xbd\xd5\xa6\x4a\x3f\x2d\x80\x3b\x9e\xa3\xee\xc1\x59\x2e\x53\x96\x17\x4c\xb6\xed\x35\x22\xdb\x19\x16\xb6\xdb\x4f\xda\x30\xc3\x53\x60\x5a\xa3\x21\x4f\xd8\xe4\x92\x65\xfa\x02\xd0\xa4\x14\xac\x46\x98\x71\xd6\x83\xb3\x35\xfd\x2d\x08\x6c\xdb\x09\x02\x47\x4c\x0c\x0e\x05\xb3\x8a\x24\x55\x88\x42\xaf\x24\x51\x18\xd4\x06\x98\x32\x7c\xc1\x52\xb3\x67\x8a\xec\x40\x7a\x70\xe6\x46\x54\xaa\xcd\x0d\xef\x35\xb2\xfa\x0c\x4a\xc2\x7f\x45\x17\xc0\xd7\x6c\x89\x7b\x7c\x6f\xb3\x21\xf3\xec\x2d\xe2\x6d\x36\x27\x70\x0b\x3b\xd9\xa4\x7f\x68\xfd\x81\xb5\xad\x75\x02\xae\xad\x1a\x8d\x8b\xbb\x6c\xbd\xc9\x31\x63\x86\x35\x13\x46\xd5\x7c\xb0\x08\x0b\x97\x26\xdf\xd1\xb6\x0f\xd8\x4e\x45\xa4\xa8\x3b\xfd\x4b\xab\x67\xba\xcd\xf3\xd2\xe5\xf6\x71\x64\xdf\x7a\x9a\x90\xe2\xa5\x84\x4c\x3e\x0b\x32\x4f\xe9\x65\x07\xbe\xe7\xfc\x6d\xa6\xb7\x2c\xcf\x77\x45\xcc\x98\x6f\x5d\x2c\x3b\x28\xab\x8c\xc6\x7c\x41\x51\xe8\x96\xf2\x31\x80\x2f\x96\x5c\xd0\x22\x98\x4a\x6d\x96\x0a\xa3\xdf\x87\x85\xae\x07\xb7\x89\xfb\x48\x1a\x67\x86\xcd\x29\x83\xa1\x6b\x31\xd2\xae\xd9\x9f\xa2\xdf\x87\xdc\xe0\x05\x8c\x76\xd1\xef\xc3\x0b\xd8\x63\x5c\xc0\x88\x8a\x9e\xc1\xed\xcf\xc5\xe0\xfa\x5e\xe4\x83\xf6\x45\xc4\x63\xfe\x87\xff\x5f\x96\x7b\x48\x4e\x5d\x57\xc6\xe0\x36\xb1\x6d\x07\xaa\x78\x5e\xa1\x80\xc1\x2d\x19\x50\x0a\x97\x64\xa8\x92\x5b\x49\x6d\xba\x1a\xd5\x13\xaa\xee\xd3\x1a\x7e\xb2\x6b\xe4\x67\x37\xab\xaf\x5c\x1b\xdd\x8c\xaf\xb7\x89\x6b\x7d\x01\xfc\x40\xa5\x2c\xa7\x62\x76\x07\xe8\x64\xb4\x04\x51\x15\xbe\x20\x10\x5d\xf6\x06\x08\xb7\x1a\x55\x0f\xce\x36\x6e\xea\x7a\xaf\x3c\xfb\xc5\x65\x31\x54\xf6\x77\x19\x9c\xb2\x42\x9b\x17\xa0\xca\xf5\x6d\x15\xd8\x1d\x31\xc5\xf8\xe0\x16\xfe\x1b\x36\x52\x13\x9a\xfd\xb6\xd7\x6a\xa7\x50\xa6\xad\x8c\x99\xc8\x20\xdc\x30\x5d\xd4\xd9\x10\xfa\xbf\xcf\x82\xd0\x1f\x58\x19\x85\x6b\x69\xd0\xf6\xb1\x33\x20\x4f\x18\xdc\x6a\x37\x64\x12\xea\xc1\xd9\x13\xe2\x65\xbc\x92\x4c\x30\xbc\xca\x18\x4e\xa5\xfc\x76\xc9\xf1\x91\xd5\xa6\x60\xe1\xdb\x30\x65\x5a\x3f\x4b\x95\x1d\xcd\x00\x74\x35\xb9\x78\x32\x98\xf4\x8a\xf1\xd9\x3c\x20\xe1\xfa\x97\xa2\x82\x84\x74\xc5\x14\x4b\x0d\x2a\x4d\x45\x8a\x2d\x3b\xe7\x39\x13\x8f\x76\x3c\x63\xb6\xc6\x62\x99\x67\xf3\x3d\x39\x35\xd3\x62\xaa\x15\xed\x15\xad\xad\x7b\x6b\xd6\xb2\x45\xc0\x56\xa3\xc5\x9b\x39\x8b\x38\xbc\xad\x56\x7b\xc8\x99\xb3\x08\xfd\x11\xa7\x60\xed\x44\x5e\xc5\x9e\xfe\xa8\xea\xa6\xdf\xd3\x9c\xe5\x3a\x41\xf3\x7d\x15\xda\x81\x3c\x48\x6d\xca\x24\x42\x0b\x61\xcf\x4c\x5f\xea\x4b\x96\xbe\x16\xa9\x07\x60\x2a\x95\xe9\xc1\xbb\x5f\xde\x5e\xef\x47\x2a\x15\xf5\xb7\x7f\x1a\x23\xa4\x78\xc9\xb5\x41\x41\xce\x63\xab\xf3\xb7\x6f\x2f\xdf\x37\xdd\x95\x96\xb8\xf5\x32\x0b\xd9\xf4\x56\x4b\x38\x50\x72\x73\xb8\x0e\xa9\xad\x59\x38\x18\xa4\x6a\xa1\x11\xa9\x28\xea\x51\x3f\x26\xea\x1e\x4c\xee\xb3\x90\x5b\x41\x8b\x6f\x12\xf5\x0e\xed\xad\x55\x59\x3e\x4f\xa2\xd2\xda\x93\xa8\xb0\xab\x04\xf9\x2c\x0e\xf3\x03\x11\xe6\xb9\x9d\x82\xcd\x43\x75\x2b\x3f\xb3\x55\xce\x71\x2e\xe5\xdf\xf2\x03\xbb\x61\xdc\xac\x90\xcf\x19\x7f\xbb\xa7\x78\xc9\xca\x25\xe7\xc9\x38\xfd\x3d\xd3\xde\x2b\xb9\x2d\xf3\x5e\xbb\x31\x23\xfb\xc5\x4d\xc9\xfd\x7c\x79\x4e\xec\x68\x52\xb3\x60\xd0\x83\xab\xb7\x6f\x7f\xdd\x2b\x28\x18\x14\xab\x01\x82\xc1\xa9\xd2\xa9\x98\x86\x1b\xd5\x91\xf8\xbd\x15\x77\x03\x79\x51\x7e\x49\x9f\x29\xdf\xa2\x21\x13\x6a\x67\xb2\x01\xb7\xde\x6b\xeb\xb9\xae\x2e\x3e\x55\x3f\x3a\x19\xd7\xa6\xb3\xd9\x95\xf5\x84\x1f\x27\x24\x60\x15\x6d\x56\xd5\xaa\xe5\xda\x28\x3e\xdf\xd2\xae\xb4\x94\xb4\xd3\xa5\xed\x16\xb3\xf5\xb7\x91\xfb\xf2\xc0\xf2\x52\x05\xf2\x0a\x6f\x83\x92\xfa\x1e\x50\xd6\x3a\xbe\xc2\x54\x66\x3c\x85\x27\x77\xcc\x2e\xeb\x3e\x1d\x0f\xa3\x83\xe2\xa9\xb3\x51\x32\xab\x0d\xc2\x17\x4f\xe5\x18\x88\xa2\x52\xed\x1b\xfd\xc2\x19\x83\x53\x01\xd5\x4e\xd9\x9a\x8b\xc6\x02\x61\xd4\x52\x16\x52\x83\x51\x30\x2e\x57\x88\xed\x0a\x8d\x14\x55\x0f\x4c\x38\xa7\xf2\xa9\xbe\x30\xb2\xec\x18\xeb\xa5\xa5\x70\x8c\x04\x6c\xcf\xf7\x63\x2b\xc2\x5f\x33\x9e\x97\x33\xf8\xe7\x61\xcc\x73\xfc\xb6\x0f\xb4\x5d\x5f\x60\x59\x66\x77\x8e\xe5\x28\x8e\xa9\x0b\x7f\x50\xd6\x11\x8b\xb3\xae\x06\xa0\xfd\x06\x6d\xf8\x78\x24\xaa\xdf\x90\x96\xe9\x6b\x15\x57\x87\xcc\xe2\x78\x47\x6a\xa1\x0f\x2f\x82\xe4\xac\x8e\x31\xa1\x5d\x35\xa9\xb7\x01\xe0\x5a\xa1\x0d\x43\x5a\x02\x72\x41\x53\xe3\xb4\x5b\x63\xf9\x8b\xba\xd5\x80\x9d\x65\xc7\xd2\x10\xfa\x55\x8f\xf2\xf8\xd5\x45\xf9\xff\xb5\xfd\xff\xba\xd5\xaa\x2f\x4a\x2f\xcf\xe5\x33\x66\x94\x3d\x68\x0c\xff\x53\x0e\x62\x38\x9c\x7c\xf4\x07\xc9\xc3\x24\x8a\xa3\xda\x28\xca\xac\xa2\xbb\xc1\x54\x03\x73\xc2\x64\xc4\x54\x0a\x81\xa9\x69\xba\x6b\x0b\xa0\x8f\x39\xaa\xdd\x2d\x32\x13\xa5\x2b\xcc\xb6\x39\xd2\x02\x13\x2e\xf7\x17\x64\x7d\x7f\xe8\x87\x9f\x93\x5b\xdf\x8b\x93\xa8\xff\xe0\x0f\x66\x43\x3f\xb9\x0b\x86\xfe\xd8\x1b\xf9\x94\xd3\xca\x3d\xc4\x3f\x20\x93\x7f\x77\x52\x0b\xd9\x99\x23\x33\x9d\x6c\xbe\xe7\x50\xf2\x11\x55\x91\x20\x0f\x90\xc3\xc9\x07\x3f\xb4\x93\x81\xb6\xcd\xa1\xb6\x0e\x28\xbd\xc4\xc9\xc3\xdc\x02\x1c\xe0\x95\x8e\xfd\x12\xe6\xd4\x8b\xa2\x8f\x93\x70\x70\x6a\x0d\xbc\x8e\x6b\x56\x65\x2c\x28\x66\x94\xcd\x3b\xfa\x3f\x39\x37\xf8\x02\x51\xfc\xd0\xd4\xc5\x49\x59\xca\x94\xe5\x2f\x5d\x9c\xb9\x9c\xa2\xb7\x05\x41\xfb\xea\x24\xd3\x24\x8c\xcb\xca\xa0\x3c\xa5\x9d\xb3\xf4\x11\x45\x06\x3f\x85\x6c\x3e\xe7\x66\xf4\x3b\x48\x05\x21\x66\x5c\xff\x7c\x80\x4c\x66\xb6\xc6\xd5\xff\xc9\x59\xf2\xca\x84\x5c\x47\x68\x03\x5b\xff\x67\xe3\xea\xf1\x0a\xfc\xb5\xa1\xcf\xc2\xe1\x4b\xc6\x98\x85\x43\xca\x6c\xe1\xf0\xc0\x23\xbf\x67\x8c\x22\x52\x9e\xc6\x8c\xfc\xb0\x4c\x97\x3f\x8a\x3a\x94\xcb\x21\x3e\x61\x7e\x84\x39\x9c\xdc\x27\x43\xff\x0f\x9f\x86\x49\x95\x73\x25\x11\xa2\xde\xe6\xe6\xd6\x69\x79\x7f\x36\x51\x15\xc6\x85\x7c\xe8\x47\xb3\x61\x9c\xdc\x7a\xfd\x0f\xfe\x78\x70\x1a\xc4\xff\xba\xe1\x0a\x75\x0f\x6e\xde\xff\x72\x79\x79\x4a\xdc\xff\x34\x0d\x42\x3f\x3a\x14\x8f\x99\x7e\x0c\x96\x42\x2a\x74\x40\xf5\x2d\x5a\x01\x10\x7b\xd1\x87\x24\xb8\x1f\x4f\x42\xbf\x00\x3b\x05\x12\xa1\xe2\x2c\xe7\xdf\xdc\x0e\x89\xa7\x8f\xf9\x81\x07\x58\x98\x28\xf2\xc3\xc0\x1b\x06\x5f\xac\x7e\x4b\x90\xe3\x53\xe5\x9a\x12\x43\x7f\xe0\x8f\xe3\xc0\x1b\x26\x9e\x1f\x25\xd7\xef\xde\x27\x1f\xfc\xcf\xd0\x86\x0f\xb8\xab\x0e\xd9\x3d\x3f\x02\x14\xa9\xda\x6d\x0c\xa4\x15\x9a\x06\x6d\xa4\xc2\xcc\x5d\x30\x34\xd2\x53\x59\xf8\x12\x7b\x14\xde\xf5\xa5\x7c\xe4\xf8\x10\xc7\xd3\x89\xc8\x77\x0d\x1d\x44\xe1\x5d\xd2\x9f\x4c\x3e\x04\x7e\x62\xbf\x8f\x87\x9f\x9b\xf5\x2c\xd5\xf1\xa5\x64\xb9\x67\x2d\x4e\x22\x48\x18\x52\x8b\xdd\x20\x8a\x30\xdd\x2a\x6c\x94\xca\x75\x9e\xc8\xef\xcf\x42\xff\x98\xc5\x95\x25\x24\x0a\x8b\x9c\x2d\x5f\x25\x2b\xb7\x04\xd5\x9e\xbf\xdc\x34\x78\xb1\x77\xeb\x45\x7e\xe2\x8f\xef\x83\x31\x91\x44\x68\xdc\xb9\x65\xfd\x1c\xa0\x86\xd0\x0c\xae\x95\x7c\x11\x57\x0f\xa4\xa9\x73\x4d\x76\xdc\x08\xf9\x95\x6c\x11\xe2\x0f\x64\xc7\x2e\x39\x96\xb2\xc7\x41\xb8\x92\xaf\xc5\xdf\x03\x0c\x12\xaa\x63\xd8\x88\x77\x2c\xef\x82\xdd\xa1\xac\x54\x34\xf6\xf3\x52\x38\xde\x6d\xaa\xc1\xfb\xd3\xd0\xef\x7b\xb1\x3f\xa8\x81\x37\x62\x52\x85\xed\xc2\x51\x05\x6d\x0d\x64\xe1\xf7\x65\x5b\x1d\xa3\x11\x84\xf6\x20\x2e\xfe\x1c\x0c\x70\xe6\x4a\x19\x92\x9d\xd9\x13\xbc\x11\xfb\x3a\xc2\xb5\x54\xbb\x88\x7f\xc3\x1e\xdc\xbc\xbd\xb9\x79\x7f\x79\xb3\xc7\x4a\x66\xd3\xe1\xc4\x1b\x24\x23\xef\x53\x32\xf2\x47\x93\xf0\x73\x12\x05\x5f\x48\xf5\xec\x91\xc1\x0d\xac\xe7\xe5\x12\x1c\xe0\x7c\xbb\x6c\x1c\xcf\xf8\xb7\xb3\xfb\xe3\x13\xdf\xc2\xd7\xf6\x47\x4e\x52\x90\xb4\x6d\xb5\x05\x91\x6f\x8f\xdb\xb3\xe6\x36\xf0\x5f\xde\xf8\x7e\x52\xd6\x6e\x63\xef\x76\xe8\xd7\xc2\x98\x2d\xe2\x9c\x2e\xf5\xda\x6c\x7a\xdd\x2e\xd5\x2e\xff\xb4\x75\x0b\xd9\x7f\x5f\x03\xf6\xae\xdf\x15\x8a\xf2\x47\x5e\x30\x2c\x54\x5d\xc2\xd8\x32\xbb\xfc\x3e\xfe\xa3\xf1\xa5\x48\xbc\xfb\xaf\x65\x66\x2d\xba\xdc\x49\x95\xe2\x50\x3e\xa3\x4a\xc9\xf0\x6c\xa9\xeb\xba\xb8\x9b\x84\x7d\x3f\xa1\xda\x28\xec\x93\x75\x62\xef\x3e\x6a\xaa\x26\x2f\x45\x81\x89\x1d\x18\xb6\xa4\x92\xdd\xa0\xb2\x07\x47\xe7\xb5\x15\x54\xf0\x9d\x07\x82\x1b\x17\x2e\x9b\x1f\x86\x4c\x2c\x7b\x70\x86\xa2\xbd\x2d\x8f\x97\x86\xde\x98\x0c\x41\x5f\xb6\x6c\x79\x78\x1e\x58\xc8\xd0\x97\xbe\xcc\xf0\x84\xec\xcc\xbb\xf7\x93\xfe\x64\xe0\xd7\x41\xec\xd1\xf5\x31\x92\x5c\x72\x41\x09\x5e\x61\x6a\x9c\x49\xba\x25\xd2\xe4\x3e\x18\x27\xa1\x3f\x08\x42\xbf\x1f\x17\xaa\xff\xe8\x4e\x61\xed\x6d\x88\x95\x01\xb6\x30\xa8\x80\x81\xde\xa6\x29\x6a\xbd\xd8\xe6\x90\x13\xa8\xbd\x51\xf8\x1a\xb3\xe5\x10\xc5\x92\x6c\x71\xfd\xae\x38\xac\xf6\x3e\x91\x3e\x93\xa1\x3f\xbe\xb7\x16\x19\xb1\xaf\xf5\x23\x24\x5b\x56\x91\x3e\xb9\x68\x8e\xd5\x9e\x72\x17\xf7\x05\xe5\xc1\xb7\x3f\x08\xbc\x24\x9c\x4c\x62\x57\x33\xd9\x13\xf5\x7f\xd4\xab\xa7\xf2\x74\xbc\x94\x2f\xe6\x68\x4f\xcf\xbb\x0d\x14\x37\x41\x5a\xbd\xb3\x30\x80\x4d\xb1\x29\xb3\x1d\xed\xcd\xab\xbd\x82\x69\x44\x97\x22\xa8\x14\x86\xa4\x6f\x51\xca\x44\x5f\x0a\xc3\x52\x53\xee\x6a\x90\xfe\x1e\xed\x6a\x48\x34\x89\xfa\xde\x38\xe9\x4f\xc6\xb1\xd7\x8f\x9d\x83\x97\xf5\x98\x4e\x99\xa0\x1a\x84\x80\x00\xeb\x7b\x9e\x1a\x91\xff\xd5\x50\xc5\x9f\xcf\x04\x77\x6c\x43\xb7\xef\xfe\xf3\xcd\x01\xe7\x9b\xbf\x8e\x58\xfd\x4f\xb1\x1f\x8e\xbd\x61\x32\x1b\x07\x05\x77\x32\x0c\x6c\x7c\x2f\xf7\x00\x0d\x5a\xd4\x90\xf3\x47\x84\x12\x1b\xbf\x76\x52\xb9\x7e\xf3\x17\xd5\x87\x07\x6d\x17\xf0\x86\x09\x49\xfb\x9a\xaa\x57\x6d\xd0\x45\xf1\x42\x02\x77\x4a\xae\x7f\x40\x41\x65\x35\x63\xc7\x78\x17\x4e\x46\xc7\x2a\x2f\xee\x45\xa7\x3d\x38\xbb\xba\xfe\xb5\x73\xd9\xb9\xec\x5c\x1d\xe1\x44\x93\x19\x2d\xea\x60\xba\x97\xaf\xae\xb1\xf7\x36\x8d\xfc\x7e\xe8\xc7\x45\xc1\x31\x2b\xca\xe2\x22\x06\x92\x67\x16\x35\x07\x97\xc2\x29\x24\x55\xc8\xec\xe9\x95\x4d\xc6\x46\x3e\xa2\xd0\xc5\xbe\x37\x58\xb8\xdb\xf7\x8b\xda\x05\xfb\xd5\xf5\xcd\xde\xd7\xcb\xfd\xb0\xbb\x64\xe5\xda\x16\x37\x6e\x58\x5b\x85\xb7\x4a\x3e\x6b\x54\x9f\xa2\xe8\x8e\xe7\x86\x92\x46\xfd\x26\xc3\x16\x0c\x54\xbc\x7e\x8c\xfc\x30\xf9\x14\x45\xb4\x93\x8a\x6d\x0e\x39\x71\x65\xf7\xa9\xfd\x29\x8a\xda\x53\x25\x0d\xa6\x76\xec\x2b\x64\x99\x4d\x2d\x8e\x8b\x7c\x16\x85\xa1\xfc\x37\x96\x5a\xf0\xc5\xa2\xa1\x11\xa2\x22\x3f\xf5\xc7\x71\x12\x7f\x9e\xfa\xc9\x78\x12\x8d\x83\xbb\xbb\xd3\x64\x35\x30\x28\xd0\x0e\xf9\x1e\xa2\x38\x0a\x44\x9a\x6f\x33\x8c\xb6\xf3\x4c\xae\x19\x17\xfa\xd4\x04\xa9\x63\x12\x8c\xfb\xc3\xd9\xc0\x4f\xa2\xd9\xed\x60\x32\xf2\x82\x71\x3d\x16\x4b\x01\xdc\x22\xd9\xcb\x9b\x0a\x8c\xa2\x07\x09\x37\x28\x23\x4c\xa5\xc8\x74\x0f\xde\x5e\xbd\x7b\xfb\xfe\xb2\x2c\x9b\xeb\x5c\x91\xdf\x9f\x8c\x07\x44\x70\x05\x3b\x64\xf6\xa9\x8a\x76\x62\xd0\x86\x95\x7c\x86\x5c\x8a\xa5\x85\x26\x8b\x3d\xb1\x9c\xef\x4d\x36\x55\xf2\xeb\x2e\x8a\x86\x0f\x76\xb6\xa7\xe6\x33\x0d\x27\x9f\x3e\x27\x51\x34\x4c\x1e\x7c\x6f\xf0\x92\xb9\x2c\x0e\x44\xd1\xf0\x50\x6f\x51\x34\x2c\x83\xf5\x29\x74\xc2\x2d\x03\x76\x53\x45\x8d\xbb\x8f\x67\xb6\xd3\x55\x00\xb7\xb7\x48\xd2\xd6\xb3\x4e\x59\x5a\x73\x29\x5e\x2e\x8f\x23\x3f\x8a\x82\xc9\xf8\x95\x0a\xf9\x80\x2e\xb3\x96\xa9\xea\x65\x3b\x4d\xcb\xb1\x2f\x5d\x1b\xa4\x27\x4a\xe5\x03\xce\xa3\x6a\xf9\x24\x63\xbd\x6e\x3e\x49\xca\x0d\xda\x53\xcf\x82\x23\x88\xfd\x24\xa8\x55\x29\x91\x4c\x69\x7f\xb2\x35\x2b\xef\xdb\x56\x21\xcb\x62\x14\x4c\x98\x09\xdb\x9a\xd5\x75\x55\xf4\x54\xab\x64\xd2\xb7\x1b\x96\x59\xfc\x90\x78\x5f\x66\xa1\xef\x0d\x92\xd8\x1f\x7b\xe3\x38\x99\x50\xe3\x75\xad\x0c\x3a\x7e\xab\x60\x19\xc0\x1b\x54\xa9\xf3\x55\xf2\x66\xc0\xfa\x2e\xb1\x8b\x65\x15\xc5\x84\x50\xaf\xe1\x11\x77\xdf\xe3\x09\x51\x97\x97\xe8\x3f\x4c\x16\xfa\x2e\xce\x9e\x60\x54\x05\xdc\xf7\x68\x5d\x54\xfe\xbf\x90\xba\xa0\x7d\x82\x52\x5b\xa8\xef\x11\xba\xdf\xe4\x0b\x3f\x4e\x59\xfc\x67\x1d\xe6\x90\xd5\xe1\x41\x30\x68\x10\xdf\x4b\xb9\xcc\xb1\xee\x3e\xa7\xf9\xee\x27\x93\xfb\xa1\xdf\xf4\x9a\x93\x4e\xe3\x00\x4f\xb8\x4c\x9d\xe9\x45\x5f\x69\xd2\x38\x1f\x29\x10\x5f\xf0\x90\x3a\xec\x6b\x36\x6a\x22\x57\xb6\x69\x82\x9f\xb0\xcc\xe4\xd1\x30\x87\xee\x4d\x83\xc6\x56\xab\x8e\x3e\xf9\x10\x7b\x25\xb6\x37\x0d\xa0\x0d\x24\x07\xf4\x93\xf2\xb3\x83\x7f\x01\xf7\xd5\x55\x5b\x07\x7e\x6d\xad\x5a\xba\x63\xa5\xef\x59\x5e\x54\x79\x9d\xc1\x29\xdc\x62\xbd\xa0\xee\x3d\xe0\x6b\xca\xae\x63\x56\xaa\xae\xc3\xee\x15\x6d\x5f\x65\x34\xeb\xe7\x28\xf6\xe2\xa0\xff\xbd\x02\xda\x49\x56\x10\x45\x09\xed\x5e\x79\x74\x9b\x48\xe5\xd1\x5c\x51\x40\xd7\x5e\x83\x2c\xaa\xe7\x21\x8d\xa2\x3e\x46\xb6\x2e\xce\x0c\x6c\xe0\xe7\x66\x67\xdb\x0a\xd8\xd8\xf7\x46\xe5\xe1\xc1\xb8\x7e\x98\xab\xcb\xce\x06\xd9\xda\xe2\x68\x73\x70\x06\x61\x50\x9b\x24\xb3\x64\xb5\x47\x26\xb1\x1f\xc5\x47\xe7\x12\x45\xc8\x27\x90\x70\x2b\x84\xbb\x71\xb4\x45\x5f\x87\x50\x3a\xca\x36\x76\x06\x5c\xa7\xf2\x09\x95\xeb\x53\x07\x0c\x67\xe3\x71\xfd\x80\x2b\xe6\x6b\xfc\x22\xed\x31\xcc\x2c\xee\x97\x3d\x83\x91\x9f\x7c\x99\xd8\x33\x18\xea\x00\xdf\xa4\x38\x7a\xed\xe1\x2e\x63\x62\xc5\xd2\xc7\x11\x5f\xba\xa7\x5b\xcd\xd2\x28\x0e\xbd\xfe\x87\x64\x14\xdc\x87\x5e\x1c\x4c\xc6\xb5\x03\xbe\x99\xca\xa7\x0a\x17\xfc\xeb\xde\xc2\xb3\x70\x98\x4c\x43\xff\x2e\xf8\x44\x06\x76\x17\x21\xda\x7a\xb3\x7d\x18\xaa\x8d\xe2\x62\x79\x51\x1d\xab\x6d\xb6\xa6\x79\xd7\x08\x94\x5e\x17\x8b\xb6\x7d\xcb\x60\x6d\xfa\x93\x3d\x90\xfe\xb9\x65\x6f\x9e\x82\xab\x1b\x51\xaf\x0e\x66\x91\x9f\x04\x57\x37\xe3\xa3\xe7\x2e\x76\xab\xe2\x2e\x36\xf8\x37\xfb\xc3\x01\x0c\xaf\x2e\x8f\x00\x86\x57\x97\x3f\x0e\x10\x7f\x39\x14\x8f\xbf\xd4\x34\x32\xab\x87\xf5\xd9\xac\x9e\xe0\x67\xcf\x7a\xc9\x7d\x91\x6d\x24\x17\xb5\x35\x31\xfb\x18\xdd\x07\x89\x3f\x1e\x4c\x27\xc1\x98\x96\x45\xd9\xc5\x3d\xa4\x22\xa1\x52\xb8\x79\x50\xe6\x04\x4f\xdd\x3e\x34\x84\x46\x6e\xd3\xde\x10\x1a\xb9\xcd\xfa\xa8\xdc\xa3\x37\x04\x8a\x6b\xb9\x86\xc0\xd4\x8b\xa2\xc3\xbb\x88\xa6\x50\x63\xa7\x5a\x08\xd5\x4e\xfc\xeb\x02\x1f\x57\xdc\xa0\x90\x5c\x37\xab\xae\x8f\x0f\x41\xec\x8f\x27\x41\x74\x90\x7e\x56\xec\x09\xe1\x79\x65\xb8\x93\x01\xfb\x48\xe7\x3b\xcb\xfc\xe3\xe3\xca\xac\x73\x23\x37\x19\xed\x2c\xba\x5b\xad\xba\x76\xc7\xd7\x9d\x73\xd1\x7d\xde\x7f\x2c\xc6\xfb\xf1\xc3\x43\x3c\x1a\xc6\x93\xe9\x80\xf6\x18\xb5\xb3\xb8\xd6\x39\xc4\x2b\xd4\x68\x1f\x38\xcb\x4d\x71\x53\x56\xbc\x8f\x2e\x1e\x38\xda\x27\x1e\x6e\xcb\x95\xe7\x3b\x10\xf8\x84\xca\x3e\xea\xa9\x1e\xd5\x32\xb1\xc4\xcc\x5e\xa0\x13\x8c\xf5\xfd\xe7\x15\xcf\xd1\xbe\x84\xa3\xda\xd1\x3d\x85\x6f\x9d\x83\x62\xb4\x91\xa5\x88\x23\x80\xa5\x66\xcb\xf2\xea\x91\x66\x6b\xb2\x71\x6b\xb3\x05\xf0\x80\xf9\xc6\x85\xc5\x95\x31\x1b\xdd\xeb\x76\x97\xf6\x1d\x33\x6d\x7f\xbb\xfb\x10\xd4\x75\xb8\x67\x70\x6e\x5f\x9d\xda\x67\xc3\x2f\x8a\xed\xf5\xd7\x3d\x7a\xc2\xd8\x65\x2a\x5d\xf1\x27\xec\x3a\xa8\x7e\x2e\xc5\xff\x0f\xa8\xb3\xe4\xc6\x61\x7c\x66\x4a\xdc\x4f\xef\x6b\x10\x59\xde\xd9\x31\x25\x36\x8f\xcb\x62\x1a\x73\xce\x44\x77\xb3\x9d\x3f\xe2\xae\xb3\xdc\x2c\xf7\x72\x21\x6e\xa4\x7d\xde\x3c\x87\xd7\x85\xc9\x4b\x28\x87\xd2\x16\xcd\x89\x8f\x65\x76\x30\xf2\x0c\xe7\x1d\x21\xb3\xa2\x58\xb4\xd2\x1a\xcd\x76\x93\x5c\x5d\x77\xbe\x3a\x21\x7f\x3d\xdf\x9f\x37\xb6\x00\xaa\x8c\x4b\x91\x73\xbd\xc9\xb8\x2a\x9f\x94\x76\xec\x33\x0b\x83\xeb\x4d\xa1\xaa\x99\x56\x81\xd0\xfb\xdd\x53\xab\xf5\xbf\x01\x00\x00\xff\xff\xb2\xa1\x11\x6b\x0c\x31\x00\x00") func embdDojoconfigYmlBytes() ([]byte, error) { return bindataRead( @@ -85,8 +86,8 @@ func embdDojoconfigYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "embd/dojoConfig.yml", size: 12361, mode: os.FileMode(0664), modTime: time.Unix(1605496190, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9b, 0x39, 0x5f, 0x4a, 0x3d, 0x66, 0x4, 0xed, 0x43, 0x2e, 0x79, 0xec, 0x68, 0xe0, 0x16, 0xe7, 0x8, 0xec, 0xb9, 0xa3, 0x40, 0x9f, 0xfc, 0xb, 0xc1, 0x84, 0x4e, 0x5e, 0xec, 0x61, 0xe7, 0xd9}} + info := bindataFileInfo{name: "embd/dojoConfig.yml", size: 12556, mode: os.FileMode(0644), modTime: time.Unix(1620441752, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdd, 0xbc, 0xd4, 0xfb, 0x8a, 0x72, 0x88, 0xf6, 0xfc, 0xe1, 0xa7, 0x8f, 0xb7, 0x6d, 0x9d, 0xe2, 0x5a, 0x1b, 0x36, 0xe4, 0x51, 0xb4, 0x9, 0x8e, 0x81, 0x8c, 0x28, 0x3a, 0x6c, 0xd2, 0x33, 0xab}} return a, nil } @@ -105,11 +106,31 @@ func embdGdjTarGz() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "embd/gdj.tar.gz", size: 11531, mode: os.FileMode(0664), modTime: time.Unix(1605493493, 0)} + info := bindataFileInfo{name: "embd/gdj.tar.gz", size: 11531, mode: os.FileMode(0664), modTime: time.Unix(1619325511, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x55, 0x50, 0x9, 0xd9, 0x40, 0x71, 0xad, 0x6, 0x9, 0x6b, 0x74, 0x9f, 0x99, 0x9a, 0xce, 0xcd, 0xaf, 0xb8, 0xe0, 0x82, 0xc2, 0x61, 0xd7, 0xae, 0x7f, 0x98, 0x3d, 0x77, 0x85, 0x67, 0x78, 0x7e}} return a, nil } +var _embdSetupSuperuserExpect = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\xce\xcd\x4e\x85\x30\x10\x05\xe0\x7d\x9f\xe2\x58\x59\xe8\x42\x91\xb8\xb3\x2f\xe1\x5e\x8d\x19\x61\x2c\x4d\x64\xda\xf4\x47\x20\x84\x77\x37\x41\xb8\xc9\xbd\xbb\xbb\xfe\xe6\x9c\x39\xb7\x37\x75\x49\xb1\xfe\x72\x52\xf3\x14\xb8\xcd\x4a\x25\xce\x28\x89\xa3\xd0\xc0\x78\xfb\x71\xd2\xf1\x84\x8a\xa2\xfd\xc5\xd3\x87\xd9\x38\x50\x4a\xa3\x8f\xdd\x05\x37\x3b\x67\x37\xb0\x2f\x19\x0f\x8d\x51\x29\xd0\x28\x08\x73\xee\xbd\x3c\x63\x20\x21\xcb\x8f\x61\x46\xdb\x93\x58\x3e\x15\x55\xc7\x47\xa3\xfe\x77\x60\x51\x00\xa0\x5f\xf7\x8b\x17\x8d\x05\x3c\x85\xcf\xc4\xd2\x41\x57\x47\xf2\x3d\x6a\x98\x0d\x5a\x2f\xd9\x49\x61\xac\xe7\x49\xdc\x91\x25\x27\xf7\x57\x37\xb0\xff\x56\xab\xfa\x0b\x00\x00\xff\xff\x41\x8d\xfd\x05\x22\x01\x00\x00") + +func embdSetupSuperuserExpectBytes() ([]byte, error) { + return bindataRead( + _embdSetupSuperuserExpect, + "embd/setup-superuser.expect", + ) +} + +func embdSetupSuperuserExpect() (*asset, error) { + bytes, err := embdSetupSuperuserExpectBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "embd/setup-superuser.expect", size: 290, mode: os.FileMode(0664), modTime: time.Unix(1621365737, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb7, 0x7f, 0xcf, 0x56, 0x6f, 0xc6, 0x3c, 0x15, 0xea, 0xbd, 0x96, 0xed, 0xc4, 0xd7, 0xd, 0x24, 0x6b, 0x52, 0x46, 0x98, 0xf2, 0x94, 0xcf, 0xbe, 0xb2, 0x26, 0x4d, 0x40, 0xb9, 0x7c, 0xf5, 0x4b}} + return a, nil +} + // Asset loads and returns the asset for the given name. // It returns an error if the asset could not be found or // could not be loaded. @@ -201,8 +222,9 @@ func AssetNames() []string { // _bindata is a table, holding each asset generator, mapped to its name. var _bindata = map[string]func() (*asset, error){ - "embd/dojoConfig.yml": embdDojoconfigYml, - "embd/gdj.tar.gz": embdGdjTarGz, + "embd/dojoConfig.yml": embdDojoconfigYml, + "embd/gdj.tar.gz": embdGdjTarGz, + "embd/setup-superuser.expect": embdSetupSuperuserExpect, } // AssetDebug is true if the assets were built with the debug flag enabled. @@ -250,8 +272,9 @@ type bintree struct { var _bintree = &bintree{nil, map[string]*bintree{ "embd": &bintree{nil, map[string]*bintree{ - "dojoConfig.yml": &bintree{embdDojoconfigYml, map[string]*bintree{}}, - "gdj.tar.gz": &bintree{embdGdjTarGz, map[string]*bintree{}}, + "dojoConfig.yml": &bintree{embdDojoconfigYml, map[string]*bintree{}}, + "gdj.tar.gz": &bintree{embdGdjTarGz, map[string]*bintree{}}, + "setup-superuser.expect": &bintree{embdSetupSuperuserExpect, map[string]*bintree{}}, }}, }} diff --git a/database.go b/database.go index 818a623..c8c3cb5 100644 --- a/database.go +++ b/database.go @@ -43,6 +43,32 @@ func installDB(osTar string, dbTar *config.DBTarget, dCmd *osCmds) { return } +func installDBClient(osTar string, dbTar *config.DBTarget, dCmd *osCmds) { + // Look at the dbTar and call function to install that DB target + switch dbTar.Engine { + case "SQLite": + // Generate commands to install SQLite + // A remote SQLite DB makes no sense + // TODO: Log this error + return + case "MariaDB": + // Generate commands to install MariaDB + // TODO: Write install for MariaDB client + //instMariaDBClient(osTar, dCmd) + return + case "MySQL": + // Generate commands to install MySQL + // TODO: Write install for MySQL client + //instMySQLClient(osTar, dCmd) + return + case "PostgreSQL": + // Generate commands to install PostgreSQL + instPostgreSQLClient(osTar, dCmd) + } + return +} + + func startDB(osTar string, dbTar *config.DBTarget, dbCmd *osCmds) { // Look at the dbTar and call function to install that DB target switch dbTar.Engine { diff --git a/embd/dojoConfig.yml b/embd/dojoConfig.yml index 71f37a7..13bfa5f 100644 --- a/embd/dojoConfig.yml +++ b/embd/dojoConfig.yml @@ -14,7 +14,7 @@ # SecretKey Install: - Version: "1.7.1" # DD_Version - Release version of DefectDojo from Github Releases + Version: "1.15.0" # DD_Version - Release version of DefectDojo from Github Releases SourceInstall: false # DD_SourceInstall - Boolean if a source install is desired (vs a release) # If ^ is true, a souce code install will occur overriding the release version provided SourceBranch: "dev" # DD_SourceBranch - The branch's HEAD to be checked out if SourceInstall is true @@ -24,29 +24,29 @@ Install: Redact: true # DD_Redact - Boolean to redact sensitive info from the logs DevInstall: false # DD_Dev_Install - Boolean for development installs, uses fixed values Prompt: false # DD_Prompt - Boolean to prompt for configuration values - NOT IMPLEMENTED YET - Mac: false # DD_Mac - Boolean to set the install target as a Mac - NOT IMPLEMENTED YET + Mac: false # DD_Mac - Boolean to set the install target as a Mac - NOT IMPLEMENTED YET - use docker-compose instead Root: "/opt/dojo" # DD_Root - Root directory for the DefectDojo app Note: No traiing / - Source: "django-DefectDojo" # DD_Source - Directory in DD_Root for DefectDojo source code + Source: "django-DefectDojo" # DD_Source - Directory in DD_Root for DefectDojo source code Note: No /'s just the name Files: "local" # DD_Files - Directory in DD_Root for local files (static assets, uploads, etc) Media: "media" # DD_Media - Directory in DD_Files for uploaded files (screenshots, test artifacts, etc) Static: "static" # DD_Static - Directory in DD_Files for static asset files (JS, images, etc) App: "dojo" # DD_App - Directory in DD_Source where the DefectDojo Django app is located - Sampledata: false # DD_Sampledata - Boolean for installing sample data during the install + Sampledata: false # DD_Sampledata - Boolean for installing sample data during the install - NOT IMPLEMENTED YET PullSource: true # DD_PullSource - Boolean for installer to download source for DefectDojo Note: Usually for debugging the installer itself DB: - Engine: "MySQL" # DD_DB_Engine - Database engine to use (SQLite, MySQL, PostgreSQL, MariaDB) Note: CASE sEnSiTiVE! + Engine: "PostgreSQL" # DD_DB_Engine - Database engine to use (SQLite, MySQL, PostgreSQL, MariaDB) Note: CASE sEnSiTiVE! Local: true # DD_DB_Local - Boolean for when DB is on the same host/server/vm (local) Exists: false # DD_DB_Exists - Boolean for when DB for DefectDojo already exists so no install needed - Ruser: "root" # DD_DB_Ruser - Superuser for the database Note: this and Rpass below REQUIRED for remote and existing DBs - Rpass: "vee0Thoanae1daePooz0ieka" # DD_DB_Rpass - Password for the database superuser Note: set to 24 random characters + Ruser: "postgres" # DD_DB_Ruser - Superuser for the database, root for MySQL/MaraiDB & posgres for PostgreSQL. Note: this and Rpass below REQUIRED for remote and existing DBs + Rpass: "vee0Thoanae1daePooz0ieka" # DD_DB_Rpass - Password for the database superuser TODO: Note: set to 24 random characters if left blank Name: "dojodb" # DD_DB_Name - Name of the database that DefectDojo will use User: "dojodbusr" # DD_DB_User - Username of the database user that DefectDojo will use Pass: "vee0Thoanae1daePooz0ieka" # DD_DB_Pass - Password for the database user DefectDojo will use Note: set to 24 random characters Host: "localhost" # DD_DB_Host - Database hostname - Port: 3306 # DD_DB_Port - Port the database is listening on + Port: 5432 # DD_DB_Port - Port the database is listening on - 3306 for MySQL/MariaDB and 5432 for PostgreSQL Drop: false # DD_DB_Drop - Boolean to tell the installer to drop an existing DB if found OS: - User: "dojo-srv" # DD_OS_User - OS user to own the DefectDojo instll and files + User: "dojosrv" # DD_OS_User - OS user to own the DefectDojo instll and files Pass: "wahlieboojoKa8aitheibai3" # DD_OS_Pass - Password for the OS user for DefectDojo Note: set to 24 random characters Group: "dojo-srv" # DD_OS_Group - OS Group to own the DefectDojo install and files UID: 1337 # DD_OS_UID - User ID for the DefectDojo OS user @@ -57,7 +57,7 @@ Install: Env: "/dojo/settings/.env.prod" # DD_SET_Env - Path to DefectDojo's environmental variables file Admin: User: "admin" # DD_ADMIN_User - Admin user for the DefectDojo web app - Pass: "admin" # DD_ADMIN_Pass - Password for the DefectDojo web app admin user Note: set to 24 random characters + Pass: "ddadmin" # DD_ADMIN_Pass - Password for the DefectDojo web app admin user Note: set to 24 random characters Email: "admin@localhost" # DD_ADMIN_Email - Email address for the web app admin user First: "Default" # DD_ADMIN_First - Web app admin users's first name Last: "Admin" # DD_ADMIN_Last - Web app admin users's last name @@ -154,14 +154,14 @@ Settings: # These are optional config values that generally never need to be changed and are used while testing godojo # rather then actual installs Options: - HelpURL: "https://github.com/mtesauro/godojo" # DD_ - ReleaseURL: "https://github.com/DefectDojo/django-DefectDojo/archive/" # DD_ - CloneURL: "https://github.com/DefectDojo/django-DefectDojo.git" # DD_ - YarnGPG: "https://dl.yarnpkg.com/debian/pubkey.gpg" # DD_ - YarnRepo: "deb https://dl.yarnpkg.com/debian/ stable main" # DD_ - NodeURL: "https://deb.nodesource.com/setup_12.x" # DD_ - Embd: false - Key: "" - Tmpdir: "/opt/.dojo-temp/" - UsrInst: true + HelpURL: "https://github.com/defectdojo/godojo" # + ReleaseURL: "https://github.com/DefectDojo/django-DefectDojo/archive/" # + CloneURL: "https://github.com/DefectDojo/django-DefectDojo.git" # + YarnGPG: "https://dl.yarnpkg.com/debian/pubkey.gpg" # + YarnRepo: "deb https://dl.yarnpkg.com/debian/ stable main" # + NodeURL: "https://deb.nodesource.com/setup_12.x" # + Embd: false # + Key: "" # + Tmpdir: "/opt/.dojo-temp/" # + UsrInst: false # diff --git a/godojo.go b/godojo.go index 1b56eed..d093680 100644 --- a/godojo.go +++ b/godojo.go @@ -24,7 +24,7 @@ import ( // Global vars var ( // Installer version - ver = "1.1.1" + ver = "1.1.2" // Configuration file name cf = "dojoConfig.yml" // Global config struct @@ -81,7 +81,7 @@ func dojoBanner() { fmt.Println(" /___/ ") fmt.Println(" version ", ver) fmt.Println("") - fmt.Println(" Welcome to goDojo, the official way to install DefectDojo.") + fmt.Println(" Welcome to godojo, the official way to install DefectDojo.") fmt.Println(" For more information on how goDojo does an install, see:") fmt.Printf(" %s", HelpURL) fmt.Println("") @@ -157,6 +157,19 @@ func getDojoRelease(i *config.InstallConfig) error { traceMsg(fmt.Sprintf("Relese download list is %+v", dwnURL)) traceMsg(fmt.Sprintf("File path to write tarball is %+v", tarball)) + // Check for existing tarball before downloading, might be a re-run of godojo + _, err = os.Stat(tarball) + if err == nil { + // File already downloaded so return early + err = extractRelease(tarball, i) + if err != nil { + return err + } + s.Stop() + statusMsg("Tarball already downloaded and extracted the DefectDojo release file") + return nil + } + // Setup a custom http client for downloading the Dojo release var ddClient = &http.Client{ // Set time to a max of 20 seconds @@ -201,9 +214,43 @@ func getDojoRelease(i *config.InstallConfig) error { return err } + // Extract the tarball to create the Dojo source directory + err = extractRelease(tarball, i) + if err != nil { + return err + } + //traceMsg("Extracting tarball into the Dojo source directory") + //tb, err := os.Open(tarball) + //if err != nil { + // traceMsg(fmt.Sprintf("Error openging tarball was: %+v", err)) + // return err + //} + //err = Untar(i.Root, tb) + //if err != nil { + // traceMsg(fmt.Sprintf("Error extracting tarball was: %+v", err)) + // return err + //} + + //// Remane source directory to the non-versioned name + //traceMsg("Renaming source directory to the non-versioned name") + //oldPath := filepath.Join(i.Root, "django-DefectDojo-"+i.Version) + //newPath := filepath.Join(i.Root, i.Source) + //err = os.Rename(oldPath, newPath) + //if err != nil { + // traceMsg(fmt.Sprintf("Error renaming Dojo source directory was: %+v", err)) + // return err + //} + + // Successfully extracted the file, return nil + s.Stop() + statusMsg("Successfully downloaded and extracted the DefectDojo release file") + return nil +} + +func extractRelease(t string, i *config.InstallConfig) error { // Extract the tarball to create the Dojo source directory traceMsg("Extracting tarball into the Dojo source directory") - tb, err := os.Open(tarball) + tb, err := os.Open(t) if err != nil { traceMsg(fmt.Sprintf("Error openging tarball was: %+v", err)) return err @@ -223,10 +270,6 @@ func getDojoRelease(i *config.InstallConfig) error { traceMsg(fmt.Sprintf("Error renaming Dojo source directory was: %+v", err)) return err } - - // Successfully extracted the file, return nil - s.Stop() - statusMsg("Successfully downloaded and extracted the DefectDojo release file") return nil } @@ -599,6 +642,27 @@ func main() { } Spin.Stop() statusMsg("Installing Database complete") + } + + // Install DB clients for remote DBs + if !conf.Install.DB.Local { + // Setup commands for DB clients + dbClient := osCmds{} + dbConf := &conf.Install.DB + installDBClient(target.id, dbConf, &dbClient) + + // Run the commands to install the chosen DB + Spin = spinner.New(spinner.CharSets[34], 100*time.Millisecond) + Spin.Prefix = "Installing " + conf.Install.DB.Engine + " database client for DefectDojo..." + Spin.Start() + for i := range dbClient.cmds { + sendCmd(cmdLogger, + dbClient.cmds[i], + dbClient.errmsg[i], + dbClient.hard[i]) + } + Spin.Stop() + statusMsg("Installing Database client complete") } diff --git a/os.go b/os.go index 7db00c3..46eddb3 100644 --- a/os.go +++ b/os.go @@ -71,6 +71,19 @@ func instPostgreSQL(id string, b *osCmds) { return } +func instPostgreSQLClient(id string, b *osCmds) { + switch id { + case "ubuntu:18.04": + fallthrough + case "ubuntu:20.04": + fallthrough + case "ubuntu:20.10": + ubuntuInstPostgreSQLClient(id, b) + } + return +} + + func defaultDBCreds(db *config.DBTarget, os string) map[string]string { // Setup a map to return creds := map[string]string{"user": "foo", "pass": "bar"} diff --git a/prepInstall.go b/prepInstall.go index d5245d5..2695130 100644 --- a/prepInstall.go +++ b/prepInstall.go @@ -83,7 +83,10 @@ func readConfigFile() { // overrides any options set in the configuration file. These variables // are used to supply either install-time configurations or provide values // that are used in DefectDojo's settings.py configuration file -func readEnvVars() { // Env variables pulled from repo Add newly supported env vars below and to the case statement below after "if match {" +func readEnvVars() { + // Env variables pulled from repo. Add newly supported env vars below and + // to the switch statement below after the for that ranges over overrides + // TODO: Add non-setting.py ENV vars like DD_SourcCommit dojoEnvs := map[string]bool{ "DD_ADMIN_FIRST_NAME": true, "DD_ADMIN_LAST_NAME": true, diff --git a/ubuntu.go b/ubuntu.go index b725884..a472d74 100644 --- a/ubuntu.go +++ b/ubuntu.go @@ -3,6 +3,8 @@ package main import ( "bufio" "fmt" + "io/fs" + "io/ioutil" "os" "strings" @@ -136,6 +138,33 @@ func ubuntuInstPostgreSQL(id string, b *osCmds) { return } +func ubuntuInstPostgreSQLClient(id string, b *osCmds) { + switch id { + case "ubuntu:18.04": + fallthrough + case "ubuntu:20.04": + fallthrough + case "ubuntu:20.10": + b.id = id + b.cmds = []string{ + "DEBIAN_FRONTEND=noninteractive apt-get install -y postgresql-client-12", + "groupadd -f postgres", + "useradd -s /bin/bash -m -g postgres postgres", + } + b.errmsg = []string{ + "Unable to install PostgreSQL client", + "Unable to add postgres group", + "Unable to add postgres user", + } + b.hard = []bool{ + true, + true, + true, + } + } + return +} + // Determine the default creds for a database freshly installed in Ubuntu func ubuntuDefaultDBCreds(db *config.DBTarget, creds map[string]string) { // Installer currently assumes the default DB passwrod handling won't change by release @@ -258,6 +287,10 @@ func ubuntuOSPrep(id string, inst *config.InstallConfig, b *osCmds) { } func ubuntuSetupDDjango(id string, inst *config.InstallConfig, b *osCmds) { + // Setup expect script needed to set initial admin password + traceMsg(fmt.Sprintf("Injecting file %s at %s", "setup-superuser.expect", inst.Root+"/django-DefectDojo")) + _ = injectFile("setup-superuser.expect", inst.Root+"/django-DefectDojo", 0755) + // Django installs - migrations, create Django superuser switch id { case "ubuntu:18.04": @@ -273,7 +306,7 @@ func ubuntuSetupDDjango(id string, inst *config.InstallConfig, b *osCmds) { "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py createsuperuser --noinput --username=\"" + inst.Admin.User + "\" --email=\"" + inst.Admin.Email + "\"", "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && " + - inst.Root + "/django-DefectDojo/setup/scripts/common/setup-superuser.expect " + inst.Admin.User + " " + inst.Admin.Pass, + inst.Root + "/django-DefectDojo/setup-superuser.expect " + inst.Admin.User + " " + inst.Admin.Pass, "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata product_type", "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata test_type", "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata development_environment", @@ -344,3 +377,21 @@ func ubuntuSetupDDjango(id string, inst *config.InstallConfig, b *osCmds) { return } + +func injectFile(n string, p string, mask fs.FileMode) error { + loc := emdir + "setup-superuser.expect" + d, err := Asset(loc) + if err != nil { + return err + } + + err = ioutil.WriteFile(p+"/"+n, d, mask) + if err != nil { + // File can't be written + return err + } + + traceMsg(fmt.Sprintf("Wrote file %s at %s", n, p)) + + return nil +}