Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GeoDa 1.8.9.3 #451

Merged
merged 5 commits into from
Jul 13, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions DataViewer/DataSource.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ bool IDataSource::IsWritable(GdaConst::DataSourceType ds_type)
ds_type == GdaConst::ds_gml ||
ds_type == GdaConst::ds_mapinfo ||
ds_type == GdaConst::ds_sqlite ||
ds_type == GdaConst::ds_gpkg ||
ds_type == GdaConst::ds_mysql ||
ds_type == GdaConst::ds_oci ||
ds_type == GdaConst::ds_postgresql )
Expand Down Expand Up @@ -87,6 +88,8 @@ wxString IDataSource::GetDataTypeNameByExt(wxString ext)
ds_format = "GeoJSON";
else if(ext.CmpNoCase("sqlite")==0)
ds_format = "SQLite";
else if(ext.CmpNoCase("gpkg")==0)
ds_format = "GPKG";
else if(ext.CmpNoCase("xls")==0)
ds_format = "XLS";
else if(ext.CmpNoCase("xlsx")==0)
Expand Down Expand Up @@ -182,6 +185,7 @@ IDataSource* IDataSource::CreateDataSource(wxString data_type_name,
type == GdaConst::ds_esri_personal_gdb ||
type == GdaConst::ds_odbc ||
type == GdaConst::ds_sqlite ||
type == GdaConst::ds_gpkg ||
type == GdaConst::ds_xls ||
type == GdaConst::ds_xlsx ||
type == GdaConst::ds_geo_json )
Expand Down
5 changes: 4 additions & 1 deletion DataViewer/DataSource.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,10 @@ class FileDataSource : public IDataSource {

virtual IDataSource* Clone();

virtual bool IsFileDataSource() { return ds_type == GdaConst::ds_sqlite ? false : true;}
virtual bool IsFileDataSource() {
return ds_type == GdaConst::ds_sqlite || ds_type == GdaConst::ds_gpkg ? false : true;
}

/**
* Return file path.
*/
Expand Down
1 change: 1 addition & 0 deletions DialogTools/ConnectDatasourceDlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,7 @@ IDataSource* ConnectDatasourceDlg::CreateDataSource()
// a special case: sqlite is a file based database, so we need to get
// avalible layers and prompt for user selecting
if (datasource->GetType() == GdaConst::ds_sqlite ||
datasource->GetType() == GdaConst::ds_gpkg||
datasource->GetType() == GdaConst::ds_osm ||
datasource->GetType() == GdaConst::ds_esri_personal_gdb||
datasource->GetType() == GdaConst::ds_esri_file_geodb)
Expand Down
1 change: 1 addition & 0 deletions DialogTools/DatasourceDlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ void DatasourceDlg::Init()
ds_names.Add("GeoJSON (*.geojson;*.json)|*.geojson;*.json|"
"GeoJSON (*.geojson)|*.geojson|"
"GeoJSON (*.json)|*.json");
ds_names.Add("GeoPackage (*.gpkg)|*.gpkg");
ds_names.Add("SQLite/SpatiaLite (*.sqlite)|*.sqlite");

if( GeneralWxUtils::isWindows()){
Expand Down
8 changes: 6 additions & 2 deletions DialogTools/ExportDataDlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,7 @@ void ExportDataDlg::OnOkClick( wxCommandEvent& event )
// cases: e.g. sqlite, ESRI FileGDB
if (datasource_type == 0) {
if (wxFileExists(ds_name)) {
if (ds_name.EndsWith(".sqlite")) {
if (ds_name.EndsWith(".sqlite") || ds_name.EndsWith(".gpkg")) {
// add new layer to existing sqlite
is_update = true;
} else {
Expand Down Expand Up @@ -394,9 +394,13 @@ void ExportDataDlg::OnOkClick( wxCommandEvent& event )
} catch (GdaException& e) {
if (e.type() == GdaException::NORMAL)
return;

// special clean up for file datasource
if ( !tmp_ds_name.empty() ) {
if ( wxFileExists(tmp_ds_name) && !tmp_ds_name.EndsWith(".sqlite")){
if ( wxFileExists(tmp_ds_name) &&
!tmp_ds_name.EndsWith(".sqlite") &&
!tmp_ds_name.EndsWith(".gpkg") )
{
wxRemoveFile(ds_name);
wxCopyFile(tmp_ds_name, ds_name);
wxRemoveFile(tmp_ds_name);
Expand Down
4 changes: 3 additions & 1 deletion DialogTools/SaveAsDlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,9 @@ void SaveAsDlg::OnBrowseDatasourceBtn ( wxCommandEvent& event )
ds_type != GdaConst::ds_geo_json &&
ds_type != GdaConst::ds_mapinfo &&
ds_type != GdaConst::ds_sqlite &&
ds_type != GdaConst::ds_csv) {
ds_type != GdaConst::ds_gpkg &&
ds_type != GdaConst::ds_csv)
{
msg << "Save is not supported on current data source type: "
<< ds_format << ". Please try to use \"File->Save As\" other data source. "
<< "However, the project file can still be saved as other project file.";
Expand Down
28 changes: 22 additions & 6 deletions GdaConst.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -600,6 +600,16 @@ void GdaConst::init()
datasrc_field_illegal_regex[ds_sqlite] = wxEmptyString;
datasrc_field_casesensitive[ds_sqlite] = true;

datasrc_str_to_type["GPKG"] = ds_gpkg;
datasrc_type_to_prefix[ds_gpkg] = "";
datasrc_type_to_fullname[ds_gpkg] = "GeoPackage";
datasrc_table_lens[ds_gpkg] = 128;
datasrc_field_lens[ds_gpkg] = 128;
datasrc_field_warning[ds_gpkg] = no_field_warning;
datasrc_field_regex[ds_gpkg] = wxEmptyString;
datasrc_field_illegal_regex[ds_gpkg] = wxEmptyString;
datasrc_field_casesensitive[ds_gpkg] = true;

datasrc_str_to_type["WFS"] = ds_wfs;
datasrc_type_to_prefix[ds_wfs] = "WFS:";
datasrc_type_to_fullname[ds_wfs] = "OGC Web Feature Service";
Expand Down Expand Up @@ -670,23 +680,29 @@ void GdaConst::init()
for (ds_fld_map::iterator it=datasrc_req_flds.begin();
it != datasrc_req_flds.end(); it++) {
DataSourceType type = it->first;
if (type == ds_esri_file_geodb || type == ds_csv || type == ds_dbf ||
type == ds_gml || type == ds_kml || type == ds_mapinfo ||
type == ds_shapefile || type == ds_sqlite || type == ds_xls ||
type == ds_geo_json || type == ds_osm) {
if (type == ds_esri_file_geodb || type == ds_csv ||
type == ds_dbf || type == ds_gml ||
type == ds_kml || type == ds_mapinfo ||
type == ds_shapefile || type == ds_sqlite ||
type == ds_gpkg || type == ds_xls ||
type == ds_geo_json || type == ds_osm)
{
// These are simple files, and a file name must be supplied
it->second.insert("file");
} else if (type == ds_esri_arc_obj || type == ds_esri_personal_gdb ||
type == ds_esri_arc_sde || type == ds_mysql ||
type == ds_ms_sql || type == ds_oci || type == ds_odbc) {
type == ds_esri_arc_sde || type == ds_mysql ||
type == ds_ms_sql || type == ds_oci || type == ds_odbc)
{
it->second.insert("user");
it->second.insert("pwd");
it->second.insert("host");
it->second.insert("port");
it->second.insert("db_name");
} else if ( type == ds_wfs) {

it->second.insert("url");
} else if (type == ds_postgresql) {

it->second.insert("db_name");
}
}
Expand Down
2 changes: 1 addition & 1 deletion GdaConst.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ class GdaConst {
ds_esri_personal_gdb, ds_esri_arc_sde,
ds_csv, ds_dbf, ds_geo_json, ds_gml, ds_kml,
ds_mapinfo, ds_mysql, ds_ms_sql, ds_oci, ds_odbc, ds_postgresql,
ds_shapefile, ds_sqlite, ds_wfs, ds_xls, ds_xlsx, ds_osm, ds_ods, ds_cartodb, ds_unknown };
ds_shapefile, ds_sqlite, ds_gpkg, ds_wfs, ds_xls, ds_xlsx, ds_osm, ds_ods, ds_cartodb, ds_unknown };

static std::map<std::string, DataSourceType> datasrc_str_to_type;
static std::map<DataSourceType, std::string> datasrc_type_to_str;
Expand Down
10 changes: 10 additions & 0 deletions GeoDa.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,7 @@ EVT_CHAR_HOOK(GdaFrame::OnKeyEvent)

EVT_MENU(XRCID("ID_NEW_PROJ_FROM_SHP"), GdaFrame::OnNewProjectFromShp)
EVT_MENU(XRCID("ID_NEW_PROJ_FROM_SQLITE"), GdaFrame::OnNewProjectFromSqlite)
EVT_MENU(XRCID("ID_NEW_PROJ_FROM_GPKG"), GdaFrame::OnNewProjectFromGpkg)
EVT_MENU(XRCID("ID_NEW_PROJ_FROM_CSV"), GdaFrame::OnNewProjectFromCsv)
EVT_MENU(XRCID("ID_NEW_PROJ_FROM_DBF"), GdaFrame::OnNewProjectFromDbf)
EVT_MENU(XRCID("ID_NEW_PROJ_FROM_GDB"), GdaFrame::OnNewProjectFromGdb)
Expand Down Expand Up @@ -1223,6 +1224,7 @@ void GdaFrame::UpdateToolbarAndMenus()

GeneralWxUtils::EnableMenuItem(mb, "File", XRCID("ID_NEW_PROJ_FROM_SHP"), !proj_open);
GeneralWxUtils::EnableMenuItem(mb, "File", XRCID("ID_NEW_PROJ_FROM_SQLITE"), !proj_open);
GeneralWxUtils::EnableMenuItem(mb, "File", XRCID("ID_NEW_PROJ_FROM_GPKG"), !proj_open);
GeneralWxUtils::EnableMenuItem(mb, "File", XRCID("ID_NEW_PROJ_FROM_CSV"), !proj_open);
GeneralWxUtils::EnableMenuItem(mb, "File", XRCID("ID_NEW_PROJ_FROM_DBF"), !proj_open);
GeneralWxUtils::EnableMenuItem(mb, "File", XRCID("ID_NEW_PROJ_FROM_GDB"), !proj_open);
Expand Down Expand Up @@ -1874,6 +1876,14 @@ void GdaFrame::OnNewProjectFromSqlite(wxCommandEvent& event)
NewProjectFromFile(dlg.GetPath());
}

void GdaFrame::OnNewProjectFromGpkg(wxCommandEvent& event)
{
wxString wc = "GeoPacakge (*.gpkg)|*.gpkg";
wxFileDialog dlg(this,"New Project From GeoPackage", "", "", wc);
if (dlg.ShowModal() != wxID_OK) return;
NewProjectFromFile(dlg.GetPath());
}

void GdaFrame::OnNewProjectFromCsv(wxCommandEvent& event)
{
wxString wc = "Comma Separated Value (*.csv)|*.csv";
Expand Down
1 change: 1 addition & 0 deletions GeoDa.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ class GdaFrame: public wxFrame
void OnNewProject(wxCommandEvent& event);
void OnNewProjectFromShp(wxCommandEvent& event);
void OnNewProjectFromSqlite(wxCommandEvent& event);
void OnNewProjectFromGpkg(wxCommandEvent& event);
void OnNewProjectFromCsv(wxCommandEvent& event);
void OnNewProjectFromDbf(wxCommandEvent& event);
void OnNewProjectFromGdb(wxCommandEvent& event);
Expand Down
7 changes: 5 additions & 2 deletions ShapeOperations/OGRLayerProxy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -596,8 +596,11 @@ bool OGRLayerProxy::AddGeometries(Shapefile::Main& p_main)
{
// NOTE: OGR/GDAL 2.0 is still implementing addGeomField feature.
// So, we only support limited datasources for adding geometries.
if ( !(ds_type == GdaConst::ds_geo_json || ds_type == GdaConst::ds_gml
|| ds_type == GdaConst::ds_kml || ds_type == GdaConst::ds_sqlite) )
if ( !(ds_type == GdaConst::ds_geo_json ||
ds_type == GdaConst::ds_gml ||
ds_type == GdaConst::ds_kml ||
ds_type == GdaConst::ds_sqlite ||
ds_type == GdaConst::ds_gpkg) )
{
return false;
}
Expand Down
130 changes: 68 additions & 62 deletions rc/GdaAppResources.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20188,7 +20188,7 @@ static unsigned char xml_res_file_8[] = {
76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,
98,106,101,99,116,62,10,60,47,114,101,115,111,117,114,99,101,62,10};

static size_t xml_res_size_9 = 159785;
static size_t xml_res_size_9 = 159913;
static unsigned char xml_res_file_9[] = {
60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,
110,99,111,100,105,110,103,61,34,73,83,79,45,56,56,53,57,45,49,53,34,63,
Expand Down Expand Up @@ -20218,73 +20218,79 @@ static unsigned char xml_res_file_9[] = {
32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,
98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,
116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,79,74,
95,70,82,79,77,95,67,83,86,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,
97,98,101,108,62,67,111,109,109,97,32,83,101,112,97,114,97,116,101,100,
32,86,97,108,117,101,32,40,42,46,99,115,118,41,60,47,108,97,98,101,108,
62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,
32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,
120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,
69,87,95,80,82,79,74,95,70,82,79,77,95,68,66,70,34,62,10,32,32,32,32,32,
32,32,32,32,32,60,108,97,98,101,108,62,100,66,97,115,101,32,68,97,116,97,
98,97,115,101,32,70,105,108,101,32,40,42,46,100,98,102,41,60,47,108,97,
95,70,82,79,77,95,71,80,75,71,34,62,10,32,32,32,32,32,32,32,32,32,32,60,
108,97,98,101,108,62,71,101,111,80,97,99,107,97,103,101,32,40,42,46,103,
112,107,103,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,
47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,
99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,
34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,79,74,95,70,82,79,
77,95,67,83,86,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,
108,62,67,111,109,109,97,32,83,101,112,97,114,97,116,101,100,32,86,97,108,
117,101,32,40,42,46,99,115,118,41,60,47,108,97,98,101,108,62,10,32,32,32,
32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,
60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,
117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,
79,74,95,70,82,79,77,95,68,66,70,34,62,10,32,32,32,32,32,32,32,32,32,32,
60,108,97,98,101,108,62,100,66,97,115,101,32,68,97,116,97,98,97,115,101,
32,70,105,108,101,32,40,42,46,100,98,102,41,60,47,108,97,98,101,108,62,
10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,
32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,
77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,
87,95,80,82,79,74,95,70,82,79,77,95,74,83,79,78,34,62,10,32,32,32,32,32,
32,32,32,32,32,60,108,97,98,101,108,62,71,101,111,74,83,79,78,32,40,42,
46,106,115,111,110,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,
32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,
106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,
101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,79,74,95,
70,82,79,77,95,71,77,76,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,
98,101,108,62,71,101,111,103,114,97,112,104,121,32,77,97,114,107,117,112,
32,76,97,110,103,117,97,103,101,32,40,42,46,103,109,108,41,60,47,108,97,
98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,
10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,
61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,
73,68,95,78,69,87,95,80,82,79,74,95,70,82,79,77,95,74,83,79,78,34,62,10,
32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,101,111,74,83,
79,78,32,40,42,46,106,115,111,110,41,60,47,108,97,98,101,108,62,10,32,32,
32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,
32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,
117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,
79,74,95,70,82,79,77,95,71,77,76,34,62,10,32,32,32,32,32,32,32,32,32,32,
60,108,97,98,101,108,62,71,101,111,103,114,97,112,104,121,32,77,97,114,
107,117,112,32,76,97,110,103,117,97,103,101,32,40,42,46,103,109,108,41,
60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,
101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,
108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,
109,101,61,34,73,68,95,78,69,87,95,80,82,79,74,95,70,82,79,77,95,75,77,
76,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,75,101,
121,104,111,108,101,32,77,97,114,107,117,112,32,76,97,110,103,117,97,103,
101,32,40,42,46,107,109,108,41,60,47,108,97,98,101,108,62,10,32,32,32,32,
32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,
111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,
73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,79,
74,95,70,82,79,77,95,77,65,80,73,78,70,79,34,62,10,32,32,32,32,32,32,32,
32,32,32,60,108,97,98,101,108,62,77,97,112,73,110,102,111,32,40,42,46,116,
97,98,44,32,42,46,109,105,102,44,32,42,46,109,105,100,41,60,47,108,97,98,
101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,
32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,
34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,
68,95,78,69,87,95,80,82,79,74,95,70,82,79,77,95,88,76,83,34,62,10,32,32,
32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,83,32,69,120,99,101,
108,32,40,42,46,120,108,115,41,60,47,108,97,98,101,108,62,10,32,32,32,32,
32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,
73,68,95,78,69,87,95,80,82,79,74,95,70,82,79,77,95,75,77,76,34,62,10,32,
32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,75,101,121,104,111,108,
101,32,77,97,114,107,117,112,32,76,97,110,103,117,97,103,101,32,40,42,46,
107,109,108,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,
47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,
99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,
34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,79,74,95,70,82,79,
77,95,77,65,80,73,78,70,79,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,
97,98,101,108,62,77,97,112,73,110,102,111,32,40,42,46,116,97,98,44,32,42,
46,109,105,102,44,32,42,46,109,105,100,41,60,47,108,97,98,101,108,62,10,
32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,
32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,
101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,
95,80,82,79,74,95,70,82,79,77,95,88,76,83,34,62,10,32,32,32,32,32,32,32,
32,32,32,60,108,97,98,101,108,62,77,83,32,69,120,99,101,108,32,40,42,46,
120,108,115,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,
47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,
116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,
61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,
73,68,95,78,69,87,95,80,82,79,74,69,67,84,34,62,10,32,32,32,32,32,32,32,
32,60,108,97,98,101,108,62,38,97,109,112,59,78,101,119,32,80,114,111,106,
101,99,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,97,
99,99,101,108,62,67,116,114,108,43,78,60,47,97,99,99,101,108,62,10,32,32,
32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,
98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,
116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,80,82,79,
74,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,
97,109,112,59,79,112,101,110,32,80,114,111,106,101,99,116,60,47,108,97,
98,101,108,62,10,32,32,32,32,32,32,32,32,60,97,99,99,101,108,62,67,116,
114,108,43,79,60,47,97,99,99,101,108,62,10,32,32,32,32,32,32,60,47,111,
98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,
108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,
109,101,61,34,73,68,95,78,69,87,95,80,82,79,74,69,67,84,34,62,10,32,32,
32,32,32,32,32,32,60,108,97,98,101,108,62,38,97,109,112,59,78,101,119,32,
109,101,61,34,73,68,95,83,65,86,69,95,65,83,95,80,82,79,74,69,67,84,34,
62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,
80,114,111,106,101,99,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,
32,32,32,60,97,99,99,101,108,62,67,116,114,108,43,78,60,47,97,99,99,101,
108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,
32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,
101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,
78,95,80,82,79,74,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,
101,108,62,38,97,109,112,59,79,112,101,110,32,80,114,111,106,101,99,116,
60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,97,99,99,101,108,
62,67,116,114,108,43,79,60,47,97,99,99,101,108,62,10,32,32,32,32,32,32,
60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,
116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,
32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,65,83,95,80,82,79,74,69,
67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,
101,32,80,114,111,106,101,99,116,60,47,108,97,98,101,108,62,10,32,32,32,
32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,
106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,
114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,
115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,
61,34,73,68,95,83,65,86,69,95,80,82,79,74,69,67,84,34,62,10,32,32,32,32,
32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,60,47,108,97,98,101,108,
62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,
32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,
32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,
99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,
47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,
61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,
73,68,95,83,65,86,69,95,80,82,79,74,69,67,84,34,62,10,32,32,32,32,32,32,
32,32,60,108,97,98,101,108,62,83,97,118,101,60,47,108,97,98,101,108,62,
10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,
60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,
117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,88,80,79,82,84,
95,76,65,89,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,
62,83,97,118,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,
Expand Down
Loading